Python、lxml和xpath:返回“[〈0x29a9998处的元素x>]而不是预期值

yrwegjxp  于 2023-03-07  发布在  Python
关注(0)|答案(2)|浏览(151)

我试图刮道明资产管理网页(例如下面;我不能发布超过两个链接),以便检索"price as on"值,即此HTML片段中的美元金额:

<div class="td-layout-grid9 td-layout-column td-layout-column-first">
Price As On: Jun 12, 2015
<br>
<strong>$14.54  </strong>
<strong class="td-copy-red">-0.01 (-0.07%)</strong>
</div>

我希望用Python、requests、lxml和XPath来实现这一点,我按如下所示安装了它们:

apt-get update
apt-get install python python-pip python-dev gcc build-essential libxml2-dev libxslt-dev libffi-dev libssl-dev
pip install lxml
pip install requests
pip install requests[security]

接下来,为了检索页面,我这样做:

python
>>> from lxml import html
>>> import requests
>>> page = requests.get('https://www.tdassetmanagement.com/fundDetails.form?fundId=6320&lang=en')
>>> tree = html.fromstring(page.text)

最后,我们尝试使用从Chrome的"Inspect Element"工具获得的相关元素的XPath来检索所需的美元值:

>>> price = tree.xpath('//*[@id="fundCardVO"]/div[2]/div[1]/div[1]/div[1]/strong[1]')
>>> print price

不幸的是,结果是[<Element strong at 0x29a9998>],而不是预期的美元金额$14.54&nbsp;&nbsp;
为了确保最初的"requests.get"检索到预期的数据,我运行了以下命令:

>>> print page.content

结果如下所示:http://pastebin.com/f5C4MFQb.
如果我粘贴到这个工具上面的HTML:http://videlibri.sourceforge.net/cgi-bin/xidelcgi我的XPath查询//*[@id="fundCardVO"]/div[2]/div[1]/div[1]/div[1]/strong[1]返回预期的美元金额。
如果有任何关于如何使用Python、lxml和XPath来检索该元素所需值的提示或技巧,我将非常感激,如果有一种完全不同的方法可以获得相同的结果,我也会感兴趣。
谢谢。

q8l4jmvw

q8l4jmvw1#

在进一步搜索以找出元素是什么(它们是具有tagtext等属性的事物列表),然后再搜索关于UnicodeEncodeError的内容(参见UnicodeEncodeError: 'ascii' codec can't encode character u'\xa0' in position 20: ordinal not in range(128))之后,我能够通过以下命令获得我想要的值:

>>> priceelement = tree.xpath('//*[@id="fundCardVO"]/div[2]/div[1]/div[1]/div[1]/strong[1]')
>>> priceascii = priceelement[0].text
>>> price = priceascii.encode('utf-8')
>>> print price

谢谢你把我推向正确的方向jonrsharpe。
我仍然无法确定如何获得元素的可用属性列表,但是tagtext是可用的。
我接着用下面的代码得到了这个数字(没有美元符号和尾随的不间断空格):

>>> import re
>>> p = re.search('[0-9]{1,3}\.[0-9]{2}', price)
>>> price = p.group(0)
>>> print price
laik7k3q

laik7k3q2#

用于范围:对于x的价格:打印(x.文本)

相关问题