Скрести таблицы из Википедии, используя python? - PullRequest
1 голос
/ 06 апреля 2020

Я пытаюсь очистить данные таблицы с этой страницы Википедии: https://en.wikipedia.org/wiki/2020_coronavirus_pandemic_in_Nepal Я пытался использовать синтаксис pandas pd.read_ html, но это не так работать за столом, который я пытаюсь очистить (подтвержденные случаи COVID-19 в Непале по районам).

Я пытался использовать Beautifulsoup и pandas для очистки данных, но это не работает

url = 'https://en.wikipedia.org/wiki/2020_coronavirus_pandemic_in_Nepal'
r = requests.get(url)
soup = BeautifulSoup(r.text,'html.parser')
table = soup.find('table', {'class': 'wikitable'})
dfs=pd.read_html(table)
dfs[0]

1 Ответ

1 голос
/ 06 апреля 2020
import pandas as pd
import requests
from bs4 import BeautifulSoup

url = 'https://en.wikipedia.org/wiki/2020_coronavirus_pandemic_in_Nepal'
# dfs = pd.read_html("https://en.wikipedia.org/wiki/2020_coronavirus_pandemic_in_Nepal", flavor="lxml")
r = requests.get(url)
soup = BeautifulSoup(r.text, 'html.parser')
table = soup.find('table', {'class': 'wikitable'})
dfs = pd.read_html(str(table).replace("2;", "2"))
print(dfs[0])

Это работает, вам нужно преобразовать таблицу в строку для read_html для правильной работы.

По некоторым причинам атрибуты rowspan и colspan отображаются как "2;" и я не могу найти хороший способ исправить это - pd.read_html() это не нравится, поэтому я просто использую .replace().

Теоретически это должно выполнять sh то же самое, но короче и проще, но имеет ту же проблему с rowspan:

dfs = pd.read_html("https://en.wikipedia.org/wiki/2020_coronavirus_pandemic_in_Nepal", flavor="lxml")
print(dfs[0])  # whatever the index of the table is

Кажется, что это возможная ошибка с read_html (pandas версия 1.0.3).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...