Как я могу поместить таблицу html в python, если в таблице есть разные вкладки? - PullRequest
0 голосов
/ 05 мая 2020

https://www.worldometers.info/coronavirus/#countries - это веб-сайт, который я использую, и я пытаюсь получить таблицу с выбранной вкладкой «Все» для извлечения из html в мой блокнот jupyter. Проблема, с которой я столкнулся, заключается в том, что если я использую class = 'table', он сначала вытягивает все вкладки континентов, а затем всю таблицу, и это мешает тому, как мои данные извлекаются, когда я пытаюсь просмотреть строки.

import requests
import lxml.html as lh
import pandas as pd
import csv
import requests
from bs4 import BeautifulSoup
url = 'https://www.worldometers.info/coronavirus/#countries'
page = requests.get(url)
print(page.status_code) #Checking the http response status code. Should be 200
soup = BeautifulSoup(page.content, 'html.parser')
print(soup.prettify())
all_tables=soup.find_all("table")
right_table = soup.find('table',{'class':'table'})
col_headers = [th.getText() for th in right_table.findAll('th')]
data = [[td.getText() for td in right_table.findAll('td')] for tr in right_table()]

Когда я пытаюсь объединить col_headers и data, он говорит, что у меня передано 13 столбцов, а в данных было 2990 столбцов. Приветствуются любые рекомендации.

1 Ответ

0 голосов
/ 05 мая 2020

Вы «сплющили» таблицу - создали список всех <td> s. Что вам нужно сделать, так это создать вложенный список:

data = [ [ td.text for td in tr.find_all("td") ] for tr in right_table.find_all("tr")]

df = pd.DataFrame(data, columns=col_header)
print(df.shape) # (231, 13)
...