python的scrapy爬虫模块间进行传参_Python爬虫Scrapy框架之请求传参合日志等级

一 请求传参

在某种情况下,我们要爬取的数据会在不同的页面中。例如:我们爬取一个电影的网站时,电影的评分和名称在第一个页面中,而要爬取的电影详情在其的子页面中。这时我们就需要动态传参来实现。

需求: 爬取https://www.4567tv.tv/frim/index1.html中的电影名和导演名称

# -*- coding: utf-8 -*-

import scrapy

from moviePro.items import MovieproItem

#请求传参 重点*****

#item不能是全局的

class MovieSpider(scrapy.Spider):

name = 'movie'

# allowed_domains = ['www.xxx.com']

start_urls = ['https://www.4567tv.tv/frim/index1.html']

#模拟parse来写

def parse_detail(self,response):

#通过response 来获取回调函数传递过来的item

item = response.meta['item']

actor = response.xpath('/html/body/div[1]/div/div/div/div[2]/p[3]/a/text()').extract_first()

item['actor'] =actor

#提交item

yield item

#item 写在这 因为parse中的request 才能实现请求传参

def parse(self, response):

li_list = response.xpath('//li[@class="col-md-6 col-sm-4 col-xs-3"]')

for li in li_list:

item = MovieproItem()

name = li.xpath('./div/a/@title').extract_first()

detail_url = 'https://www.4567tv.tv'+li.xpath('./div/a/@href').extract_first()

#发送的为get请求 callback 是一个回调函数

item['name']=name

#meta是一个字典类型 将item传递给回调函数的response参数(也就是回调方法) 请求传参

yield scrapy.Request(url=detail_url,callback=self.parse_detail,meta={'item':item})

items文件

import scrapy

class MovieproItem(scrapy.Item):

# define the fields for your item here like:

name = scrapy.Field()

actor = scrapy.Field()

二 Scrapy中的日志等级

在使用scrap crawl filename运行程序时,在终端打印输入的就是Scrapy日志信息

日志信息的种类:

​ ERROR:一般错误

​ WARIING:警告

​ INFO:一般信息

​ DEBUG:调试信息

设置日志指定输入:

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

LOG_LEVEL ='指定日志信息的种类即可'

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

如何提高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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值