我最近开始学习XPath for Python项目,但我似乎无法通过以下行选择正确的数据。
//table[@id="yfncsumtab"]//tr/td/a[@rel="first"]
在此页面上可以找到所述数据:http://finance.yahoo.com/q/hp?s=QQQX+Historical+Prices
(检查元素“下一步”链接以获取我正在尝试创建XPath的代码。换句话说,该页面上的Command / Control F,以及Inspect Element的第一个结果)
我尝试过该代码的许多变体,但似乎都没有选择正确的文本。我感谢任何和所有的帮助 - 提前感谢!
答案 0 :(得分:1)
'//a[text()="Next"]'
或:
'//table[@id = "yfncsumtab"]//a[text()="Next"]'
或者,为了得到第一个:
'//table[@id = "yfncsumtab"]//table[1]/tr/td/a[text()="Next"]'
或:
'//table[@id="yfncsumtab"]/tr[2]/td[1]/table[1]/tr/td/a[1]'
您越具体,找到元素的速度就越快。但是,您越具体,xpath就越脆弱:如果开发人员对目标元素周围的html结构进行了少量更改,则代码将无法正常工作。
from lxml import html
doc = html.parse("http://finance.yahoo.com/q/hp?s=QQQX+Historical+Prices")
my_xpath = '//a[text()="Next"]'
for element in doc.xpath(my_xpath):
print("<{}>".format(element.tag))
print(" text = {}".format(element.text))
for attr, val in element.items():
print(" {} = {}".format(attr, val))
--output:--
<a>
text = Next
rel = next
href = /q/hp?s=QQQX&d=11&e=28&f=2014&g=d&a=1&b=1&c=2007&z=66&y=66
<a>
text = Next
rel = next
href = /q/hp?s=QQQX&d=11&e=28&f=2014&g=d&a=1&b=1&c=2007&z=66&y=66
答案 1 :(得分:0)
试试这个:
//*[(@id = "yfncsumtab")]//a[(((count(preceding-sibling::*) + 1) = 3) and parent::*)]
通过这个Xpath我得到了顶部和底部&#39; Next&#39;链接。