【问题标题】:When scraping wind speed from Google Weather, I can see it, but can't scrape it从谷歌天气刮风速时,我能看到,但不能刮
【发布时间】:2019-03-07 06:24:16
【问题描述】:

我正在尝试从 Google 的 7 天预报中获取风速。当我检查网页代码时,我可以看到风速,但是当我在课堂上使用 find_all() 时,它只返回温度数据和来自 7 天预报的今天风速。

import requests
from bs4 import BeautifulSoup

page = requests.get("https://www.google.co.nz/search?ei=CQmzW9_zHsaiwAPuvruwCQ&q=tauranga+weather+forecast&oq=tauranga++forecast&gs_l=psy-ab.3.0.0i7i30k1l10.9062.9062.0.11810.1.1.0.0.0.0.205.205.2-1.1.0....0...1c.1.64.psy-ab..0.1.205....0.R-r6_9AWgnA")
soup = BeautifulSoup(page.content, "html.parser")

wind = soup.find_all("span", class_="wob_t")

for i, e in enumerate(wind):
    print(i, e.get_text())

我在这里做错了什么?

【问题讨论】:

  • 如果布局更改,您的应用程序将中断。考虑改用天气 API。
  • 我同意 alexander.. 但只是为了好玩,为“e”类的 div 做一个 find_all。您将到达风跨度所在的div

标签: python python-3.x beautifulsoup python-requests


【解决方案1】:

我看到您正在查看的所需 div 内容是由一些 javascript 代码生成的。即:当您点击页面上显示的“Wind”按钮时,javascript 会修改 HTML 并生成 7 天的 wind div。

使用给定 URL 生成的汤,我看到只有一个风速 div 条目。这是页面上显示的内容。

In [7]: soup.findAll("span", text = re.compile("km/h"))
Out[7]: [<span class="wob_t" style="display:inline">16 km/h</span>]

因此,使用请求模块来抓取这些基于某些 javascript 修改来更新 HTML 的页面并不是一个好主意。我建议您访问这些类型的页面,您应该使用python-selenium

【讨论】:

  • 好的,谢谢,我原以为硒可能超出我的技能水平,但我会试一试。我可以在源代码中看到 7 天预报的所有风数据: 13 km/h 然后这被 javascript 修改了吗?感谢您的帮助
猜你喜欢
  • 2018-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多