Scrapy: X Path выбирает все заголовки, где предок не находится в нижнем колонтитуле - PullRequest
0 голосов
/ 21 июня 2019

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

Таким образом, заголовок <h3 class="ibm-bold">Discover</h3> должен быть исключен из очистки.

<footer role="contentinfo" aria-label="IBM">
   <div class="region region-footer">
   <div id="ibm-footer-module">
    <section role="region" aria-label="Resources">
            <h3 class="ibm-bold">Discover</h3>

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

//*[self::h1 or self::h2 or self::h3 or self::h4 or self::h5 or self::h6]/ancestor::footer/text()

Страница, которую я копирую, такова: https://www.ibm.com/products/informix/embedded-for-iot?mhq=iot&mhsrc=ibmsearch_a

Пожалуйста, помогите

Ответы [ 2 ]

1 голос
/ 21 июня 2019

У тебя почти было это.

//*[
  (self::h1 or self::h2 or self::h3 or self::h4 or self::h5 or self::h6)
  and not(ancestor::footer)
]/text()
0 голосов
/ 21 июня 2019

Вы можете удалить тег нижнего колонтитула на вашем супе с помощью экстракта, например:

from urllib import urlopen
from bs4 import BeautifulSoup

url ="https://www.ibm.com/products/informix/embedded-for-iot?mhq=iot&mhsrc=ibmsearch_a"
url_open = urlopen(url)
soup = BeautifulSoup(url_open,"html.parser")
[s.extract() for s in soup('footer')] #will remove footer tag
print soup #html source will printed without footer tag
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...