使用BeautifulSoup从HTML获取文本

时间:2013-09-10 00:24:10

标签: html python-2.7 web-scraping beautifulsoup

我正在尝试使用Python2.7和BeautifulSoup4从我的电力供应商的website获得当前的“5分钟趋势价格”。

xpath是:xpath = "//html/body/div[2]/div/div/div[3]/p[1]"

<div class="instant prices">
  <p class="price">
    "5.2"  # this is what I'm ultimately after
    <small>¢</small>
    <strong> per kWh </strong>
  </p>

我已经尝试了无数种不同的方法来获得“5.2”值并成功地深入到“即时价格”对象,但无法从中获取任何信息

我当前的代码如下所示:     import urllib2     来自bs4 import BeautifulSoup

url = "https://rrtp.comed.com/live-prices/"

soup = BeautifulSoup(urllib2.urlopen(url).read())
#print soup

instantPrices = soup.findAll('div', 'instant prices')
print instantPrices

...输出为:

[<div class="instant prices">
</div>]
[]

无论如何,即使在Chrome中检查元素时我能清楚地看到它,“即时价格”对象似乎也是空的。 非常感谢任何帮助!谢谢!

1 个答案:

答案 0 :(得分:2)

不幸的是,当浏览器呈现网站时,这些数据是通过Javascript生成的。这就是为什么当您使用urllib下载源时,此信息不存在的原因。你可以做的是直接查询后端:

>>> import urllib2
>>> import re

>>> url = "https://rrtp.comed.com/rrtp/ServletFeed?type=instant"
>>> s = urllib2.urlopen(url).read()
"<p class='price'>4.5<small>&cent;</small><strong> per kWh </strong></p><p>5-minute Trend Price 7:40 PM&nbsp;CT</p>\r\n"

>>> float(re.findall("\d+.\d+", s)[0])
4.5