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

时间:2020-05-10 09:33:57

标签: python html lxml lxml.html

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

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

返回响应

Element div at 0x15480d93ac8

enter image description here

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

1 个答案:

答案 0 :(得分:1)

这是由宿主语言和库处理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.