Python培训之scrapy框架的日志等级和请求传参

IT科技2025-11-05 16:03:5534262

  一.Scrapy的培训日志等级

  在使用scrapy crawl spiderFileName运行程序时,在终端里打印输出的日志就是scrapy的日志信息。

Python培训之scrapy框架的日志等级和请求传参

  日志信息的等级种类:

  ERROR : 一般错误

  WARNING : 警告

  INFO : 一般的信息

  DEBUG : 调试信息

  设置日志信息指定输出:

  在settings.py配置文件中,加入

  LOG_LEVEL = ‘指定日志信息种类’即可。和请

  LOG_FILE = log.txt则表示将日志信息写入到指定文件中进行存储。求传

  二.请求传参

  在某些情况下,培训我们爬取的日志数据不在同一个页面中,例如,等级我们爬取一个电影网站,和请电影的求传名称,评分在一级页面,培训而要爬取的日志其他电影详情在其二级子页面中。WordPress模板这时我们就需要用到请求传参。等级

  案例展示:爬取www.id97.com电影网,和请将一级页面中的求传电影名称,类型,评分一级二级页面中的上映时间,导演,片长进行爬取。

  爬虫文件:

# -*- coding: utf-8 -*- import scrapy from moviePro.items import MovieproItem class MovieSpider(scrapy.Spider): name = movie allowed_domains = [www.id97.com] start_urls = [http://www.id97.com/] def parse(self, response): div_list = response.xpath(//div[@class="col-xs-1-5 movie-item"]) for div in div_list: item = MovieproItem() item[name] = div.xpath(.//h1/a/text()).extract_first() item[score] = div.xpath(.//h1/em/text()).extract_first() #xpath(string(.))表示提取当前节点下所有子节点中的数据值(.)表示当前节点 item[kind] = div.xpath(.//div[@class="otherinfo"]).xpath(string(.)).extract_first() item[detail_url] = div.xpath(./div/a/@href).extract_first() #请求二级详情页面,解析二级页面中的相应内容,通过meta参数进行Request的数据传递 yield scrapy.Request(url=item[detail_url],callback=self.parse_detail,meta={item:item}) def parse_detail(self,response): #通过response获取item item = response.meta[item] item[actor] = response.xpath(//div[@class="row"]//table/tr[1]/a/text()).extract_first() item[time] = response.xpath(//div[@class="row"]//table/tr[7]/td[2]/text()).extract_first() item[long] = response.xpath(//div[@class="row"]//table/tr[8]/td[2]/text()).extract_first() #提交item到管道 yield item

  items文件:

# -*- coding: utf-8 -*- # Define here the models for your scraped items # # See documentation in: # https://doc.scrapy.org/en/latest/topics/items.html import scrapy class MovieproItem(scrapy.Item): # define the fields for your item here like: name = scrapy.Field() score = scrapy.Field() time = scrapy.Field() long = scrapy.Field() actor = scrapy.Field() kind = scrapy.Field() detail_url = scrapy.Field()

  管道文件:

# -*- coding: utf-8 -*- # Define your item pipelines here # # Dont forget to add your pipeline to the ITEM_PIPELINES setting # See: https://doc.scrapy.org/en/latest/topics/item-pipeline.html import json class MovieproPipeline(object): def __init__(self): self.fp = open(data.txt,w) def process_item(self, item, spider): dic = dict(item) print(dic) json.dump(dic,self.fp,ensure_ascii=False) return item def close_spider(self,spider): self.fp.close()

  三.如何提高scrapy的爬取效率

  增加并发:

  默认scrapy开启的并发线程为32个,可以适当进行增加。在settings配置文件中修改CONCURRENT_REQUESTS = 100值为100,并发设置成了为100。

  降低日志级别:

  在运行scrapy时,会有大量日志信息的网站模板输出,为了减少CPU的使用率。可以设置log输出信息为INFO或者ERROR即可。在配置文件中编写:LOG_LEVEL = ‘INFO’

  禁止cookie:

  如果不是真的需要cookie,则在scrapy爬取数据时可以进制cookie从而减少CPU的使用率,提升爬取效率。在配置文件中编写:COOKIES_ENABLED = False

  禁止重试:

  对失败的HTTP进行重新请求(重试)会减慢爬取速度,因此可以禁止重试。在配置文件中编写:RETRY_ENABLED = False

  减少下载超时:

  如果对一个非常慢的链接进行爬取,减少下载超时可以能让卡住的链接快速被放弃,从而提升效率。在配置文件中进行编写:DOWNLOAD_TIMEOUT = 10 超时时间为10s

  测试案例:爬取校花网校花图片 www.521609.com

