Я пытаюсь собрать данные о погоде в Интернете для изучения основ анализа, столкнулся с некоторыми проблемами в структуре HTML на веб-сайте.
Я отладил информацию о вложенной структуре внутри html-страницы, на которой я могу показать первые данные, распечатав d["precip"]
, но я не знаю, почему итерация не может быть прочитана следующим циклом, опять же, итерация все еще здесь print(i)
может показать, что он работает нормально.
Результат первого цикла:
{'date': '19:30', 'hourly-date': 'Thu',
'hidden-cell-sm description': 'Mostly Cloudy',
'temp': '26°', 'feels': '30°', 'precip': '15%',
'humidity': '84%', 'wind': 'SSE 12 km/h '}
После первого цикла:
{'date': 'None', 'hourly-date': 'None',
'hidden-cell-sm description': 'None',
'temp': 'None', 'feels': 'None', 'precip': 'None',
'humidity': 'None', 'wind': 'None'}
HTML сторона:
Значение «10» и «%» - это то, что я хочу отменить, я сделал это на первой итерации, но я не знаю, почему она превращается в None для второй
<td class="precip" headers="precip" data-track-string="ls_hourly_ls_hourly_toggle" classname="precip">
<div><span class="icon icon-font iconset-weather-data icon-drop-1" classname="icon icon-font iconset-weather-data icon-drop-1"></span>
<span class="">
<span>
10
<span class="Percentage__percentSymbol__2Q_AR">
%
</span>
</span>
</span>
</div>
</td>
Коды Python
import requests
import pandas
from bs4 import BeautifulSoup
page = requests.get("https://weather.com/en-IN/weather/hourbyhour/l/0fcc6b573ec19677819071ea104e175b6dfc8f942f59554bc99d10c5cd0dbfe8")
content = page.content
soup = BeautifulSoup(content, "html.parser")
total = []
container = []
#all = soup.find("div", {"class": "locations-title hourly-page-title"}).find("h1").text
table = soup.find_all("table", {"class": "twc-table"})
for items in table:
for i in range(len(items.find_all("tr")) - 1):
d = {}
try:
d["date"] = items.find_all("span", {"class": "dsx-date"})[i].text
d["hourly-date"] = items.find_all("div", {"class": "hourly-date"})[i].text
d["hidden-cell-sm description"] = items.find_all("td", {"class": "hidden-cell-sm description"})[i].text
d["temp"] = items.find_all("td", {"class": "temp"})[i].text
d["feels"] = items.find_all("td", {"class": "feels"})[i].text
#issue starts from here
inclass = items.find_all("td", {"class": "precip"})[i]
realtext = inclass.find_all("div", "")[i]
d["precip"] = realtext.find_all("span", {"class": ""})[i].text
#issue end
d["humidity"] = items.find_all("td", {"class": "humidity"})[i].text
d["wind"] = items.find_all("td", {"class": "wind"})[i].text
except:
d["date"] = "None"
d["hourly-date"] = "None"
d["hidden-cell-sm description"] = "None"
d["temp"] = "None"
d["precip"] = "None"
d["feels"] = "None"
d["precip"] = "None"
d["humidity"] = "None"
d["wind"] = "None"
total.append(d)
df = pandas.DataFrame(total)
df = df.rename(index=str, columns={"date": "Date", "hourly-date": "weekdays", "hidden-cell-sm description": "Description"})
df = df.reindex(columns=['Date', 'weekdays', 'Description', 'temp', 'feels', 'percip', 'humidity', 'wind'])
Я ожидал удалить все данные, но, как показано выше, пропасть отсутствует, но другие все еще здесь.
Для получения дополнительной информации, вот результаты
Date weekdays Description temp feels percip humidity wind
0 19:30 Thu Mostly Cloudy 26° 30° NaN 84% SSE 12 km/h
1 20:00 Thu Mostly Cloudy 26° 30° NaN 86% SSE 11 km/h
2 21:00 Thu Mostly Cloudy 26° 30° NaN 86% SSE 12 km/h
3 22:00 Thu Mostly Cloudy 26° 29° NaN 86% SSE 12 km/h
4 23:00 Thu Cloudy 26° 29° NaN 87% SSE 12 km/h
5 00:00 Fri Cloudy 26° 29° NaN 87% S 12 km/h
6 01:00 Fri Cloudy 26° 26° NaN 88% S 12 km/h
7 02:00 Fri Cloudy 26° 26° NaN 87% S 12 km/h
8 03:00 Fri Cloudy 29° 35° NaN 87% S 12 km/h
9 04:00 Fri Mostly Cloudy 29° 35° NaN 87% S 12 km/h
10 05:00 Fri Mostly Cloudy 28° 35° NaN 87% SSW 11 km/h
11 06:00 Fri Mostly Cloudy 28° 34° NaN 88% SSW 11 km/h
12 07:00 Fri Mostly Cloudy 29° 35° NaN 87% SSW 10 km/h
13 08:00 Fri Mostly Cloudy 29° 36° NaN 84% SSW 12 km/h
14 09:00 Fri Mostly Cloudy 29° 37° NaN 82% SSW 13 km/h
15 10:00 Fri Partly Cloudy 30° 37° NaN 81% SSW 14 km/h
Новичок здесь, я хочу узнать и, пожалуйста, скажите мне, как можно улучшить мою структуру кода. Большое спасибо