【问题标题】:Using lxml and xpath to get text from a webpage使用 lxml 和 xpath 从网页中获取文本
【发布时间】:2016-01-08 09:28:37
【问题描述】:

我正在尝试从网页中提取一些数字,特别是 RealClearPolitics 的当前总统支持率。

这是我正在使用的代码,尝试使用 urllib2 获取网页,使用 lxml 解析所有内容,并使用 chrome 报告的 xpath。问题是,我最后得到的只是一个空列表。

import urllib2
from lxml import etree

url = "http://www.realclearpolitics.com/epolls/other/president_obama_job_approval-1044.html"
page = urllib2.urlopen(url)

tree = etree.parse(page.content, etree.HTMLParser())

rcp=tree.xpath('//*[@id="polling-data-rcp"]/table/tbody/tr[2]/td[4]')

print rcp

任何帮助将不胜感激!

【问题讨论】:

  • tbody 可能不存在于 HTML 文件中。尝试不使用tbody
  • 这样做了,然后我将 xpath 更改为 //*[@id="polling-data-rcp"]/table/tbody/tr[2]/td[4]/text() 并解决了问题!
  • 转到文档。

标签: python python-2.7 xpath lxml


【解决方案1】:

tr[2]/td[4] 不对。见:

因此您需要使用正确的 XPath 查询:

Python 代码是:

import requests
from lxml import html

URL = "http://www.realclearpolitics.com/epolls/other/president_obama_job_approval-1044.html"
response = requests.get(URL)
tree = html.fromstring(response.content)

rcp_approve = '//table[@class="chart_legend small_legend"]/tbody/tr/td[@class="candidate"][1]/div[1]/span/text()'
rcp_disapprove = '//table[@class="chart_legend small_legend"]/tbody/tr/td[@class="candidate"][2]/div[1]/span/text()'

rcp_approve = float(tree.xpath(rcp_approve)[0])
rcp_disapprove = float(tree.xpath(rcp_disapprove)[0])

print "Obama's approve rate: {}".format(rcp_approve)
print "Obama's disapprove rate: {}".format(rcp_disapprove)

输出:

Obama's approve rate: 44.4
Obama's disapprove rate: 51.6

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-02
    • 2020-07-12
    • 2018-11-12
    • 1970-01-01
    相关资源
    最近更新 更多