Python 请求获取的 HTML 数据与浏览器不同;JS 似乎无关紧要
2018-02-15
90
我试图从这个网站抓取天气数据:
http://www.fastweather.com/yesterday.php?city=St.+Louis_MO
我遇到的问题是昨天的降水量。在开发人员工具中查看时,我看到以下内容:
<strong>Yesterday's Precipitation</strong>
was 0.13 inches
但是从 Python 查看时,无论是使用 Requests 还是 urllib 模块,我都会看到以下内容:
<strong>Yesterday\'s Precipitation</strong>
was T inches
我在浏览器中使用 NoScript,并且禁止所有 JavaScript 运行,但 0.13 仍然出现。这个数字从何而来,我如何用 Python 获取它?
我使用的是 Unix 系统,这将是一个每天要运行的脚本。如果可能的话,我想避免使用 Selenium。
即使有其他网站可以使用,我也想知道为什么那个神秘的 T 存在。
这是我的相关代码:
webpage = requests.get("http://www.fastweather.com/yesterday.php?city=St.+Louis_MO")
if webpage.status_code == 200:
content = str(webpage.content)
我也尝试过这个:
with requests.Session() as session:
webpage = session.get("http://www.fastweather.com/yesterday.php?city=St.+Louis_MO")
content = webpage.text
还有这个:
webpage = urllib.request.urlopen("http://www.fastweather.com/yesterday.php?city=St.+Louis_MO")
content = webpage.read()
(上面的代码中可能存在小错误,因为我记不清每种方法的具体工作原理了。)
1个回答
您可以尝试以下代码来获取所需的输出:
import requests
from lxml import html
response = requests.get('http://www.fastweather.com/yesterday.php?city=St.+Louis_MO')
source = html.fromstring(response.text)
text_node = source.xpath('//div[@id="content"]//strong[.="Yesterday\'s Precipitation"]/following-sibling::text()[1]')[0]
print(text_node.strip()) # 'was 0.13 inches'
Andersson
2018-02-15