我正在尝试使用 Beautiful Soup 从网页中提取一些值(这里不是很聪明..),这些值是来自 Weatherbug 预报的每小时值。在 Chrome 开发者模式下,我可以看到这些值嵌套在div
类中,如下面的片段所示:
在 Python 中,我可以尝试模仿 Web 浏览器并找到这些值:
import requests
import bs4 as BeautifulSoup
import pandas as pd
from bs4 import BeautifulSoup
url = 'https://www.weatherbug.com/weather-forecast/hourly/san-francisco-ca-94103'
header = {
"User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.75 Safari/537.36",
"X-Requested-With": "XMLHttpRequest"
}
page = requests.get(url, headers=header)
soup = BeautifulSoup(page.text, 'html.parser')
通过下面的代码,我可以找到 12 个这样的hour-card_mobile_conddiv 类,这似乎是正确的,因为在搜索每小时预测时,我可以看到未来数据的 12 小时/变量。我不确定为什么我要选择移动设备方法来查看...(?)
temp_containers = soup.find_all('div', class_ = 'hour-card__mobile__cond')
print(type(temp_containers))
print(len(temp_containers))
输出:
<class 'bs4.element.ResultSet'>
12
如果我尝试编写一些代码来循环遍历所有这些 div 类以进一步深入,我会在下面做一些不正确的事情。我可以返回 12 个空列表。有人能给我一些可以改进的提示吗?最终,我希望将所有 12 个未来每小时预测值放入 pandas 数据框中。
for div in temp_containers:
a = div.find_all('div', class_ = 'temp ng-binding')
print(a)
编辑,基于 pandas 数据框答案的完整代码
import requests
from bs4 import BeautifulSoup
import pandas as pd
r = requests.get(
"https://www.weatherbug.com/weather-forecast/hourly/san-francisco-ca-94103")
soup = BeautifulSoup(r.text, 'html.parser')
stuff = []
for item in soup.select("div.hour-card__mobile__cond"):
item = int(item.contents[1].get_text(strip=True)[:-1])
print(item)
stuff.append(item)
df = pd.DataFrame(stuff)
df.columns = ['temp']
梦里花落0921
千万里不及你
相关分类