XPath:评估这行代码中的错误?

时间:2014-12-28 08:56:46

标签: python xpath finance stock

我最近开始学习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的第一个结果)

我尝试过该代码的许多变体,但似乎都没有选择正确的文本。我感谢任何和所有的帮助 - 提前感谢!

2 个答案:

答案 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;链接。