Scrapy框架 基于管道 储存数据到本地文件流程、案例

流程思路

  1. 将解析数据存到items对象
  2. 使用yield 将items交给管道文件处理
  3. 在管道文件pipelines编写代码储存
  4. setting配置文件开启管道

案例

setting.py配置文件

  • 取消注释,数字为优先级
ITEM_PIPELINES = {
   'qiubaiPro.pipelines.QiubaiproPipeline': 300,  # 300优先级
}

爬虫文件

  • 必须导入items 中的类
  • 将数据录入item
  • 用yield item提交给管道
import scrapy
from qiubaiPro.items import QiubaiproItem

class QiubaiSpider(scrapy.Spider):
    name = 'qiubai'
    # allowed_domains = ['qiushibaike.com/text']  # 图片可能不是该域名下
    start_urls = ['https://www.qiushibaike.com/text/']  # https 要注意

    def parse(self, response):
        # 取段子列表
        div_list = response.xpath("//div[@id='content-left']/div")

        # 存储解析到的页面数据
        data_list = []
        for div in div_list:
            # xpath解析的内容存储到 selector对象中,获取内容.extract()
            # extract_first()获取内容  =  .extract()[0]
            author = div.xpath("./div/a[2]/h2/text()").extract()[0]  # 或extract_first()
            content = div.xpath(".//div[@class='content']/span/text()").extract_first()

            # 1.数据解析到items对象(先导入)
            item = QiubaiproItem()
            item['author'] = author
            item['content'] = content

            # 2.将item对象提交给管道
            yield item

itmes.py

  • 把字段按语法注册
class QiubaiproItem(scrapy.Item):
    # 语法:  字段 = scrapy.Field()
    author = scrapy.Field()
    content = scrapy.Field()

管道文件pipelines.py

  • open_spide 开始时执行
  • close_spider结束执行
class QiubaiproPipeline(object):
    fp = None

    # 爬虫过程开始执行1次,用来打开文件
    def open_spider(self, spider):
        print('爬虫开始')
        self.fp = open('./qiubai_pipe.txt', 'w', encoding='utf-8')

    # 爬虫结束执行1次
    def close_spider(self, spider):
        print('爬虫结束')
        self.fp.close()

    # 对提交的item对象,进行存储
    # 爬虫每次提交item,该方法被执行一次
    def process_item(self, item, spider):
        # 1. 取出数据
        author = item['author']
        content = item['content']

        # 2. 存储
        self.fp.write(author + content + '\n\n\n')
        return item
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值