【问题标题】:How do I change the selector scrapy?如何更改选择器scrapy?
【发布时间】:2018-07-18 16:14:39
【问题描述】:

如何更改选择器scrapy?在蜘蛛工作期间。

请看我的代码:

# -*- coding: utf-8 -*-
import scrapy
from kino.items import KinoItem


class KinopoiskSpider(scrapy.Spider):
    name = 'kinopoisk'
    allowed_domains = ['kinopoisk.ru']
    start_urls = ['https://www.kinopoisk.ru/afisha/new/city/1/']

    def parse(self, response):
        links = response.css('div.name>a').xpath('@href').extract()
        for link in links:
            yield scrapy.Request(response.urljoin(link), callback=self.parse_moov, dont_filter=True)

    def parse_moov(self, response):
        item = KinoItem()
        item['orgname'] = response.css('div#headerFilm>span::text').extract()
        item['name'] = response.css('h1.moviename-big::text').extract()
        item['rating'] = response.css('div.block_2>div.div1>a>span.rating_ball::text').extract()
        item['r_critic'] = response.css('div.ratingNum>span::text').extract()
        item['waiting'] = response.xpath('//*[@id="block_rating"]/div[1]/div[3]/a[1]/text()').extract()
        if item['waiting'] is None:
            item['waiting_two'] = response.xpath('//*[@id="block_rating"]/div[1]/div[2]/a[1]/text()').extract()
        item['runtime'] = response.css('td#runtime::text').extract()
        item['premiere'] = response.xpath('//*[@id="div_rus_prem_td2"]/div/span[1]/a[1]/text()').extract()
        item['info'] = response.css('div.brand_words.film-synopsys::text').extract()

        yield item

这里if item['waiting'] is None: item['waiting_two'] 不起作用。有人可以在这里提出一些帮助吗?

【问题讨论】:

    标签: python-3.x web-scraping scrapy web-crawler scrapy-spider


    【解决方案1】:

    其实我觉得不是选择器的问题。

    extract() 方法没有提取任何内容时,它将返回一个空列表。 Python 中的空列表不是 None。

    例如:

    (same result both in python 2 and python 3)
    >>> a = []
    >>> a is None
    False
    >>> not a
    True
    

    这意味着您应该将if item['waiting'] is None 更改为if not item['waiting']

    我打印项目的结果:

    (orgin)
    ==========================
    orgname: []
    name: ['Килиманджара']
    rating: []
    r_critic: []
    waiting: [] <==== This is the empty list that extract() returned.
    runtime: ['75 мин. ', ' 01:15']
    premiere: ['19 июля 2018']
    info: ['Когда к\xa0тебе на\xa0свадьбу не\xa0приезжает жених, остается только одно\xa0\x97\xa0найти его. Именно так\xa0и поступает красавица Маруся, отправившись на\xa0поиски своего возлюбленного в\xa0его родной Азербайджан. И\xa0хорошо, что\xa0рядом есть дружная команда друзей, или\xa0не очень дружная и\xa0не совсем друзей. На\xa0такие приключения в\xa0Баку не\xa0рассчитывал никто из\xa0компании Маруси, как\xa0и сами жители.']
    ==========================
    
    (changed, I print waiting_two before the others)
    waiting_two: ['78%']
    ==========================
    orgname: []
    name: ['Килиманджара']
    rating: []
    r_critic: []
    waiting: []
    runtime: ['75 мин. ', ' 01:15']
    premiere: ['19 июля 2018']
    info: ['Когда к\xa0тебе на\xa0свадьбу не\xa0приезжает жених, остается только одно\xa0\x97\xa0найти его. Именно так\xa0и поступает красавица Маруся, отправившись на\xa0поиски своего возлюбленного в\xa0его родной Азербайджан. И\xa0хорошо, что\xa0рядом есть дружная команда друзей, или\xa0не очень дружная и\xa0не совсем друзей. На\xa0такие приключения в\xa0Баку не\xa0рассчитывал никто из\xa0компании Маруси, как\xa0и сами жители.']
    ==========================
    

    【讨论】:

      猜你喜欢
      • 2015-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-07
      • 1970-01-01
      • 1970-01-01
      • 2020-08-16
      • 1970-01-01
      相关资源
      最近更新 更多