日志等级

日志信息:   使用命令:scrapy crawl 爬虫文件 运行程序时,在终端输出的就是日志信息;

日志信息的种类:

  •   ERROR:一般错误;
  •   WARNING:警告;
  •   INFO:一般的信息;
  •   DEBUG: 调试信息;

设置日志信息指定输出:

  在settings配置文件中添加:

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

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

请求传参

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

通过 在scrapy.Request()中添加 meta参数 进行传参;

  1. scrapy.Request()

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

爬虫程序

  1. # -*- coding: utf-8 -*-
  2. import scrapy
  3. from moviePro.items import MovieproItem
  4.  
  5. class MovieSpider(scrapy.Spider):
  6. name = 'movie'
  7. allowed_domains = ['www.55xia.com']
  8. start_urls = ['http://www.55xia.com/']
  9.  
  10. def parse(self, response):
  11. div_list = response.xpath('//div[@class="col-xs-1-5 movie-item"]')
  12.  
  13. for div in div_list:
  14. item = MovieproItem()
  15. item['name'] = div.xpath('.//h1/a/text()').extract_first()
  16. item['score'] = div.xpath('.//h1/em/text()').extract_first()
  17.  
  18. #xpath(string(.))表示提取当前节点下所有子节点中的数据值(.)表示当前节点
  19. item['kind'] = div.xpath('.//div[@class="otherinfo"]').xpath('string(.)').extract_first()
  20. item['detail_url'] = div.xpath('./div/a/@href').extract_first()
  21.  
  22. #请求二级详情页面,解析二级页面中的相应内容,通过meta参数进行Request的数据传递
  23. yield scrapy.Request(url=item['detail_url'],callback=self.parse_detail,meta={'item':item})
  24.  
  25. def parse_detail(self,response):
  26. #通过response获取item
  27. item = response.meta['item']
  28.  
  29. item['actor'] = response.xpath('//div[@class="row"]//table/tr[1]/a/text()').extract_first()
  30. item['time'] = response.xpath('//div[@class="row"]//table/tr[7]/td[2]/text()').extract_first()
  31. item['long'] = response.xpath('//div[@class="row"]//table/tr[8]/td[2]/text()').extract_first()
  32.  
  33. #提交item到管道
  34. yield item

items

  1. # -*- coding: utf-8 -*-
  2.  
  3. # Define here the models for your scraped items
  4. #
  5. # See documentation in:
  6. # https://doc.scrapy.org/en/latest/topics/items.html
  7.  
  8. import scrapy
  9.  
  10. class MovieproItem(scrapy.Item):
  11. # define the fields for your item here like:
  12. name = scrapy.Field()
  13. score = scrapy.Field()
  14. time = scrapy.Field()
  15. long = scrapy.Field()
  16. actor = scrapy.Field()
  17. kind = scrapy.Field()
  18. detail_url = scrapy.Field()

pipelines

  1. # -*- coding: utf-8 -*-
  2.  
  3. # Define your item pipelines here
  4. #
  5. # Don't forget to add your pipeline to the ITEM_PIPELINES setting
  6. # See: https://doc.scrapy.org/en/latest/topics/item-pipeline.html
  7.  
  8. import json
  9. class MovieproPipeline(object):
  10. def __init__(self):
  11. self.fp = open('data.txt','w')
  12. def process_item(self, item, spider):
  13. dic = dict(item)
  14. print(dic)
  15. json.dump(dic,self.fp,ensure_ascii=False)
  16. return item
  17. def close_spider(self,spider):
  18. self.fp.close()

提高爬取效率

  爬取数据的过程中可能会遇到很多条数据,导致爬取效率变低,修改settings文件中的配置就能提高爬取效率.

1.增加并发量:

  默认最大的并发量为32,可以通过设置settings文件修改

  1. CONCURRENT_REQUESTS = 100

  将并发改为100

