Я пытаюсь написать сценарий, который удаляет данные со страницы Википедии, содержащей несколько таблиц данных об ураганах
Здесь я импортирую пакет BeautifulSoup для анализа html
from bs4 import BeautifulSoup
import requests
import pandas as pd
html = requests.get("https://en.wikipedia.org/wiki/List_of_Category_4_Atlantic_hurricanes").text #grabing the html from wikipedia
soup = BeautifulSoup(html, 'html5lib') #creating a soup object that allows for searching via tags
Здесь я используюфункция soup.find_all
для выбора класса таблицы.Я ссылаюсь на 5-ю таблицу в квадратных скобках
table = soup.find_all('table', class_="wikitable")[5]
Здесь я обрезаю информацию строки заголовка, используя понимание списка
headers = [header.text.strip() for header in table.find_all('th',{'scope' :'col'})]
rows=[]
Здесь я перебираю строку таблицы и извлекаю данные таблицы идобавьте его в переменную строк
for row in table.find_all('tr'):
rows.append([val.text.encode('utf-8').rstrip() for val in row.find_all(['td', 'th'])])
data = pd.DataFrame.from_records(rows, columns=headers) #Creating a panads dataframe
data2 = data.drop(data.index[0]) #droping the first row as it is a dublicate of the column header
data2.head() #viewing the data frame
Выходные данные из фрейма данных не очень чистые, однако для полей данных, считываемых как "b'Hurricane Iris' " , "b'October\xc2\xa08\xe2\x80\x939'" , "b'948\xc2\xa0mbar (hPa; 27.99\xc2\xa0inHg)'". Does anyone have a solution that results in a data frame with cleaner data? Thanks!
Изображение заголовка фрейма данных