• 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
    
  • 相关阅读:
    深度解密Go语言之sync.map
    Golang常用框架
    fclist :lang=zh
    linux常用硬件故障排查工具之dmesg
    Go进阶53:从零Go实现WebsocketH5RDP/VNC远程桌面客户端
    wsl 2 设置静态 DNS 服务地址及 Linux 和 Windows 主机网络互相访问设置
    go.定时邮件发送
    使用arthas定位问题
    在kubernetes中定义覆盖docker中的命令和参数
    NGINX转发端口后却跳转到80端口的解决方法
  • 原文地址:https://www.cnblogs.com/mlhz/p/10473446.html
Copyright © 2020-2023  润新知