2.降低日志等级:

  在运行scrapy时,会有大量日志信息的输出,为了减少CPU的使用率。可以设置log输出信息为INFO或者ERROR即可。修改settings.py

  1. LOG_LEVEL = 'INFO'

3.禁止cookie:

  如果不是真的需要cookie,则在scrapy爬取数据时可以进制cookie从而减少CPU的使用率,提升爬取效率。修改settings.py

  1. COOKIES_ENABLED = False

4.禁止重试:

  对失败的HTTP进行重新请求(重试)会减慢爬取速度,因此可以禁止重试。修改settings.py

  1. RETRY_ENABLED = False

5.减少下载超时:

  如果对一个非常慢的链接进行爬取,减少下载超时可以能让卡住的链接快速被放弃,从而提升效率。修改settings.py

  1. DOWNLOAD_TIMEOUT = 10

小试牛刀

爬取4k高清壁纸网站的图片并且提高爬取效率

爬虫程序

  1. # -*- coding: utf-8 -*-
  2. import scrapy
  3. from ..items import PicproItem
  4.  
  5. class PicSpider(scrapy.Spider):
  6. name = 'pic'
  7. # allowed_domains = ['www.pic.com']
  8. start_urls = ['http://pic.netbian.com/']
  9.  
  10. def parse(self, response):
  11. li_list = response.xpath('//div[@class="slist"]/ul/li')
  12. print(li_list)
  13. for li in li_list:
  14. img_url ="http://pic.netbian.com/"+li.xpath('./a/span/img/@src').extract_first()
  15. # print(66,img_url)
  16. title = li.xpath('./a/span/img/@alt').extract_first()
  17. print("title:", title)
  18. item = PicproItem()
  19. item["name"] = title
  20.  
  21. yield scrapy.Request(url=img_url, callback =self.getImgData,meta={"item":item})
  22.  
  23. def getImgData(self, response):
  24. item = response.meta['item']
  25. # 取二进制数据在body中
  26. item['img_data'] = response.body
  27.  
  28. yield item

pipelines

  1. import os
  2. class PicproPipeline(object):
  3. def open_spider(self,spider):
  4. if not os.path.exists('picLib'):
  5. os.mkdir('./picLib')
  6. def process_item(self, item, spider):
  7. imgPath = './picLib/'+item['name']+".jpg"
  8. with open(imgPath,'wb') as fp:
  9. fp.write(item['img_data'])
  10. print(imgPath+'下载成功!')
  11. return item

settings

  1. USER_AGENT = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36'
  2.  
  3. # Obey robots.txt rules
  4. ROBOTSTXT_OBEY = False
  5.  
  6. ITEM_PIPELINES = {
  7. 'picPro.pipelines.PicproPipeline': 300,
  8. }
  9.  
  10. # 打印具体错误信息
  11. LOG_LEVEL ="ERROR"
  12.  
  13. #提升爬取效率
  14.  
  15. CONCURRENT_REQUESTS = 10
  16. COOKIES_ENABLED = False
  17. RETRY_ENABLED = False
  18. DOWNLOAD_TIMEOUT = 5

