如何使用 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.
我一直在尝试从网页 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.