我正在使用Scrapy來抓取幾個可能共享冗餘信息的網站。Scrapy - 悄悄放下一個項目
對於每一頁我刮,我存儲頁面的URL,它的標題和它的HTML代碼,到mongoDB。 我想避免數據庫中的重複,因此,我實現了一個管道,以檢查是否已經存儲了類似的項目。在這種情況下,我提出了一個DropItem
例外。
我的問題是,每當我放棄一個項目時,出現DropItem
異常,Scrapy會將項目的全部內容顯示到日誌(標準輸出或文件)中。 當我提取每個抓取頁面的整個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
這是去哪裏?中間件?管道? – Xodarap777
@ Xodarap777,我覺得'middlewares.py'文件比較合適。或者你可以創建新的文件,比如'logformatter.py'。這個答案的代碼提供了將代碼放入蜘蛛文件中。 **注意**:此代碼已棄用,但下面的@mirosval的答案已更新工作版本。 – kupgov