基于python的scrapy爬虫,关于增量爬取是怎么处理的
1个回答
展开全部
对于只是读取某几个网站更新内容的爬虫完全没必要在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。
对于小规模的爬虫,这种重复抓取的成本基本可以忽略。
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。
对于小规模的爬虫,这种重复抓取的成本基本可以忽略。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询