Scrapy的日志等级

  

- 在使用scrapy crawl spiderFileName运行程序时,在终端里打印输出的就是scrapy的日志信息。- 日志信息的种类:ERROR : 一般错误WARNING : 警告INFO : 一般的信息DEBUG : 调试信息- 设置日志信息指定输出:在settings.py配置文件中,加入LOG_LEVEL = ‘指定日志信息种类’即可。LOG_FILE = 'log.txt'则表示将日志信息写入到指定文件中进行存储。

请求传参

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

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

爬虫文件:

import scrapy
from moviePro.items import MovieproItemclass 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获取itemitem = 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文件:

# Define here the models for your scraped items
#
# See documentation in:
# https://doc.scrapy.org/en/latest/topics/items.htmlimport scrapyclass 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()

管道文件:

# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://doc.scrapy.org/en/latest/topics/item-pipeline.htmlimport 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 itemdef 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

import scrapy
from xiaohua.items import XiaohuaItemclass XiahuaSpider(scrapy.Spider):name = 'xiaohua'allowed_domains = ['www.521609.com']start_urls = ['http://www.521609.com/daxuemeinv/']pageNum = 1url = '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'] = schoolitem['img_url'] = 'http://www.521609.com' + img_urlyield itemif self.pageNum < 10:self.pageNum += 1url = format(self.url % self.pageNum)#print(url)yield scrapy.Request(url=url,callback=self.parse)

# Define here the models for your scraped items
#
# See documentation in:
# https://doc.scrapy.org/en/latest/topics/items.htmlimport scrapyclass XiaohuaItem(scrapy.Item):# define the fields for your item here like:# name = scrapy.Field()school=scrapy.Field()img_url=scrapy.Field()

# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://doc.scrapy.org/en/latest/topics/item-pipeline.htmlimport json
import os
import urllib.request
class XiaohuaPipeline(object):def __init__(self):self.fp = Nonedef 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 itemdef 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

转载于:https://www.cnblogs.com/wanglan/p/10826999.html

scrapy框架的日志等级和请求传参相关推荐

  1. 爬虫开发10.scrapy框架之日志等级和请求传参

    今日概要 日志等级 请求传参 今日详情 一.Scrapy的日志等级 - 在使用scrapy crawl spiderFileName运行程序时,在终端里打印输出的就是scrapy的日志信息. - 日志 ...

  2. 18-爬虫之scrapy框架请求传参实现的深度爬取(全站爬取)05

    请求传参实现的深度爬取 深度爬取:爬取的数据没有在同一张页面中(首页数据+详情页数据) 在scrapy中如果没有请求传参我们是无法进行持久化存储数据的 实现方式: scrapy.Request(url ...

  3. scrapy实现post请求与请求传参

    不推荐使用scrapy框架发送post请求,配置复杂,如果在数据量大 的情况下,可以通过如下代码来实现: import scrapyclass FySpider(scrapy.Spider):name ...

  4. axios 最全 请求拦截器 响应拦截器 配置公共请求头 超时时间 以及get delete post put 四种请求传参方式

    axios 拦截器 请求拦截器 请求拦截器的作用是在请求发送前进行一些操作 例如在每个请求体里加上token,统一做了处理如果以后要改也非常容易 响应拦截器 响应拦截器的作用是在接收到响应后进行一些操 ...

  5. jmeter测试接口--form表单提交请求(解决请求传参为空的问题)

    jmeter测试接口--form表单提交请求(解决请求传参为空的问题) 参考文章: (1)jmeter测试接口--form表单提交请求(解决请求传参为空的问题) (2)https://www.cnbl ...

  6. pdf.js 请求传参关键词并高亮显示

    pdf.js 请求传参关键词并高亮显示 1.去官网下载: http://mozilla.github.io/pdf.js/getting_started/#download 2.将下载的包copy到s ...

  7. Scrapy框架的日志信息与配置信息

    1. scrapy的日志信息 2. scrapy的常用配置 ROBOTSTXT_OBEY 是否遵守robots协议,默认是遵守 关于robots协议 在百度搜索中,不能搜索到淘宝网中某一个具体的商品的 ...

  8. 华为如何在开发者选项观察错误日志_爬虫scrapy框架--log日志输出配置及使用

    1.在配置文件中设置日志输出文件名和日志等级 1.为什么以日期为文件名? 因为这样可以方便开发者查看每天的日志信息,同时也可以防止单文件log日志信息堆积的越来越多,所以将当天日志信息保存到当天的日志 ...

  9. C语言编写的一个简单通用的日志框架----支持日志等级,日志颜色,打印到文件等设置

    日常工作中常常需要输出日志进行调试,本文提供了一个C语言编写的日志框架.可以输出日志到文件或者是终端,支持日志等级设置,不同日志等级可以设置不同的颜色,另外还可以设置进程名.模块名.函数名等的输出,能 ...

最新文章

  1. 前端、git入门至常用指令
  2. 【Axure原型图】—— 4. Tab Control(选项卡)
  3. python干啥用的啊-python干什么用的
  4. 【Tools】虚拟串口工具之VSPD10
  5. 计算机三级基础知识考试题,计算机等级考试PC技术练习题:章基础知识
  6. word中的表格空白部分整不掉,下面的表格拉不上来
  7. 中红外传感器行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  8. 神经网络全连接层详解
  9. C++ error C3867 请使用 ““ 来创建指向成员的指针
  10. 云原生数据仓库从托管到原生的演进实践
  11. QT的TreeWidget遍历文件夹并且显示(递归实现)
  12. 支付宝第三方登录集成文档
  13. ORACLE公司传奇历史
  14. 【JZOJ4847】【NOIP2016提高A组集训第5场11.2】夕阳
  15. 毕业一周年--IT在路上
  16. 附录三 虚拟机的使用
  17. SVN主干到分支的详细操作!
  18. 本地消息表(异步确保)
  19. k3显示远程服务器未打开,k3客户端远程服务器链接
  20. 那些年啊,那些事——一个程序员的奋斗史 ——114

热门文章

  1. tensorflow 模型可视化_基于tensorflow-2.x的yolov3实现
  2. Lombok ——自动化方法生成器
  3. 关于maven面试的哪些事儿~
  4. STM32-IO引脚复用-原理和使用
  5. liunx php apache2,linux apache2部署php
  6. 用计算机探索规律反思,用计算器探索规律教学反思
  7. linux setarch 命令,6.22. Util-linux-2.23.1
  8. java数组的扩容,将两个数组合并成一个数组
  9. php海外研发,国外主流PHP框架比较
  10. java自学笔记_JAVA自学笔记(4)