• 爬虫--Scrapy-参数等级和请求传参


    日志等级

    日志等级(种类):
        ERROR:错误
        WARNING:警告
        INFO:一般信息
        DEBUG:调试信息(默认)
    指定输入某一中日志信息:
        settings:LOG_LEVEL = ‘ERROR’
    将日志信息存储到制定文件中,而并非显示在终端里:
        settings:LOG_FILE = ‘log.txt’
    
    请求传参:爬取的数据值不在同一个页面中。
        需求:将id97电影网站中电影详情数据进行爬取(名称,类型,导演,语言,片长)

    如何让终端显示错误信息

    在settings.py中配置

    # 指定终端输入指定种类日志信息
    LOG_LEVEL = 'ERROR'
    # 存储到文件
    LOG_FILE = 'log.txt'

    请求传参

    请求传参:爬取的数据值不在同一个页面中。
    id97电影网站)

    在电影网站
    中电影详情数据进行爬取(名称,类型,导演,语言,片长)

    创建moviePro工程

    scrapy startproject moviePro

    cd moviePro

    scrapy genspider movie www.id97.com

     

     电影名称和类型在一页

    电影的其他详情在另外一页

    爬虫文件movie.py

    import scrapy
    from moviePro.items import MovieproItem
    
    class MovieSpider(scrapy.Spider):
        name = 'movie'
        #allowed_domains = ['www.id97.com']
        start_urls = ['https://www.55xia.com/movie']
        print(' start_urls')
    
        # 用于解析二级页面数据
       
        def parseBySecondPage(self,response):
            # 直接复制网页端的xpath
            director = response.xpath('/html/body/div[1]/div/div/div[1]/div[1]/div[2]/table/tbody/tr[1]/td[1]/span/text()').extract_first()
            language = response.xpath('/html/body/div[1]/div/div/div[1]/div[1]/div[2]/table/tbody/tr[6]/td[2]/text()').extract_first()
            longTime = response.xpath('/html/body/div[1]/div/div/div[1]/div[1]/div[2]/table/tbody/tr[8]/td[2]/text()').extract_first()
            # 取出Request方法的meta参数传递过来的字典(response.meta)
            item = response.meta['item']
            item['director'] = director
            item['language'] = language
            item['longTime'] = longTime
            # 将item提交给管道
            print('将item提交给管道')
            yield item
    
        def parse(self, response):
            # 需求:将id97电影网站中电影详情数据进行爬取(名称,类型,导演,语言,片长)
            div_list = response.xpath('/html/body/div[1]/div[1]/div[2]/div')
            for div in div_list:
                # extract_first()第一个
                name = div.xpath(".//div[@class='meta']/h1/a/text()").extract_first()
                kind = div.xpath('.//div[@class="otherinfo"]//text()').extract()
                # 将kind列表转化成字符串
                kind = " ".join(kind)
                url = div.xpath('.//div[@class="meta"]/h1/a/@href').extract_first()
                # href="//www.55xia.com/movie/638284.html
                url = 'https:'+url
                # 创建items对象
                item = MovieproItem()
                item['name'] = name       
                item['kind'] = kind
                item['url'] = url
                print('创建items对象')
    
                # 需要对url发起请求,获取页面数据,进行指定数据解析
                # 问题:如何将剩下的电影详情数据存储到item对象(meta)
                # 需要对url发起请求,获取页面数据,进行指定数据解析
                # meta参数只可以赋值一个字典(将item对象先封装到字典)
                yield scrapy.Request(url=url, callback=self.parseBySecondPage, meta={'item': item})
                
    movie.py

    items.py

    import scrapy
    
    
    class MovieproItem(scrapy.Item):
        # define the fields for your item here like:
        # name = scrapy.Field()
        name = scrapy.Field()
        kind = scrapy.Field()
        director = scrapy.Field()
        language = scrapy.Field()
        longTime = scrapy.Field()
        url = scrapy.Field()

    管道pipelines.py

    class MovieproPipeline(object):
        fp = None
    
        def open_spider(self, spider):
            self.fp = open('movie.txt', 'w', encoding='utf-8')
    
        def process_item(self, item, spider):
            print('------process_item-------')
            detail = item['name'] + ':' + item['kind'] + ':' + item['director'] + ':' + item['language'] + ':' + item[
                'longTime'] + '
    
    
    '
            self.fp.write(detail)
            return item
    
        def close_spider(self, spider):
            self.fp.close()
  • 相关阅读:
    git常用命令及常见问题解析
    如何让一个sprite绕一个点旋转,同时又可以实现指定旋转角度并慢慢停下的效果
    webpack打包,同时将ES6转为ES5,初探
    测试网站接口,nginx篇
    Phaserjs V2的state状态解析及技巧
    Phaserjs怎样用ES6开发游戏
    PIXI屏幕自适应以及强制横屏
    CSS性能优化新属性:will-change
    div,css&table布局有哪些区别
    防止js全局变量污染方法总结
  • 原文地址:https://www.cnblogs.com/foremostxl/p/10093504.html
Copyright © 2020-2023  润新知