scrapy框架
作者:互联网
最新版本直接pip install scrapy
会把其他支持的组件一起下载
创建工程
scrapy startproject xxxPro
进入目录
cd xxxPro
指定起始链接,并创建一个子目录spiderName
scrapy genspider spiderName www.xxx.com
执行工程
scrapy crawl spiderName --nolog 不带日志
更改setting的协议
ROBOTSTXT_OBEY = False
显示指定类型的日志信息
LOG_LEVEL = 'ERROR'
USER_AGENT =修改
def parse(self, response):
li_list = response.xpath('//ul[@class="txt-list txt-list-row5"]//li')
all_data = []
for li in li_list:
#extract可以讲Selector对象中data参数存储的字符串提取出来
fenlei = li.xpath('./span[@class="s1"]/text()')[0].extract()
name = li.xpath('./span[@class="s2"]/a/text()')[0].extract()
num = li.xpath('./span[@class="s3"]/a/text()')[0].extract()
autor = li.xpath('./span[@class="s4"]//text()')[0].extract()
date = li.xpath('./span[@class="s5"]//text()')[0].extract()
#有断的文章连起来content = ''.join(content)
dic = {
'fenlei':fenlei,
'name':name,
'num': num,
'autor': autor,
'date': date
}
all_data.append(dic)
return all_data
两种持久化存储
1、终端指令-要求,只可以将parse方法的返回值存储到本地的文本文件,只支持格式↓
('json', 'jsonlines', 'jl', 'csv', 'xml', 'marshal', 'pickle')
简洁高效,但局限性强
scrapy crawl qiubai -o filePath
2、管道
编码流程:
解析数据封装存储到item类型的对象 items.py class QiubaiproItem(scrapy.Item): name = scrapy.Field()
解析的数据存储到item类型的对象main.py def parse中 item['name'] = name
item类型对象提交给管道对象持久化存储main.py def parse中 yield item
配置文件中
ITEM_PIPELINES = {
'qiubaiPro.pipelines.QiubaiproPipeline': 300,
#300表示的是优先级,数值越小优先级越高
} 开启管道
class QiubaiproPipeline:
fp = None
#重写父类方法 该方法只在开始爬虫的时候被调用一次
def open_spider(self,spider):
print('开始爬虫')
self.fp = open('qiubai.txt','w',encoding='utf-8')
#专门用来处理item类型对象
#可以接受爬虫文件提交过来的item对象
#每接收到一个item就会被调用一次
def process_item(self, item, spider):
fenlei = item['fenlei']
name = item['name']
num = item['num']
autor = item['autor']
date = item['date']
self.fp.write(fenlei+'——'+name+'——'+num+'——'+autor+'——'+date+'\n')
return item
def close_spider(self,spider):
print('结束爬虫')
self.fp.close()
通用性强,但操作较麻烦
标签:name,框架,self,li,item,scrapy,class 来源: https://www.cnblogs.com/17time/p/16420925.html