基于python的scrapy爬蟲?
對于只是讀取某幾個網站更新內容的爬蟲完全沒必要在python代碼中實現增量的功能,直接在item中增加Url字段。
item['Url'] = response.url
然后在數據端把儲存url的column設置成unique。
之后在python代碼中捕獲數據庫commit時返回的異常,忽略掉或者轉入log中都可以。
我使用的是SqlAlchemy。我是這么寫的
from sqlalchemy.exc import IntegrityError
class XxxPipeline(object):
def process_item(self, item, spider):
#一些session.add()
#........
try:
session.commit()
print 'crawl %s done!' % item['Url']
except IntegrityError:
print 'skip %s .' % item['Url']
return item
雖然每次crawl都會重復抓取一些數據,但最終結果庫內不會有相同的Url。
對于小規模的爬蟲,這種重復抓取的成本基本可以忽略。