ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

scrapy框架

2022-06-28 21:05:05  阅读:167  来源: 互联网

标签:name 框架 self li item scrapy class


最新版本直接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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有