Fix logging usage across docs

This commit is contained in:
Julia Medina 2015-03-10 15:59:44 -03:00
parent 4811d16f1d
commit bd0b639b21
5 changed files with 27 additions and 18 deletions

View File

@ -132,16 +132,13 @@ Logging is another useful option for getting information about your spider run.
Although not as convenient, it comes with the advantage that the logs will be
available in all future runs should they be necessary again::
from scrapy import log
def parse_details(self, response):
item = response.meta.get('item', None)
if item:
# populate more `item` fields
return item
else:
self.log('No item received for %s' % response.url,
level=log.WARNING)
self.logger.warning('No item received for %s', response.url)
For more information, check the :ref:`topics-logging` section.

View File

@ -102,9 +102,12 @@ number of items will be specified through the ``MYEXT_ITEMCOUNT`` setting.
Here is the code of such extension::
import logging
from scrapy import signals
from scrapy.exceptions import NotConfigured
logger = logging.getLogger(__name__)
class SpiderOpenCloseLogging(object):
def __init__(self, item_count):
@ -133,15 +136,15 @@ Here is the code of such extension::
return ext
def spider_opened(self, spider):
spider.log("opened spider %s" % spider.name)
logger.info("opened spider %s", spider.name)
def spider_closed(self, spider):
spider.log("closed spider %s" % spider.name)
logger.info("closed spider %s", spider.name)
def item_scraped(self, item, spider):
self.items_scraped += 1
if self.items_scraped % self.item_count == 0:
spider.log("scraped %d items" % self.items_scraped)
logger.info("scraped %d items", self.items_scraped)
.. _topics-extensions-ref:

View File

@ -30,9 +30,12 @@ project as example.
from twisted.internet import reactor
from scrapy.crawler import CrawlerRunner
from scrapy.utils.log import configure_logging
from scrapy.utils.project import get_project_settings
runner = CrawlerRunner(get_project_settings())
settings = get_project_settings()
configure_logging(settings)
runner = CrawlerRunner(settings)
# 'followall' is the name of one of the spiders of the project.
d = runner.crawl('followall', domain='scrapinghub.com')
@ -54,11 +57,13 @@ the spider class as first argument in the :meth:`CrawlerRunner.crawl
from twisted.internet import reactor
import scrapy
from scrapy.crawler import CrawlerRunner
from scrapy.utils.log import configure_logging
class MySpider(scrapy.Spider):
# Your spider definition
...
configure_logging(settings)
runner = CrawlerRunner({
'USER_AGENT': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)'
})
@ -85,9 +90,12 @@ Here is an example that runs multiple spiders simultaneously, using the
from twisted.internet import reactor, defer
from scrapy.crawler import CrawlerRunner
from scrapy.utils.log import configure_logging
from scrapy.utils.project import get_project_settings
runner = CrawlerRunner(get_project_settings())
settings = get_project_settings()
configure_logging(settings)
runner = CrawlerRunner(settings)
dfs = set()
for domain in ['scrapinghub.com', 'insophia.com']:
d = runner.crawl('followall', domain=domain)
@ -102,9 +110,12 @@ Same example but running the spiders sequentially by chaining the deferreds:
from twisted.internet import reactor, defer
from scrapy.crawler import CrawlerRunner
from scrapy.utils.log import configure_logging
from scrapy.utils.project import get_project_settings
runner = CrawlerRunner(get_project_settings())
settings = get_project_settings()
configure_logging(settings)
runner = CrawlerRunner(settings)
@defer.inlineCallbacks
def crawl():

View File

@ -189,7 +189,7 @@ Example::
def parse_page2(self, response):
# this would log http://www.example.com/some_page.html
self.log("Visited %s" % response.url)
self.logger.info("Visited %s", response.url)
In some cases you may be interested in passing arguments to those callback
functions so you can receive the arguments later, in the second callback. You
@ -382,7 +382,7 @@ method for this job. Here's an example spider which uses it::
def after_login(self, response):
# check login succeed before going on
if "authentication failed" in response.body:
self.log("Login failed", level=log.ERROR)
self.logger.error("Login failed")
return
# continue scraping with authenticated session...

View File

@ -224,7 +224,7 @@ Let's see an example::
]
def parse(self, response):
self.log('A response from %s just arrived!' % response.url)
self.logger.info('A response from %s just arrived!', response.url)
Return multiple Requests and items from a single callback::
@ -412,7 +412,7 @@ Let's now take a look at an example CrawlSpider with rules::
)
def parse_item(self, response):
self.log('Hi, this is an item page! %s' % response.url)
self.logger.info('Hi, this is an item page! %s', response.url)
item = scrapy.Item()
item['id'] = response.xpath('//td[@id="item_id"]/text()').re(r'ID: (\d+)')
item['name'] = response.xpath('//td[@id="item_name"]/text()').extract()
@ -515,7 +515,6 @@ XMLFeedSpider example
These spiders are pretty easy to use, let's have a look at one example::
from scrapy import log
from scrapy.contrib.spiders import XMLFeedSpider
from myproject.items import TestItem
@ -527,7 +526,7 @@ These spiders are pretty easy to use, let's have a look at one example::
itertag = 'item'
def parse_node(self, response, node):
log.msg('Hi, this is a <%s> node!: %s' % (self.itertag, ''.join(node.extract())))
self.logger.info('Hi, this is a <%s> node!: %s', self.itertag, ''.join(node.extract()))
item = TestItem()
item['id'] = node.xpath('@id').extract()
@ -576,7 +575,6 @@ CSVFeedSpider example
Let's see an example similar to the previous one, but using a
:class:`CSVFeedSpider`::
from scrapy import log
from scrapy.contrib.spiders import CSVFeedSpider
from myproject.items import TestItem
@ -589,7 +587,7 @@ Let's see an example similar to the previous one, but using a
headers = ['id', 'name', 'description']
def parse_row(self, response, row):
log.msg('Hi, this is a row!: %r' % row)
self.logger.info('Hi, this is a row!: %r', row)
item = TestItem()
item['id'] = row['id']