Я использую Scrapy для сканирования нескольких веб-сайтов, которые могут делиться избыточной информацией.
Для каждой страницы, которую я царапаю, я храню URL страницы, ее заголовок и код html, в mongoDB.
Я хочу избежать дублирования в базе данных, таким образом, я реализую конвейер, чтобы проверить, сохранен ли подобный элемент. В этом случае я вызываю исключение DropItem
.
Моя проблема заключается в том, что всякий раз, когда я удаляю элемент с помощью raison a DropItem
exception, Scrapy отобразит весь контент элемента в журнале (stdout или файл).
Когда я извлекаю весь HTML-код каждой очищенной страницы, в случае капли весь код HTML будет отображаться в журнале.
Как я могу опустить элемент без отображения его содержимого?
Спасибо за ваше время!
class DatabaseStorage(object):
""" Pipeline in charge of database storage.
The 'whole' item (with HTML and text) will be stored in mongoDB.
"""
def __init__(self):
self.mongo = MongoConnector().collection
def process_item(self, item, spider):
""" Method in charge of item valdation and processing. """
if item['html'] and item['title'] and item['url']:
# insert item in mongo if not already present
if self.mongo.find_one({'title': item['title']}):
raise DropItem('Item already in db')
else:
self.mongo.insert(dict(item))
log.msg("Item %s scraped" % item['title'],
level=log.INFO, spider=spider)
else:
raise DropItem('Missing information on item %s' % (
'scraped from ' + item.get('url')
or item.get('title')))
return item