-基于Spider的全站数据爬取

  -就是将网站中某个板块下的全部页码对应的页面数据进行爬取。

  -需求:爬取糗百中所有的作者和评论

  -实现方式:

    -将所有页面的url添加到start_urls列表(不推荐)

    -自行手动进行请求发送(推荐)

 

      -手动请求发送:

 

        -yield scraoy.Request(url,callback) :callback专门用做数据解析

 

只需在博客中的第一页完成后,再自行手动进行请求发送。第一爬取方法的链接:python之scrapy框架(一) - 努力爬行的小虫子 - 博客园 (cnblogs.com) 最后一部分关于scrapy持久化存储介绍了。

qiubai.py

 

 1 import scrapy
 2 from qiubaiPro.items import QiubaiproItem
 3 
 4 class QiubaiSpider(scrapy.Spider):
 5     name = 'qiubai'
 6     # allowed_domains = ['www.xxx.com']
 7     start_urls = ['https://www.qiushibaike.com/text/']
 8 
 9     #生成一个通用的url模板(不可变)
10     url = 'https://www.qiushibaike.com/text/page/%d/'
11     page_num = 2
12 
13     def parse(self, response):
14         # 解析:作者的名称+段子的内容
15         div_list = response.xpath('//div[@class="col1 old-style-col1"]/div')
16         # print(len(div_list))
17         all_data = []  # 存储所有解析到的数据
18         for div in div_list:
19             # xpath 返回的是列表,但是列表元素一定是Selector类型的对象
20             # extract可以将Selector对象中data参数存储的字符串提取出来
21             author = div.xpath('./div[1]/a[2]/h2/text() | ./div[1]/span/h2/text()')[0].extract()
22             # 列表调用了extract之后,则表示将列表中每一个Selector对象中data对应的字符串提取了出来
23             content = div.xpath('./a[1]/div/span//text()').extract()
24             # 将列表转化成字符串
25             content = ''.join(content)
26 
27             item = QiubaiproItem()
28             item['author'] = author
29             item['content'] = content
30 
31             yield item  #将item提交给了管道
32         print('第%d页正在爬取...'% self.page_num)
33         if self.page_num <= 13:
34             new_url = format(self.url%self.page_num)
35             self.page_num += 1
36             #手动请求发送:callback回调函数是专门用作于数据解析
37             yield scrapy.Request(url=new_url , callback=self.parse)

 

 

最后数据通过管道保存到了mysql数据库中,我们可以通过navicat这个数据库管理系统可以看到保存了1037条记录