Xpath не работает в scrapy несмотря на работу в chrome - PullRequest
0 голосов
/ 02 апреля 2020

Пробовал:

date = response.xpath('//*[@id="page_match_1_block_match_info_5"]/div[2]/div[2]/div[1]/dl/dd[2]/a/text()').get()

Печать: None

date = response.xpath('//*[@id="page_match_1_block_match_info_5"]/div[2]/div[2]/div[1]/dl/dd[2]/a').get()

Печать: <a href="/matches/2020/04/03/"><span class="timestamp" data-value="1585922400" data-format="d mmmm yyyy">3 April 2020</span></a>

Но мне нужно: 3 April 2020

1 Ответ

1 голос
/ 02 апреля 2020

Вам необходимо добавить окончательную строку в маршрут Xpath text () .

В указанном вами случае c завершить маршрут Xpath

'//[@id="page_match_1_block_match_info_5"]/div[2]/div[2]/div[1]/dl/dd[2]/a'

'...dd[2]/a/span/text()'

Окончательный путь Xpath:

'// [@ id = "page_match_1_block_match_info_5"] / div [2] / div [2] / div 1 / dl / dd [2] / a / span / text () '

Пример:

Предположим, что вы хотите извлечь слово HOME из этого набора тегов HTML.

HTML:

<nav class="main-nav mobileNav">
    <ul>
        <li class="page-collection active-link">
            <a href="/">HOME</a>
        </li>

        <li class="index-collection">
            <a href="/featuring">FEATURING</a>
        </li>

        <li class="page-collection">
            <a href="/contact">CONTACT</a>
        </li>
    </ul>
</nav>

python Кодовая строка:

# Both selectors (extract_first, get) will obtain the same result.
# Add the text() component as a final str. into the Xpath route.
response.xpath('//*[@class="main-nav mobileNav"]/ul/li/a/text()').extract_first()

response.xpath('//*[@class="main-nav mobileNav"]/ul/li/a/text()').get()

Вывод:

'HOME'

Объяснение:

Вам нужно найти узел текстового типа внутри фактического узла, который вы посещаете.

<a href="/">HOME</a>

Это последний узел, который вы посещаете, прежде чем получить текстовое содержимое. Добавление текста () в последний маршрут Xpath

'../a/text()'

В результате получится текст, содержащий тег.

'HOME'

Ссылка: Xpath - Wikipedia

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