XPath ведет себя не так, как ожидалось - PullRequest
0 голосов
/ 12 мая 2018

У меня есть какой-то довольно грязный тег HTML, и я хочу извлечь информацию об абзаце без HTML, однако я обнаружил, что могу получить только первый абзац.Так, например, HTML выглядит так:

   <p>BLAH BLAH<strong><nobr><strong>people</strong></nobr></strong>&#39;s work <strong>&quot;Blah <nobr><strong><span style="font-size:14pt"><strong>blah</strong></span></strong></nobr> and <nobr><strong><span style="font-size:14pt"><strong>Nothing</strong></span></strong></nobr> quote&quot;</strong>lalal</p>

<p>More text<strong><nobr><strong>More text</strong></nobr></strong> blah blah</p>

Я пытаюсь с помощью:

converted = html.fromstring(body)
para = converted.xpath('//*[starts-with(name(), "p")]')

и циклически повторяю пункты:

string_content = ''
for p in para:          
    if p.text is not None:
        string_content += ' ' + p.text

Однако яЯ получаю только один элемент <p>, который является первым.Этот код, кажется, не в состоянии собрать весь контент, который мне нужен, и обычно дает только первый фрагмент информации.

1 Ответ

0 голосов
/ 12 мая 2018

Если вы хотите получить весь контент внутри тега p, вы можете сделать что-то вроде этого:

from lxml import html

body = '<p>BLAH BLAH<strong><nobr><strong>people</strong></nobr></strong>&#39;s work <strong>&quot;Blah <nobr><strong><span style="font-size:14pt"><strong>blah</strong></span></strong></nobr> and <nobr><strong><span style="font-size:14pt"><strong>Nothing</strong></span></strong></nobr> quote&quot;</strong>lalal</p><p>More text<strong><nobr><strong>More text</strong></nobr></strong> blah blah</p>'

converted = html.fromstring(body)
para = converted.xpath('//p')

content = [p.text_content() for p in para if p.text_content()]
content = ' '.join(content)
print content

Результат:

BLAH BLAHpeople's work "Blah blah and Nothing quote"lalal More textMore text blah blah
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...