【发布时间】: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