Python lxml - 返回空列表

1 投票
1 回答
518 浏览
提问于 2025-04-18 17:40

我搞不清楚在从网页表格中提取值时,XPATH到底出了什么问题。这个方法看起来是对的,因为我可以提取到页面标题和其他属性,但就是提取不到第三个值,总是返回一个空列表?

from lxml import html
import requests

test_url = 'SC312226'

page = ('https://www.opencompany.co.uk/company/'+test_url)

print 'Now searching URL: '+page

data = requests.get(page)
tree = html.fromstring(data.text)

print tree.xpath('//title/text()') # Get page title  
print tree.xpath('//a/@href') # Get href attribute of all links  
print tree.xpath('//*[@id="financial"]/table/tbody/tr/td[1]/table/tbody/tr[2]/td[1]/div[2]/text()')

如果我没有漏掉什么的话,XPATH应该是正确的:

Chrome 截图

我检查了Chrome控制台,看起来没问题!所以我现在很困惑。

$x ('//*[@id="financial"]/table/tbody/tr/td[1]/table/tbody/tr[2]/td[1]/div[2]/text()')
[
"£432,272"
]

1 个回答

2

你应该指定元素的名称。如果你不想指定具体的标签名称,可以使用 * 来表示所有标签:

print tree.xpath('//*[@id="financial"]/...')
                    ^

更新

在 HTML 文件中(也就是在浏览器渲染之前的 HTML),是没有 tbody 标签的。所以你需要把表达式中的 tbody 去掉:

//*[@id="financial"]/table/tr/td[1]/table/tr[2]/td[1]/div[2]/text()

还有一种方法是使用 following-sibling 轴:

//div[text()="Total Assets"]/following-sibling::div/text()

撰写回答