Как получить конкатенированные дочерние текстовые узлы в lxml

Это образец HTML:

<div class="wpb_text_column">
    <div class="wpb_wrapper">
      <p style="text-align: center;"><a href="http://somepage1.com">First text part </a></p>
      <p style="text-align: center;"><a href="http://somepage2.com">Second text part </a></p>
      <p style="text-align: center;"><a href="http://somepage3.com">Third text part</a></p>
    </div> 
</div>
<div class="wpb_text_column">
    <div class="wpb_wrapper">
      <p style="text-align: center;"><a href="http://somepage4.com">First text part </a></p>
      <p style="text-align: center;"><a href="http://somepage5.com">Second text part</a></p>
    </div> 
</div>

С кодом ниже

tree = html.fromstring(html_sample)
tree.xpath('//div[@class="wpb_text_column"]/div[@class="wpb_wrapper"]/p/a/text()')

Я могу получить список текстовых значений

['First text part ', 'Second text part ', 'Third text part', 'First text part ', 'Second text part']

Однако я хочу получить все значения из каждого div в виде одной строки, например

['First text part Second text part Third text part', 'First text part Second text part']

и

//div[@class="wpb_text_column"]/div[@class="wpb_wrapper"]/normalize-space()

кажутся exact XPath для решения проблемы, но lxml не поддерживает синтаксис /normalize-space():

lxml.etree.XPathEvalError: Недопустимое выражение

Итак, как получить желаемый результат в lxml?


person Andersson    schedule 08.05.2017    source источник
comment
Кажется, в синтаксическом анализаторе lxml есть возможность игнорировать пробелы при анализе: stackoverflow.com/questions/3310614/   -  person SomeDude    schedule 08.05.2017
comment
Использование tree = html.fromstring(html_sample, parser=etree.XMLParser(remove_blank_text=True)) дает ошибку lxml.etree.XMLSyntaxError: Extra content at the end of the document   -  person Andersson    schedule 08.05.2017


Ответы (1)


Решено с помощью кода ниже:

[" ".join(string.text_content().split()) for string in tree.xpath('//div[@class="wpb_text_column"]/div[@class="wpb_wrapper"]')]
person Andersson    schedule 08.11.2017