其他分享
首页 > 其他分享> > scrapy框架

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