Не получить ожидаемый результат в скрапе - PullRequest
0 голосов
/ 16 октября 2019

Я занимаюсь веб-очисткой, но не получаю ожидаемого результата.

Я изучаю веб-очистку и все еще начинаю. Проблема в том, что не все цитаты очищаются.

import scrapy

class QuoteSpider(scrapy.Spider):
    name = 'Quotes'
    start_urls = [
    'http://quotes.toscrape.com/'
    ]
    def parse(self, response):
        for quotes in response.selector.xpath("//div[@class='quote']"):
            yield{
            'text':quotes.xpath("//span[@class='text']/text()").extract_first(),
            'author':quotes.xpath("//small[@class='author']/text()").extract_first(),
            'tags':quotes.xpath("//div[@class='tags']/child::a/text()").extract(),
            }

Я ожидаю, что все цитаты на первой странице должны быть очищены. Вместо этого я получаю ту же цитату и автора снова и снова, но он извлекает все теги каждый раз. Я все еще новичок. Я буду признателен за помощь.

1 Ответ

0 голосов
/ 17 октября 2019

это распространенная ошибка при использовании xpath для вложенных селекторов.

Когда вы используете xpath для уже извлеченного селектора, если вы хотите использовать то, что вы уже извлекли, как корень для нового селектора xpath, вам нужно запустить xpath с .. Если вы этого не сделаете, он просто будет использовать весь DOM, как обычно.

Так что просто измените последние строки на:

{
    'text':quotes.xpath(".//span[@class='text']/text()").extract_first(),
    'author':quotes.xpath(".//small[@class='author']/text()").extract_first(),
    'tags':quotes.xpath(".//div[@class='tags']/child::a/text()").extract(),
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...