侧边栏壁纸
博主头像
波哥

80后程序猿&副业达人
爱好:敲代码、搞副业
无干货,不分享!

  • 累计撰写 1,878 篇文章
  • 累计创建 77 个标签
  • 累计收到 17 条评论

目 录CONTENT

文章目录

Scrapy框架学习

波哥
2022-11-22 / 0 评论 / 0 点赞 / 71 阅读 / 395 字

Scrapy框架学习

" "

scrapy简介

image

image

image

image

image

image

image

Scrapy入门

image

image

image

image

image

image

日志设置

image

image

image

如何实现翻页请求

image

image

image

Scripy深入值item

image

image

image

Scrapy debug信息

image

Scrapy Shell

image

Scrapy Setting

image

image

Scrapy Pieline

image

mongodb

image

crawlspicer

image

scrapy模拟登陆

image

image

image

image

image

image

下载中间件

image

image

image

image

scrapy redis

image

image

image

image

request对象什么时候入队

  • dontfilter = True ,构造请求的时候,把dontfilter置为True,该url会被反复抓取(url地址对应的内容会更新的情况)
  • 一个全新的url地址被抓到的时候,构造request请求
  • url地址在start_urls中的时候,会入队,不管之前是否请求过
  • 构造starturl地址的请求时候,dontfilter = True
def enqueue_request(self, request):
    if not request.dont_filter and self.df.request_seen(request):
        # dont_filter=False Ture  True request指纹已经存在  #不会入队
        # dont_filter=False Ture  False  request指纹已经存在 全新的url  #会入队
        # dont_filter=Ture False  #会入队
        self.df.log(request, self.spider)
        return False
    self.queue.push(request) #入队
    return True

scrapy_redis去重方法

  • 使用sha1加密request得到指纹
  • 把指纹存在redis的集合中
  • 下一次新来一个request,同样的方式生成指纹,判断指纹是否存在reids的集合中

生成指纹

fp = hashlib.sha1()
fp.update(to_bytes(request.method))  #请求方法
fp.update(to_bytes(canonicalize_url(request.url))) #url
fp.update(request.body or b'')  #请求体
return fp.hexdigest()

判断数据是否存在redis的集合中,不存在插入

added = self.server.sadd(self.key, fp)
return added != 0
0

评论区