当前位置: 首页 > 知识库问答 >
问题:

Xpath不返回值lxml Python

牧信厚
2023-03-14

我正在做一个项目,我试图让lxml从不同网页上的不同表格中提取股票数据。当我运行程序试图打印我试图提取的值时,我得到了空括号

('Cash_and_short_term_investments:', [])
('EPSNextYear:', [])

以下是我称之为的方式:

  #the url at this point is http://finviz.com/quote.ashx?t=RAIL confirmed with print statement
   url = driver.current_url
   page2 = requests.get(url)
   tree2 = html.fromstring(page2.content)
   EPSNextYear =              
   tree2.xpath('/html/body/table[3]/tr[1]/td/table/tr[7]/td/table/tr[2]/td[6]/b')
   #Original XPath:/html/body/table[3]/tbody/tr[1]/td/table/tbody/tr[7]/td/table/tbody/tr[2]/td[6]/b
   print ('EPSNextYear:', EPSNextYear)

以及:

#the url at this point is https://www.google.com/finance?q=NASDAQ%3ARAIL&fstype=ii&ei=hGwhWNHVPOW7iwLMiIfIDA I've confirmed this with a print
url = driver.current_url
page3 = requests.get(url)
tree3 = html.fromstring(page3.content)
Cash_and_Short_Term_Investments = tree3.xpath('//*[@id="fs-table"]/tr[3]/td[2]/text()')
print('Cash_and_short_term_investments:', Cash_and_Short_Term_Investments)

我已经从XPath中删除了tbody,就像一些类似的问题所建议的那样。任何帮助或建议将不胜感激,谢谢!

共有1个答案

曾元忠
2023-03-14

当提出这样的问题时,您需要提供一个简短但完整的示例来说明问题。

看看第二个示例,很明显,您使用的XPath表达式是不正确的。XPath中缺少tbody元素。(您可能希望通过查找正在搜索的实际字符串来选择正确的表行。)

给定以下代码:

from lxml import etree
import urllib

url="http://www.google.com/finance?q=NASDAQ%3ARAIL&fstype=ii&ei=hGwhWNHVPOW7iwLMiIfIDA"
parser = etree.HTMLParser()
tree = etree.parse(urllib.urlopen(url), parser)
result = tree.xpath('//*[@id="fs-table"]/tbody/tr[normalize-space(td) = "Cash and Short Term Investments"]')
for x in result: print etree.tostring(x)

这样运行时:

> python test.py 

您将获得以下输出:

<tr>
<td class="lft lm">Cash and Short Term Investments
</td>
<td class="r">39.78</td>
<td class="r">78.45</td>
<td class="r">91.21</td>
<td class="r">110.02</td>
<td class="r rm">125.01</td>
</tr>

<tr>
<td class="lft lm">Cash and Short Term Investments
</td>
<td class="r">110.02</td>
<td class="r">161.49</td>
<td class="r">184.49</td>
<td class="r rm">140.49</td>
</tr>

我相信,一旦你把第一个例子变成一个独立的问题复制器,你就能找出它的错误所在。

 类似资料:
  • Hello:)我想要所有节点,但集合的长度返回0。将来我需要属性,例如,当前它将是一个包含WOW的元素列表。但问题是我根本无法选择节点。 xml部分: 长度为1: 长度为0-为什么

  • 我正在等待(从USSD请求中)检索一个值,以便返回它(getUSSD):

  • 根据函数或者结构体方法的返回值,returnHandle 插件将自动将内容写入到 ResponseWriter. 目前支持的返回值及对应的行为如下: string 返回string,将会把string转为[]byte同时写入到ResponseWriter []byte 返回[]byte将会直接写入ResponseWriter error 返回错误,如果error不为nil, 则写入返回头500,内

  • 问题内容: 我在使用Ajax时遇到问题。 问题是,在获得ajax响应之前,它会返回cnt。因此它总是返回NULL。 有没有办法使正确的返回响应值? 谢谢! 问题答案: 由于AJAX请求是异步的,因此您的cnt变量将在请求返回并调用成功处理程序之前返回。 我建议重构您的代码以解决此问题。 一种方法是从AJAX请求的成功处理程序中调用调用了GetGrantAmazonItemCnt()的任何函数,此方

  • 编辑问题以包括所需的行为、特定问题或错误,以及重现问题所需的最短代码。这将有助于其他人回答这个问题。 代码不返回值,而是返回“?”。编译时我没有遇到任何错误。请协助。 代码需要返回需要支付的剩余金额。输出代码1代码2代码3代码4

  • 问题内容: 我能够成功获取经/纬度并将其传递给地址解析器以获取地址。但是,我并不总是找回地址。似乎需要尝试几次?我不知道为什么。 此时我是否有更好的方法来获取地址? 我在这里调用此方法: 问题答案: 根据我的经验,Google Geocoder并非总是能正常工作,我在地图上有几个固定点,当我点击叠加层时,它会弹出带有该经度/纬度地址的祝酒词,这些点不会改变,有时我在同一点上单击10次,但我只得到其