Проблема Xpath при разборе дочерних тегов из родительских тегов с атрибутом style - PullRequest
0 голосов
/ 04 февраля 2019

Ниже приведен фрагмент HTML-контента:

<div class="post-inner wow bounceInUp animated" data-wow-offset='80' data-wow-delay="0s" data-wow-duration="0.8s">
   <a href="https://url.com/hello/" class="post-link"></a>
   <div class="post-pic lazyload" data-bg="https://url.com/wp-content/uploads/2019/01/opioid-300x200.jpg" *style="background-image: url('');" * /></div>
   <div class="tags-wrapper">
      <a href="/tag/hello-world">Hello World</a>
      <a href="/tag/noob">Noob</a>
   </div>
   <h3>
      <a href="https://url.com/hello/">
      My First Title-Hello</a>
   </h3>
</div>

Я пытаюсь извлечь заголовок и ссылку внутри h3.Я делаю следующее:

>>> from lxml.html import fromstring
>>> content = """
<div class="post-inner wow bounceInUp animated" data-wow-offset='80' data-wow-delay="0s" data-wow-duration="0.8s">
...    <a href="https://url.com/hello/" class="post-link"></a>
...    <div class="post-pic lazyload" data-bg="https://url.com/wp-content/uploads/2019/01/opioid-300x200.jpg" *style="background-image: url('');" * /></div
>
...    <div class="tags-wrapper">
...       <a href="/tag/hello-world">Hello World</a>
...       <a href="/tag/noob">Noob</a>
...    </div>
...    <h3>
...       <a href="https://url.com/hello/">
...       My First Title-Hello</a>
...    </h3>
... </div>"""
>>> html_response = fromstring(content)
>>> main_tag = html_response.xpath('//div[@class="post-inner wow bounceInUp animated"]')
>>> main_tag
[<Element div at 0x106b347e0>]
>>> main_tag[0].xpath('div')
[<Element div at 0x106b34788>]
>>> main_tag[0].xpath('a')
[<Element a at 0x106b34838>]
>>> main_tag[0].xpath('a/@href')
['https://url.com/hello/']
>>> main_tag[0].xpath('h3/a')
[]
>>> main_tag[0].xpath('h3')
[]
>>> 

Я не могу пройти через тег h3 здесь.И при устранении неполадок, если я удаляю *style="background-image: url('');" * /

, я могу извлечь тег.

Кто-нибудь может мне помочь в этом?

1 Ответ

0 голосов
/ 04 февраля 2019

Захватываемый div закрывается в конце 3-й строки (обратите внимание, что первый div в этой строке заканчивается />).Следовательно, элемент h3, который вы хотите захватить, находится за пределами этого div.

...