如何使用 lxml.html 从 HTML 元素获取文本

How to get text from HTML element by using lxml.html

我一直在尝试从网页 https://www.list-org.com/company/11665809 中获取托管在 <div> 元素内的全文。
该元素应包含一个子字符串“Арбитраж”。
确实如此,因为我的代码

for div in tree.xpath('.//div[contains(text(), "Арбитраж")]'):
    print(div)

returns 回应

Element div at 0x15480d93ac8

但是当我尝试使用方法 div.text 获取全文时,它 returns None
我认为这是一个奇怪的结果。 我该怎么办?
任何帮助将不胜感激。 以及有关学习 HTML 基础知识的源代码的建议(不是精明的程序员)以避免将来出现如此简单的问题。

这是 xpath 由宿主语言和库处理时发生的奇怪事情之一。 当你使用 xpath 表达式时

 .//div[contains(text(), "Арбитраж")] 

搜索是根据 xpath 规则执行的,它认为目标文本包含在目标 div 中。 当您转到下一行时:

print(div.text)

您正在使用 lxml.html,它显然不会将目标文本视为 div 文本的一部分,因为它前面有 <i> 标记。要使用 lxml.html,您必须使用:

print(div.text_content())

或仅使用 xpath:

print(tree.xpath('.//div[contains(text(), "Арбитраж")]/text()')[0])

lxml.etree 和 beautifulsoup 似乎使用了不同的方法。 See this interesting discussion here.