https:/www.worldometers.infocoronavirus#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和数据时,它说我有13列通过,数据有2990列。任何指导将是感激的。
你已经 "扁平化 "了表格--创建了一个所有的列表。<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)