这样做的一种方法是循环使用类 weather-entry 的所有 div,然后从每个 div 中提取文本,并在此过程中构建一个表结构。
例如:
import requests
from bs4 import BeautifulSoup
from tabulate import tabulate
page = requests.get('https://pogoda.interia.pl/archiwum-pogody-08-10-2019,cId,21295').content
weather_entries = BeautifulSoup(page, "html.parser").find_all("div", {"class": "weather-entry"})
def extract_text(element, class_name):
return element.find("div", class_=class_name).getText(strip=True)
div_classes = [
"entry-hour",
"entry-forecast",
"entry-wind",
"entry-precipitation",
"entry-humidity",
]
table = [[extract_text(e, c) for c in div_classes] for e in weather_entries]
columns = ["Time:", "Forecast", "Wind", "Precipitation", "Humidity"]
print(tabulate(table, headers=columns, tablefmt="pretty"))
这个输出:
+-------+---------------------------------------+----------------------+---------------+----------+
| Time: | Forecast | Wind | Precipitation | Humidity |
+-------+---------------------------------------+----------------------+---------------+----------+
| 000 | -2°COdczuwalna 0°CBezchmurnie | S4km/hMax 4 km/h | | 97% |
| 100 | -2°COdczuwalna -1°CBezchmurnie | S4km/hMax 7 km/h | Zachm:10% | 98% |
| 200 | -2°COdczuwalna -1°CBezchmurnie | SSW4km/hMax 8 km/h | | 98% |
| 300 | -2°COdczuwalna -1°CBezchmurnie | S4km/hMax 7 km/h | | 98% |
| 400 | -2°COdczuwalna 1°CBezchmurnie | N0km/hMax 7 km/h | | 93% |
| 500 | -2°COdczuwalna 1°CBezchmurnie | N0km/hMax 6 km/h | | 99% |
| 600 | -2°COdczuwalna -1°CZachmurzenie duże | SSW4km/hMax 6 km/h | Zachm:76% | 92% |
| 700 | -1°COdczuwalna 3°CZachmurzenie duże | N0km/hMax 7 km/h | Zachm:76% | 84% |
| 800 | -3°COdczuwalna -1°CPochmurno | SSW4km/hMax 8 km/h | Zachm:91% | 99% |
| 900 | 3°COdczuwalna 5°CPochmurno | SSW4km/hMax 8 km/h | Zachm:91% | 79% |
| 1000 | 5°COdczuwalna 4°CPochmurno | S11km/hMax 11 km/h | Zachm:91% | 71% |
| 1100 | 6°COdczuwalna 5°CPochmurno | SSW11km/hMax 20 km/h | Zachm:100% | 65% |
| 1200 | 9°COdczuwalna 7°CPochmurno | S15km/hMax 25 km/h | Zachm:100% | 66% |
| 1300 | 10°COdczuwalna 8°CPrzelotne opady | S15km/hMax 25 km/h | Zachm:100% | 60% |
| 1400 | 11°COdczuwalna 8°CPochmurno | S18km/hMax 24 km/h | Zachm:100% | 55% |
| 1500 | 10°COdczuwalna 6°CPochmurno | S22km/hMax 27 km/h | Zachm:91% | 57% |
| 1600 | 10°COdczuwalna 6°CPochmurno | S22km/hMax 31 km/h | Zachm:91% | 60% |
| 1700 | 12°COdczuwalna 8°CPrzelotne opady | S18km/hMax 32 km/h | Zachm:100% | 53% |
| 1800 | 9°COdczuwalna 4°CCzęściowo słonecznie | S18km/hMax 33 km/h | Zachm:50% | 66% |
| 1900 | 8°COdczuwalna 4°CPochmurno | S15km/hMax 31 km/h | Zachm:100% | 82% |
| 2000 | 8°COdczuwalna 4°CPochmurno | S18km/hMax 22 km/h | Zachm:91% | 82% |
| 2100 | 9°COdczuwalna 5°CPrzelotne opady | SSW18km/hMax 22 km/h | Zachm:100% | 78% |
| 2200 | 8°COdczuwalna 4°CPochmurno | SSW15km/hMax 28 km/h | Zachm:100% | 80% |
| 2300 | 8°COdczuwalna 5°CPrzelotne opady | SSW11km/hMax 25 km/h | Zachm:91% | 81% |
+-------+---------------------------------------+----------------------+---------------+----------+
显然,您需要对文本值进行一些解析,但这应该可以帮助您入门。