AttributeError: объект ‘list’ не имеет атрибута ‘css’ в scrapy

#python #scrapy

#python #scrapy

Вопрос:

Веб-сайт очистки:http://quotes.toscrape.com

Я использую Scrapy 2.3.0.

Я пытаюсь очистить все цитаты вместе с их автором и тегами с вышеупомянутого веб-сайта.

Может кто-нибудь, пожалуйста, объяснить мне, почему этот код выдает

 Error :
AttributeError: 'list' object has no attribute 'css'
  

в строке :

 author = quote.css('.author::text').extract()
  

cmd

Я учусь использовать scrapy, и я застрял на этом.
импортируйте scrapy

 class QuotesSpider( scrapy.Spider ):
    name = "crawler"
    start_urls = [
        'http://quotes.toscrape.com/'
        ]

    def parse( self, response ):

        all_quotes = response.css(".quote")

        for quote in all_quotes:

            quote = quote.css('text::text').extract()
            author = quote.css('.author::text').extract()
            tags = quote.css('.tags::text').extract()
        
            yield {
                'quote': quote,
                'author' : author,
                'tags' : tags
                }
  

Ответ №1:

Проблема, по-видимому, в том, что переменная quote ссылается на список, когда Python выполняет строку, которая выдает ошибку (а встроенный тип данных list не имеет атрибута с именем «css»).

Я бы посоветовал отладить ваш код (если вы знаете, как это сделать). Это должно дать вам представление о том, в чем именно проблема.

Если вам неудобно с отладкой, то закомментируйте все в for цикле, кроме строки с quote = quote.css('text::text').extract() и добавьте print(quote) , чтобы увидеть, какова точная структура списка, на которую ссылается ваша переменная quote .

PS: Я бы предложил использовать лучшие имена переменных (и не переназначать quote в for цикле, как у вас), чтобы избежать путаницы. Кроме того, я бы настоятельно рекомендовал вам научиться отлаживать (если вы еще не знаете, как это сделать), поскольку это действительно полезно.