Scrapy框架的应用———爬取糗事百科文件

项目主代码:

 1 import scrapy
 2 from  qiushibaike.items import QiushibaikeItem
 3 
 4 class QiubaiSpider(scrapy.Spider):
 5     name = 'qiubai'
 6     # allowed_domains = ['www.baidu.com']
 7 
 8     #爬取数据的url
 9     start_urls = ['https://www.qiushibaike.com/text/']
10 
11     #基于终端命令,必须让parse方法返回一个可迭代类型的对象
12     def parse(self, response):
13         div_list=response.xpath('//div[@id="content-left"]/div')
14         data_list=[]
15         for div in div_list:
16             #extract()可以将Selector对象存储的数据值获取
17             author=div.xpath('./div/a[2]/h2/text()').extract_first()
18             content=div.xpath('./a/div/span//text()').extract()
19             content="".join(content)
20             dic={
21                 'author':author,
22                 'content':content
23             }
24             data_list.append(dic)
25         return  data_list
26         # 基于终端命令,必须让parse方法返回一个可迭代类型的对象
27 
28     #基于管道的持久化存储
29     def parse(self, response):
30         div_list = response.xpath('//div[@id="content-left"]/div')
31         for div in div_list:
32             # extract()可以将Selector对象存储的数据值获取
33             author = div.xpath('./div/a[2]/h2/text()').extract_first()
34             content = div.xpath('./a/div/span//text()').extract()
35             content = "".join(content)
36 
37             #设计到持久化存储的相关操作必须写在管道文件中
38             #实例化一个item对象,将解析到的数据存储到该对象中去
39             item=QiushibaikeItem()
40             item['author']=author
41             item['content']=content
42 
43             #将item对象交给管道
44             yield  item
爬虫代码

items类中代码:

1 author=scrapy.Field()
2 content=scrapy.Field()
items

pipelines类中代码

 1 #将数据存储到txt文件中
 2 class QiushibaikePipeline(object):
 3 
 4     fp=None
 5     #重写父类的方法
 6     def open_spider(self,spider):
 7         self.fp=open('./qiutu.txt','w',encoding='utf-8')
 8         print('开始爬虫')
 9 
10     #该方法只能处理item类型的对象,爬虫文件每向管道提交一次item,则该方法就会调用一次
11     def process_item(self, item, spider):
12         #取出存在item中的数据
13         author=item['author']
14         content=item['content']
15         self.fp.write(author+':'+content)
16         return item
17     def close_spider(self,spider):
18         self.fp.close()
19         print('爬虫结束')
20 
21 #将数据存储到txt文件中
22 class CsvPipeLine(object):
23 
24     fp=None
25     #重写父类的方法
26     def open_spider(self,spider):
27         self.fp=open('./qiutu.csv','w',encoding='utf-8')
28         print('开始爬虫1')
29 
30     #该方法只能处理item类型的对象,爬虫文件每向管道提交一次item,则该方法就会调用一次
31     def process_item(self, item, spider):
32         #取出存在item中的数据
33         author=item['author']
34         content=item['content']
35         self.fp.write(author+':'+content)
36         return item
37     def close_spider(self,spider):
38         self.fp.close()
39         print('爬虫结束1')
管道代码

setting配置代码

 1 #伪装请求头
 2 USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36'
 3 
 4 # 不遵守协议
 5 ROBOTSTXT_OBEY = False
 6 
 7 
 8 #开放管道代码
 9 ITEM_PIPELINES = {
10    'qiushibaike.pipelines.QiushibaikePipeline': 300,
11     'qiushibaike.pipelines.CsvPipeLine': 301,
12 
13 }
setting

猜你喜欢

转载自www.cnblogs.com/duanhaoxin/p/10115078.html
今日推荐