scrapy框架之日志等级和请求传参

Posted glh-ty

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了scrapy框架之日志等级和请求传参相关的知识,希望对你有一定的参考价值。

一.Scrapy的日志等级

  - 在使用scrapy crawl spiderFileName运行程序时,在终端里打印输出的就是scrapy的日志信息。

  - 日志信息的种类:

        ERROR : 一般错误

        WARNING : 警告

        INFO : 一般的信息

        DEBUG : 调试信息

        默认的显示级别是DEBUG

  - 设置日志信息指定输出:

    在settings.py配置文件中,加入LOG_LEVEL = ‘指定日志信息种类’即可。LOG_FILE = ‘log.txt‘则表示将日志信息写入到指定文件中进行存储。

二.请求传参

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

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

import scrapy
from moviePro.items import MovieproItem

class 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获取item
        item = 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.py:

 -*- coding: utf-8 -*-

# Define here the models for your scraped items
#
# See documentation in:
# https://doc.scrapy.org/en/latest/topics/items.html

import scrapy


class 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()

管道文件:

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

# 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.html

import 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 item
    def close_spider(self,spider):
        self.fp.close()

 

以上是关于scrapy框架之日志等级和请求传参的主要内容,如果未能解决你的问题,请参考以下文章

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

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

11-scrapy(递归解析,post请求,日志等级,请求传参)

文章索引

Scrapy框架之日志等级

Scrapy框架之请求传参案例 -- 2019-08-08 20:40:13