методы extract_first () и extract () для селекторов scrapy, не возвращающих одно и то же значение - PullRequest
0 голосов
/ 30 апреля 2018

Использование скрапа для сбора данных с веб-страницы кинотеатра.

Работа с селекторами xpath, если я использую селекторы с методом extract (), например:

def parse_with_extract(self, response):
    div = response.xpath("//div[@class='col-sm-7 col-md-9']/p[@class='movie__option']")
    data = i.xpath("text()").extract()
    return data

Возвращает:

Result of extract() on selectors

Если я использую селектор с методом extract_first () как таковой:

def parse_with_extract_first(self, response):
    div = response.xpath("//div[@class='col-sm-7 col-md-9']/p[@class='movie__option']")
    storage = []
    for i in div:
        data = i.xpath("text()").extract_first()
        storage.append(data)
    return storage

Возвращает:

Result of extract_first() on selectors

Почему метод extract () возвращает все символы, включая "\ xa0" и метод extract_first (), возвращая вместо этого пустую строку ????

1 Ответ

0 голосов
/ 30 апреля 2018

Если вы посмотрите ближе к ответу, вы увидите, что элемент @class=movie__option выглядит следующим образом:

'<p class="movie__option" style="color: #000;">\n                                    <strong>Thursday 3rd of May 2018:</strong>\n                                    11:20am\xa0 \xa0  \n                                </p>'

Если вы извлечете text() этого элемента, вы получите две строки: одну перед тегом strong и другую после (text() принимает только текст первого уровня):

['\n                                    ',
 '\n                                    11:20am\xa0 \xa0  \n                                ']

То, что делает extract_first, просто берет первую из этих двух строк:

'\n                                    '
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...