• 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
  • 相关阅读:
    Flask 路由映射对于双斜线的处理 //a//b
    python中的导入如何使用,以及.和..相对导入的使用
    tornado 启动WSGI应用(Flask)使用多线程将同步代码变成异步
    flask的请求处理流程和异常处理流程
    pyengine介绍及使用
    __import__
    如何为自己的pip包打造可以执行的系统命令
    JS进阶之原型
    JS基础之对象
    CSS之深入探究Position
  • 原文地址:https://www.cnblogs.com/duanhaoxin/p/10115078.html
Copyright © 2020-2023  润新知