数据持久化的两种方式:(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