数据持久化的两种方式:(1)基于终端指令的持久化存储;(2)基于管道的持久化存储

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

  在爬虫文件的parse方法中必须要return可迭代对象类型(通常为列表或字典等)的返回值,该返回值作为基于终端指令持久化指定文件的输出内容。

执行输出指定格式进行存储-------将爬取到的数据写入不同格式的文件中进行存储,存储格式有限:
    scrapy crawl 爬虫文件 -o xxx.json
    scrapy crawl 爬虫文件 -o xxx.xml
    scrapy crawl 爬虫文件 -o xxx.csv

基于管道的持久化存储

  (1)编写爬虫文件进行数据解析

  (2)在items.py中定义相关字段(用于存储解析的数据)

  (3)在爬虫文件中将解析到的数据封装在实例化的item对象中

  (4)通过yield将item对象提交到pipelines.py中的管道

  (5)在管道中进行任意方式的数据持久化(数据库持久化需要重写两个方法open_spider和close_spider)

  (6)在settings.py配置文件中开启管道(ITEM_PIPELINES ,同时处理ROBOTSTXT_OBEY协议、USER_AGENT 伪装和LOG_LEVEL='ERROR'日志输出等级)

  (7)启动爬虫:scrapy crawl  爬虫文件

百度首页超链接数据解析与持久化存储

  1.编写爬虫文件firstPro.py   

 1 # -*- coding: utf-8 -*-
 2 import scrapy
 3 from firstPro.items import FirstproItem
 4 
 5 
 6 class FirstbaiduSpider(scrapy.Spider):
 7     name = 'firstBaidu'  # 爬虫文件(应用)名
 8     # allowed_domains = ['https://www.baidu.com/']#域名限定,一般直接注释
 9     start_urls = ['https://www.baidu.com//']  # 起始url,创建应用时指定的,可修改
10 
11     def parse(self, response):  # 自动访问起始URL并获取结果后的回调函数,参数respons为起始请求的响应对象,可以直接调用封装好的xpath解析
12 
13         # print(response.text)#获取字符串类型的响应内容
14         # print(response.body)#获取字节类型的相应内容
15 
16         # 进行数据解析
17         a_list = response.xpath('//p[@> 注意页面解析标签定位!!!浏览器看到的标签位置和实际爬去的页面内容位置可能不一样
18         for a in a_list:
19             # scrapy自带xpath解析获取文本或属性需要使用extract()或extract_first()
20             title = a.xpath('./text()').extract_first().replace('\xa0','')  # extract_first()从结果列表获取第一个值
21             url = a.xpath('./@href')[0].extract()  # extract()从解析结果中取出所有制,结果只有一个就是字符串,多个就是列表
22             # print(title, url)
23 
24             # 解析后的数据需要进行持久化存储:
25             # (1)items.py中定义相关存储字段;
26             item = FirstproItem()
27             # (2)实例化item对象将解析的数据进行封装;
28             item['title'] = title
29             item['url'] = url
30             # (3)使用yield将item对象提交给管道处理
31             yield item
32 
33         pass
爬虫文件firstPro.py

相关文章:

  • 2021-05-31
  • 2021-07-06
  • 2022-02-06
  • 2022-12-23
  • 2021-05-07
  • 2021-12-18
  • 2021-05-20
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-06-06
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-07-31
相关资源
相似解决方案