- 全站数据的爬取:将所有页码对应的数据爬取
- 利用yield关键字手动请求(get)的发送,并且写在parse函数的里面:callback是调用回调函数进行数据解析
yield scrapy.Request(url, callback)
- 对yield的使用总结:
1 向管道提交item的时候会用到: yield item
2 手动请求发送:yield scrapy.Request(url, callback)
- 手动发起post请求:
yield scrapy.FormRequest(url, formdata, callback): formdata是一个字典,表示的是一个请求参数
import scrapy from huyaAll.items import HuyaallItem class HuyaSpider(scrapy.Spider): name = 'huya' # allowed_domains = ['www.xxx.com'] start_urls = ['https://www.huya.com/g/xingxiu'] # 通用的url模板 url = 'https://www.huya.com/cache.php?m=LiveList&do=getLiveListByPage&gameId=1663&tagAll=0&page=%d' # 解析start_urls首页的数据 def parse(self, response): li_list = response.xpath('//*[@id="js-live-list"]/li') for li in li_list: title = li.xpath('./a[2]/text()').extract_first() author = li.xpath('./span/span[1]/i/text()').extract_first() hot = li.xpath('./span/span[2]/i[2]/text()').extract_first() # 实例化item对象,将数据进行封装 item = HuyaallItem() item['title'] = title item['author'] = author item['hot'] = hot # 使用yield将item对象提交给管道 yield item # 使用yield关键字进行手动请求的发送,并且调用回调函数进行其他页码的数据解析 for page in range(2, 5): new_url = format(self.url%page) # 发起的是get请求, 也可以在callback中递归调用parse函数 yield scrapy.Request(url=new_url, callback=self.parse_other) # 所有的解析方法都必须模拟parse定义,需要有和parse相同的参数,可以在里面进行相关的数据解析 def parse_other(self, response): print(response.json())
工作流程:1. Spider对url进行请求对象的封装,并交给引擎
2. 引擎将请求对象给调度器,调度器对url请求进行过滤并放到队列里面去,再将请求对象返回给引擎
3. 引擎将url请求对象交给下载器去请求下载,利用Twisted.whl实现的异步效果
4. 下载器将下载的response交给引擎,引擎将response给spider进行数据解析
5.spider将解析完成的数据对象交给引擎,引擎再将数据给管道进行持久化存储