【发布时间】:2015-08-29 15:09:59
【问题描述】:
我正在尝试抓取 TD 资产管理页面(以下示例;我不能发布两个以上的链接)以检索“开价”值,即 HTML 的 sn-p 中的美元金额:
<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 的“检查元素”工具获得的相关元素的 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 来检索此元素所需值的提示或技巧将不胜感激。如果有一种完全不同的方法可以让我获得相同的结果,我也会对此感兴趣。
谢谢。
【问题讨论】:
-
您将获得一个包含单个
Element的列表;到底是什么问题? -
问题是我不知道如何获得所需的
$14.54&nbsp;&nbsp;值。如果我执行>>> print tree.xpath('//title/text()')之类的操作,我会得到实际的标题,而当我尝试获取美元价值时,我会得到[<Element strong at 0x29a9998>]。我应该提到我是一个完整的初学者。感谢您的帮助。 -
您是否尝试过阅读文档以了解
Element是什么,或者使用例如dir了解它的属性?