scrapy crawl 爬虫文件名称 -o 文件名.json
scrapy crawl 爬虫文件名称 -o 文件名.xml
scrapy crawl 爬虫文件名称 -o 文件名.csv
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.py
和pipelines.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)基于管道的持久化存储的步骤:
ITEM_PIPELINES = { 'baiduProject.pipelines.BaiduprojectPipeline': 300,}
将上述爬取到的数据通过管道进行持久化存储