【问题标题】:Beautiful Soup can't find this htmlBeautiful Soup 找不到这个 html
【发布时间】:2019-09-13 23:18:47
【问题描述】:

Python3 - 美丽的汤 4

我正在尝试从网站解析天气图: https://www.wunderground.com/forecast/us/ny/new-york-city

但是当我抓取天气图 html 时,美丽的汤似乎在它周围抓取。

我是 Beautiful Soup 的新手。我认为它无法抓住这一点,因为它要么无法解析他们正在进行的标记事情,要么因为填充图表的 javascript 尚未加载或无法被 BS 解析(至少我的方式是使用它)。

就我的代码而言,它非常基础

import requests, bs4
url = 'https://www.wunderground.com/forecast/us/ny/new-york-city'
requrl = requests.get(url, headers={'user-agent': 'Mozilla/5.0'})
requrl.raise_for_status()
bs = bs4.BeautifulSoup(requrl.text, features="html.parser")
a = str(bs)
x = 'weather-graph'
print(a[a.find('x'):])
#Also tried a.find('weather-graph') which returns -1

我已经验证了每段代码在其他场景中都能正常工作。最后一行应该找到该字符串并打印出之后的所有内容。

我尝试在图表中和图表周围制作许多不同的 html 片段,但没有得到任何实质内容。

【问题讨论】:

  • 如果内容是通过页面 javascript 动态生成的,那么 requests/bs4 将看不到它。你必须使用像 selenium 这样的东西。
  • @JohnGordon 是对的。由于 www.wunderground.com 使用 Angular.js,您将需要使用 Selenium 从站点收集数据
  • 我强烈建议不要刮地。他们提供 API 时曾经很棒,但现在不再提供了。我建议您查看Dark Sky API。您每天会收到大约 1000 个免费请求/呼叫,超过此数量的每个请求是 0.0001 美元(非常便宜)。
  • 这些回复非常好。谢谢你们! @JohnGordon,我使用了 selenium,但仅用于自动化操作,而不是网络抓取。好主意。

标签: python python-3.x web-scraping beautifulsoup


【解决方案1】:

有一个您可以使用的 API。与页面相同。不知道密钥是否过期。您可能需要对输出进行一些排序,但您可以通过 datetime 字段进行排序

import requests
r = requests.get('https://api.weather.com/v1/geocode/40.765/-73.981/forecast/hourly/240hour.json?apiKey=6532d6454b8aa370768e63d6ba5a832e&units=e').json()
for i in r['forecasts']:
    print(i)

如果不确定,我会很乐意更新以向您展示如何构建数据框和订单。

【讨论】:

  • 哦,我直到现在才看到最后一句话。如果您愿意显示数据框和订单,将不胜感激!再次感谢您。
  • 我稍后再看看。
  • 没有忘记这一点
猜你喜欢
  • 2013-07-15
  • 2020-08-08
  • 2017-12-07
  • 1970-01-01
  • 2019-01-29
  • 1970-01-01
相关资源
最近更新 更多