我一直在尝试从网页https://www.list-org.com/company/11665809的<div>
元素中托管全文。
该元素应包含一个子字符串“Арбитраж”。
确实如此,因为我的代码
for div in tree.xpath('.//div[contains(text(), "Арбитраж")]'):
print(div)
返回响应
Element div at 0x15480d93ac8
但是当我尝试使用方法div.text
获取全文本身时,它将返回None
我认为这是一个奇怪的结果。
我该怎么办?
任何帮助将不胜感激。
以及有关学习HTML基础知识的资源的建议(不是一个精明的程序员),以避免将来出现这样一个简单的问题。
答案 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.