在尝试从网页表中提取值时,我无法弄清楚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控制台,显示确定!所以我不知所措。
$x ('//*[@id="financial"]/table/tbody/tr/td[1]/table/tbody/tr[2]/td[1]/div[2]/text()')
[
"£432,272"
]
答案 0 :(得分: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()