-基于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条记录
原文:https://www.cnblogs.com/industrial-fd-2019/p/14702313.html