爬虫进阶:框架功能升级之增量爬虫 | 爬虫 |《python学习之路》| python 技术论坛-江南app体育官方入口

未匹配的标注

增量爬虫

增量爬虫设计原理

增量抓取,意即针对某个站点的数据抓取,当网站的新增数据或者该站点的数据发生了变化后,自动地抓取它新增的或者变化后的数据

实现关闭请求去重

为request对象增加属性filter

# scrapy/http/reqeust.py
'''封装request对象'''
class request(object):
    '''请求对象,设置请求信息'''
    def __init__(self, url, method='get', headers=none, params=none, data=none, filter=true):
        self.url = url    # 请求地址
        self.method = method    # 请求方法
        self.headers = headers    # 请求头
        self.params = params    # 请求参数
        self.data = data    # 请求体
        self.filter = filter    # 是否进行去重,默认是true

###

  1. 修改调度器,进行判断
# scrapy_plus/core/scheduler.py
class scheduler(object):
    ......
    def add_request(self, request):
        '''添加请求对象'''
        # 先判断是否要去重
        if request.filter is false:
            self.queue.put(request)
            logger.info("添加请求成功[%s %s]" % (request.method, request.url))
            self.total_request_number  = 1  # 统计请求总数
            return # 必须return
        # 添加请求对象前,先进性去重判断
        fp = self._gen_fp(request)
        if not self.filter_request(fp, request):    # 如果指纹不存在,那么添加该请求
            self.queue.put(request)
            logger.info("添加请求成功[%s %s]"%(request.method, request.url))
            self._filter_container.add_fp(fp)     # 添加完请求后,将指纹也记录下来
            self.total_request_number  = 1    # 统计请求总数
        else:
            logger.info("发现重复的请求 [%s %s]" % (request.method, request.url))
            self.repeat_request_number  = 1
    ......

实现无限发起请求

在start_reqeusts中改成无限循环,并设置对应请求为非去重模式。但由于框架调用start_requests方法时同步,如果设置为死循环后,那么位于之后的爬虫的start_requests方法就不会被调用,因此需要在调用每个爬虫的start_reqeusts时设置为异步的。让程序的主线程在,多个start_reqeusts方法都没执行完毕前,不要进行退出判断,避免退出过早

本文章首发在 江南app体育官方入口 网站上。

上一篇 下一篇
讨论数量: 0



暂无话题~
网站地图