python爬虫-scrapy的数据持久化存储

文章目录

  • 一、基于终端指令的持久化存储
  • 二、基于管道的持久化存储

一、基于终端指令的持久化存储

  1. 目的:爬取百度网页中百度热榜中的序号和标题,并通过终端指令,将爬取到的数据进行持久化存储(将爬取到的数据保存到本地)
  2. 使用:在终端输入指令,将爬取到的数据保存到不同格式的文件中
scrapy crawl 爬虫文件名称 -o 文件名.json
scrapy crawl 爬虫文件名称 -o 文件名.xml
scrapy crawl 爬虫文件名称 -o 文件名.csv
  • 输入指令
    python爬虫-scrapy的数据持久化存储_第1张图片
  • 输出结果:生成一个csv文件,并将数据保存到指定文件中
    python爬虫-scrapy的数据持久化存储_第2张图片
  1. 实例代码
import scrapy

class BaiduSpider(scrapy.Spider):
    name = 'baidu'
    allowed_domains = ['www.baidu.com']
    start_urls = ['https://www.baidu.com/']

    # 爬取百度网页中百度热榜中的:序号和标题
    def parse(self, response):
        li_list = response.xpath('//ul[@id="hotsearch-content-wrapper"]/li')
        

        content_list = [] # 用于存放解析到的数据
        for li in li_list:
            # xpath返回一个列表,列表中的每一个元素都是Selector类型的数据,
            # 使用extract()方法从Selector对象中解析出我们需要的字符串
            num = li.xpath('./a//span[1]//text()')[0].extract()
            title = li.xpath('./a//span[@class="title-content-title"]//text()').extract()
            title = "".join(title)

            dic = {
     
                'num':num,
                'title':title
            }

            content_list.append(dic) #content_list中的每一个元素都是一个字典

            return content_list

二、基于管道的持久化存储

在学习基于管道的持久化存储时需要用到两个文件item.pypipelines.py

  • items.py:定义item的相关属性,书写格式属性名 = scrapy.Field(),然后在爬虫文件中将爬取到的数据封装到item中,利用yield关键字,将item对象传给pipelines管道文件
# 在items.py文件中可以定义多个items对象的属性:属性名 = scrapy.Field()
	attributeName1 = scrapy.Field()
	attributeName2 = scrapy.Field()
	......
	
# 在爬虫文件中使用item对象
	1. 将items.py导入BaiduprojectItem类
	from baiduProject.items import BaiduprojectItem
	
	2. 在爬虫文件中使用item对象,将解析到的数据封装到item对象中
    item = SecondbloodItem()	# 实例化item对象
    item['attributeName1'] = value1
    item['attributeName2'] = value2
	
	3. 将item对象提交给管道文件(pipelines.py)
	yield item
  • pipelines.py管道文件,用于接受爬虫文件传来的数据(items)
  1. 基于管道的持久化存储的步骤

    1. 先通过爬虫文件爬取数据,根据解析到的数据定义item对象的属性
    2. 将需要持久化存储的数据封装到item对象中
    3. 使用yield关键字将item对象提交给pipelines管道进行持久化存储
    4. 在管道文件中的process_item方法中接收爬虫文件提交过来的item对象,然后编写持久化存储的代码将item对象中存储的数据进行持久化存储
    5. 在settings.py配置文件中开启管道ITEM_PIPELINES = { 'baiduProject.pipelines.BaiduprojectPipeline': 300,}
  2. 将上述爬取到的数据通过管道进行持久化存储

    • baidu.py文件:先爬取数据,将数据保存到item对象中
      python爬虫-scrapy的数据持久化存储_第3张图片
      2.items.py文件:定义item对象的属性python爬虫-scrapy的数据持久化存储_第4张图片
    1. pipelines.py文件:进行持久化操作python爬虫-scrapy的数据持久化存储_第5张图片

    2. settings.py文件:打开管道python爬虫-scrapy的数据持久化存储_第6张图片

    3. 输出结果python爬虫-scrapy的数据持久化存储_第7张图片

  3. 上面我只是将结果打印输出,如果想要将结果存储到文件中,可以按照下列代码操作
    python爬虫-scrapy的数据持久化存储_第8张图片
    python爬虫-scrapy的数据持久化存储_第9张图片

你可能感兴趣的:(python爬虫,python,爬虫,数据持久化)