Scrapy框架Spider类和CrawlSpider类

Scrapy处理翻页数据抓取三种方案:

根据业务场景灵活选择。

  1. 分析网页url地址变化规律,在通过自增量拼接完整的url,发送请求获取响应,可以根据响应内容 或 响应状态码 做为停止条件。

    • 适合动态页面 json 文件的抓取,不依赖网页 标签
  2. 分析网页下一页链接,并提取链接发送请求获取响应,再判断是否是最后一页做为停止条件。

    • 适合 html 文件的抓取,依赖网页 标签
    • 对于页码经常变动的网页,可以灵活获取所有页面
  3. 将所有需要发送的请求url地址,全部存在 start_urls 中,做为第一批请求全部交给下载器发送,下载器根据并发量进行处理,可以充分利用Scrapy的高并发。

    • 可以通过 读取文件、数据库,或 列表推导式的方式,获取所有的url地址

Scrapy处理多级页面的数据抓取:

1 . 列表页 和 详情页 的数据保存在 不同的 item 中

  • items.py 里构建不同的 item 类
  • spider中处理数据提取,并保存在不同的item对象中,并 yield item 给管道
  • pipelines 里处理数据分类(可以根据item字段,或 isinstance() 判断),分别处理数据

2 . 列表页 和 详情页 的数据保存在 同一个 item 中

  • items.py 里构建一个可以存储所有字段数据的 item 类
  • spider中处理数据提取,保存一级页面数据,并通过构建 Request() 的meta参数,传递当前的item
  • meta 接收一个字段,可以包含多个键值对,并且做为 该请求 对应的响应 的meta属性,传递到回调函数里
  • 根据需求,可以继续向下传递,直到所有的数据提取完毕,再 yield item
def start_requests(self):
  for url in self.start_urls:
    yield scrapy.Request(url, callback=self.parse, dont_filter=True)

1 start_requests() 方法用以处理 start_urls里的每个请求发送方式,可以重写该方法自定义处理。
2 默认start_urls里的请求 不去重,dont_filter默认为False(去重)dont_filter(不去重)

CrawlSpider:

start_urls 里的响应,默认 follow 是 True

rules = [
    Rule(  LinkExtractor(allow=r'start=\d+'),  follow=True),
    Rule(  LinkExtractor(allow=r'position_detail\.php\?id=\d+'),  callback='parse_detail',  follow=False),
]

rules 是一个可以存储多个Rule规则的 列表/元组,引擎会迭代 rules 处理每个Rule

每个 Rule 规则,都表示一种 网页链接提取方式 和 响应处理方式

  1. LinkExtractor() 表示链接提取方式,并且发送这些链接的请求,返回的响应根据 callback 和 follow 决定:

  2. callback 表示 这些响应交给指定的 回调函数 解析

  3. follow 是一个 bool 值 :

    • follow = False 表示这些响应,不再通过 任何Rule 的 LinkExtractor 提取链接

    • follow = True 表示这些响应,会经过 每个Rule的 LinkExtractor 提取链接,再次发送这些新链接请求,这些新链接的响应 会根据所属的follow值判断,如果为 True 会继续经过 每个Rule的 LinkExtractor 提取链接,一直递归下去…

      当所有的能被提取的链接全部发送过,且没有新的请求了,程序结束。

CrawlSpider 专为整站抓取而设计的爬虫类:

start_urls

首页 (提供一级链接) Rule(LinkExtractor(allow=r’一级页面的规则’), follow=True)
一级页面(提供二级链接)Rule(LinkExtractor(allow=r’二级页面的规则’), follow=True)
二级页面(提供三级链接)Rule(LinkExtractor(allow=r’三级级页面规则’), follow=True)
三级页面(提供四级链接)Rule(LinkExtractor(allow=r’四级页面的规则’), callback=“parse_page”, follow=False)
四级页面(提供数据)

没有callback,默认follow=True
有callback,默认follow=False

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值