#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()
Я учусь использовать 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
цикле, как у вас), чтобы избежать путаницы. Кроме того, я бы настоятельно рекомендовал вам научиться отлаживать (если вы еще не знаете, как это сделать), поскольку это действительно полезно.