我试图刮道明资产管理网页(例如下面;我不能发布超过两个链接),以便检索"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
。
为了确保最初的"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来检索该元素所需值的提示或技巧,我将非常感激,如果有一种完全不同的方法可以获得相同的结果,我也会感兴趣。
谢谢。
2条答案
按热度按时间q8l4jmvw1#
在进一步搜索以找出元素是什么(它们是具有
tag
或text
等属性的事物列表),然后再搜索关于UnicodeEncodeError
的内容(参见UnicodeEncodeError: 'ascii' codec can't encode character u'\xa0' in position 20: ordinal not in range(128))之后,我能够通过以下命令获得我想要的值:谢谢你把我推向正确的方向jonrsharpe。
我仍然无法确定如何获得元素的可用属性列表,但是
tag
和text
是可用的。我接着用下面的代码得到了这个数字(没有美元符号和尾随的不间断空格):
laik7k3q2#
用于范围:对于x的价格:打印(x.文本)