# -*- coding: utf-8 -*- import scrapy from xiaohua.items import XiaohuaItem class XiahuaSpider(scrapy.Spider): name = xiaohua allowed_domains = [www.521609.com] start_urls = [http://www.521609.com/daxuemeinv/] pageNum = 1 url = http://www.521609.com/daxuemeinv/list8%d.html def parse(self, response): li_list = response.xpath(//div[@class="index_img list_center"]/ul/li) for li in li_list: school = li.xpath(./a/img/@alt).extract_first() img_url = li.xpath(./a/img/@src).extract_first() item = XiaohuaItem() item[school] = school item[img_url] = http://www.521609.com + img_url yield item if self.pageNum < 10: self.pageNum += 1 url = format(self.url % self.pageNum) #print(url) yield scrapy.Request(url=url,callback=self.parse) # -*- coding: utf-8 -*- # Define here the models for your scraped items # # See documentation in: # https://doc.scrapy.org/en/latest/topics/items.html import scrapy class XiaohuaItem(scrapy.Item): # define the fields for your item here like: # name = scrapy.Field() school=scrapy.Field() img_url=scrapy.Field() # -*- coding: utf-8 -*- # Define your item pipelines here # # Dont forget to add your pipeline to the ITEM_PIPELINES setting # See: https://doc.scrapy.org/en/latest/topics/item-pipeline.html import json import os import urllib.request class XiaohuaPipeline(object): def __init__(self): self.fp = None def open_spider(self,spider): print(开始爬虫) self.fp = open(./xiaohua.txt,w) def download_img(self,item): url = item[img_url] fileName = item[school]+.jpg if not os.path.exists(./xiaohualib): os.mkdir(./xiaohualib) filepath = os.path.join(./xiaohualib,fileName) urllib.request.urlretrieve(url,filepath) print(fileName+"下载成功") def process_item(self, item, spider): obj = dict(item) json_str = json.dumps(obj,ensure_ascii=False) self.fp.write(json_str+\n) #下载图片 self.download_img(item) return item def close_spider(self,spider): print(结束爬虫) self.fp.close()

  配置文件:

USER_AGENT = Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36 # Obey robots.txt rules ROBOTSTXT_OBEY = False # Configure maximum concurrent requests performed by Scrapy (default: 16) CONCURRENT_REQUESTS = 100 COOKIES_ENABLED = False LOG_LEVEL = ERROR RETRY_ENABLED = False DOWNLOAD_TIMEOUT = 3 # Configure a delay for requests for the same website (default: 0) # See https://doc.scrapy.org/en/latest/topics/settings.html#download-delay # See also autothrottle settings and docs # The download delay setting will honor only one of: #CONCURRENT_REQUESTS_PER_DOMAIN = 16 #CONCURRENT_REQUESTS_PER_IP = 16 DOWNLOAD_DELAY = 3

本文地址:http://www.bzve.cn/html/625e1799357.html
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

热门文章

全站热门

以IntelE7玩游戏的体验如何?(性能强劲,流畅畅玩游戏)

使用 Vue 实现一个简单的鼠标拖拽滚动效果插件

响应式网页中的高度设计,你认真的吗?

Python骚操作,让图片人物动起来!

下载了Fedora 11 DVD ISO镜像文件,参考了XP下硬盘安装Fedora 10的方法,我把安装过程稍微整理一下供Linux新手参考。先看看Fedora的版本是Fedora 11了吧,见下图(图1),点击下图看大图。图1我电脑中原先安装的操作系统是Windows XP SP2,C盘是NTFS格式,F盘也是NTFS格式的。网上都说要把它放到fat32分区下,我现在把它放到了F盘(NTFS格式的),测试下可以的。我在F盘下新建了一个Fedora11目录,把Fedora-11-i386-DVD.iso里面的images文件解压出来放到刚才新建的fedora11目录中,另外再解压isolinux文件夹中的initrd.img和vmlinuz二个文件也放到fedora11目录下,把Fedora-11-i386-DVD.iso文件也放在fedora11目录中(见图2),还要把initrd.img和vmlinuz复制到C盘的根目录下。图2下载GRUB4DOS,我们只要里面的2个文件,解压后把grldr与menu.lst放到C盘根目录下。再修改menu.lst,在menu.lst最后加上title Install Fedora 11kernel (hd0,0)/vmlinuzinitrd (hd0,0)/initrd.img打开C盘的根目录,找到boot.ini,(通常虽隐藏的),在最后面加上c:grldr=GRUB重新启动系统,选择GRUB(见图3)。回车图3再选择最后的Install Fedora 11(见图4)就可以到安装界面了图4进入语言选择,中文用户选择见图5图5下一步应该是键盘布局的选择,默认好了,再下一步比较重要,选择安装方式,硬盘安装Fedora 11选中Hard drive(见图6)。图6这一步更重要,对于许多新手来说,不知道如何硬盘安装Fedora 11的关键所在,我把Fedora-11-i386-DVD.iso及相关安装文件都放在F盘的fedora11的目录中,所以要找到这里来,我的F盘是/dev/sda10分区 。假如你不知道,可以从/dev/sda1开始一个一个试过去,下面的地址也很重要,输入安装镜像文件所在的路径,/fedora11/images/install.img (见图7)。图7点击OK后就开始真正的安装,下面还有一个地方要注意,假如你想保留原来系统上资料,特别要注意下面的地方,要选择建立自定义分区结构。(见图8)下面就简单了,你自己看吧,假如还不懂,在下面的留言中提出。

Python突变测试介绍

天天都在使用的 Java 注解,你真的了解它吗?

【编译篇】AST实现函数错误的自动上报

友情链接

滇ICP备2023006006号-39