Scrapy的日志等级和请求传参的更多相关文章

  1. scrapy框架的日志等级和请求传参, 优化效率

    目录 scrapy框架的日志等级和请求传参, 优化效率 Scrapy的日志等级 请求传参 如何提高scripy的爬取效率 scrapy框架的日志等级和请求传参, 优化效率 Scrapy的日志等级 在使 ...

  2. 13.scrapy框架的日志等级和请求传参

    今日概要 日志等级 请求传参 如何提高scrapy的爬取效率 今日详情 一.Scrapy的日志等级 - 在使用scrapy crawl spiderFileName运行程序时,在终端里打印输出的就是s ...

  3. scrapy框架的日志等级和请求传参

    日志等级 请求传参 如何提高scrapy的爬取效率 一.Scrapy的日志等级 - 在使用scrapy crawl spiderFileName运行程序时,在终端里打印输出的就是scrapy的日志信息 ...

  4. scrapy框架之日志等级和请求传参-cookie-代理

    一.Scrapy的日志等级 - 在使用scrapy crawl spiderFileName运行程序时,在终端里打印输出的就是scrapy的日志信息. - 日志信息的种类: ERROR : 一般错误 ...

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

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

  6. scrapy框架post请求发送,五大核心组件,日志等级,请求传参

    一.post请求发送 - 问题:爬虫文件的代码中,我们从来没有手动的对start_urls列表中存储的起始url进行过请求的发送,但是起始url的确是进行了请求的发送,那这是如何实现的呢? - 解答: ...

  7. Scrapy框架之日志等级和请求传参

    一.Scrapy的日志等级 在使用scrapy crawl spiderFileName运行程序时,在终端里打印输出的就是scrapy的日志信息. 1.日志等级(信息种类) ERROR:错误 WARN ...

  8. 13,scrapy框架的日志等级和请求传参

    今日概要 日志等级 请求传参 如何提高scrapy的爬取效率 一.Scrapy的日志等级 - 在使用scrapy crawl spiderFileName运行程序时,在终端里打印输出的就是scrapy ...

  9. Scrapy日志等级以及请求传参

    日志等级 请求传参 提高scrapy的爬取效率 日志等级 - 日志信息:   使用命令:scrapy crawl 爬虫文件 运行程序时,在终端输出的就是日志信息: - 日志信息的种类: - ERROR ...

随机推荐

  1. 一般处理程序HttpHandler的应用

    ashx 一般处理程序(HttpHandler)是·NET众多web组件的一种,ashx是其扩展名.一个httpHandler接受并处理一个http请求,类比于Java中的servlet.类比于在Ja ...

  2. length() 用法

    length:(字符串 | 列):求出字符串的长度: 求出bqh4表中zym列的长度. select * from bqh4select a.*,length(zym) from bqh4 a

  3. python Pipe 双管道通信

    管道:是python多进程中一种交换数据的方式 from multiprocessing import Process,current_process,Queue,Pipe import time i ...

  4. angular、jquery、vue 的区别与联系

    angular和jquery的区别 angular中是尽量避免操作DOM, angular是基于数据驱动, 适合做数据操作比较繁琐的项目,angular适用于单页面开发,是一个比较完善的mvvm框架, ...

  5. CentOS7中部署Showdoc

    目录 CentOS7中部署Showdoc 前置环境 部署 配置文件 解压安装包 添加启动服务 设置权限 运行安装 界面 CentOS7中部署Showdoc 文:铁乐与猫 前置环境 因为showdoc其 ...

  6. tp查询顺序

    tp竟然可以跟据商品的id来进行排序查询的数据 记一些php中排序: sort()方法一维索引数组进行值升序排序 rsort()方法一维索引数组进行值降序排序 unsort()方法负责编写自定义排序操 ...

  7. Linux运维之--LVS、Nginx、HAproxy有什么区别?

    LVS: 是基于四层的转发 HAproxy: 是基于四层和七层的转发,是专业的代理服务器 Nginx: 是WEB服务器,缓存服务器,又是反向代理服务器,可以做七层的转发 区别: LVS由于是基于四层的 ...

  8. 阿里八八Alpha阶段Scrum(6/12)

    今日进度 叶文滔: 修复了无法正确判断拖曳与点击的BUG,并且成功连接添加界面. 会议内容 会议照片 明日安排 叶文滔: 继续完善按钮功能 王国超: 继续攻克日程界面显示存在的BUG 俞鋆: 继续进行 ...

  9. 【Alpha 冲刺】 5/12

    今日任务总结 人员 今日原定任务 完成情况 遇到问题 贡献值 胡武成 建立数据库 未完成 设计表结构的时候,有些逻辑没有设计好,重新review一番设想的功能才初步确定表结构 孙浩楷 根据UI设计, ...

  10. HTML常用标签大全