Web scraping 用Python刮维基百科,漂亮的汤
我对维基表格有一些挑战,希望以前做过的人能给我一些建议。从wikitable mw可折叠表中,我需要将数据放入数据框中。(代码不起作用)。我不知道该怎么做。在最初尝试提取数据时,它显示ValueError:值的长度与索引的长度不匹配。谢谢你的帮助Web scraping 用Python刮维基百科,漂亮的汤,web-scraping,beautifulsoup,Web Scraping,Beautifulsoup,我对维基表格有一些挑战,希望以前做过的人能给我一些建议。从wikitable mw可折叠表中,我需要将数据放入数据框中。(代码不起作用)。我不知道该怎么做。在最初尝试提取数据时,它显示ValueError:值的长度与索引的长度不匹配。谢谢你的帮助 import urllib.request url = "https://en.wikipedia.org/wiki/2020_coronavirus_pandemic_in_South_Africa" page = urllib.request.ur
import urllib.request
url = "https://en.wikipedia.org/wiki/2020_coronavirus_pandemic_in_South_Africa"
page = urllib.request.urlopen(url)
from bs4 import BeautifulSoup
soup = BeautifulSoup(page, "lxml")
# use the 'find_all' function to bring back all instances of the 'table' tag in the HTML and store in 'all_tables' variable
all_tables=soup.find_all("table")
all_tables
right_table=soup.find('table', class_='wikitable mw-collapsible')
right_table
A=[]
B=[]
C=[]
D=[]
E=[]
F=[]
G=[]
H=[]
I=[]
J=[]
K=[]
L=[]
M=[]
N=[]
O=[]
P=[]
Q=[]
U=[]
for row in right_table.findAll('tr'):
cells=row.findAll('td')
if len(cells)==17:
A.append(cells[0].find(text=True))
B.append(cells[1].find(text=True))
C.append(cells[2].find(text=True))
D.append(cells[3].find(text=True))
E.append(cells[4].find(text=True))
F.append(cells[5].find(text=True))
G.append(cells[6].find(text=True))
H.append(cells[7].find(text=True))
I.append(cells[8].find(text=True))
J.append(cells[9].find(text=True))
K.append(cells[10].find(text=True))
L.append(cells[11].find(text=True))
M.append(cells[12].find(text=True))
N.append(cells[13].find(text=True))
P.append(cells[14].find(text=True))
Q.append(cells[15].find(text=True))
U.append(cells[16].find(text=True))
import pandas as pd
df=pd.DataFrame(A,columns=['DATE'])
df['EC']=B
df['FS']=C
df['GAU']=D
df['KJN']=F
df['LIM']=G
df['MPU']=H
df['NW']=I
df['NC']=J
df['WC']=K
df['NEW']=L
df['TOTAL']=M
df['NEW']=N
df['TOTAL']=O
df['REC']=P
df['TESTED']=Q
df['REF']=U
df
当pandas有
read\u html()
函数来精确实现数据帧时(实际上是在引擎盖下使用beautifulsoup),进入数据帧需要做大量的工作
.read\u html()
将返回数据帧列表(即html中的
标记)。只要拿出你想要的
import pandas as pd
url = "https://en.wikipedia.org/wiki/2020_coronavirus_pandemic_in_South_Africa"
dfs = pd.read_html(url)
df = dfs[3]
输出:
print (df.to_string())
Date EC FS GP KZN LP MP NW NC WC Confirmed Deaths Rec Tested Ref
Date EC FS GP KZN LP MP NW NC WC New Total New Total Rec Tested Ref
0 2020-03-04 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.0 NaN NaN NaN 181 [22]
1 2020-03-05 NaN NaN NaN 1.0 NaN NaN NaN NaN NaN 1.0 1.0 NaN NaN NaN NaN [2]
2 2020-03-06 NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.0 1.0 NaN NaN NaN NaN NaN
3 2020-03-07 NaN NaN 1.0 NaN NaN NaN NaN NaN NaN 1.0 2.0 NaN NaN NaN NaN [11]
4 2020-03-08 NaN NaN NaN 1.0 NaN NaN NaN NaN NaN 1.0 3.0 NaN NaN NaN NaN [23]
5 2020-03-09 NaN NaN NaN 4.0 NaN NaN NaN NaN NaN 4.0 7.0 NaN NaN NaN NaN [24]
6 2020-03-10 NaN NaN 2.0 1.0 NaN NaN NaN NaN NaN 3.0 10.0 NaN NaN NaN 239 [25]
7 2020-03-11 NaN NaN 2.0 NaN NaN NaN NaN NaN 1.0 3.0 13.0 NaN NaN NaN 645 [12][26]
8 2020-03-12 NaN 0.0 1.0 1.0 NaN 1.0 NaN NaN NaN 3.0 16.0 NaN NaN NaN 848 [27][28][29]
9 2020-03-13 NaN NaN 4.0 2.0 NaN NaN NaN NaN 2.0 8.0 24.0 NaN NaN NaN 924 [30][31]
10 2020-03-14 NaN NaN 7.0 1.0 NaN NaN NaN NaN 6.0 14.0 38.0 NaN NaN NaN 1017 [32][33]
11 2020-03-15 NaN NaN 7.0 1.0 NaN NaN NaN NaN 5.0 13.0 51.0 NaN NaN NaN 1476 [34][3][35]
12 2020-03-16 NaN NaN 7.0 NaN 1.0 1.0 NaN NaN 2.0 11.0 62.0 NaN NaN NaN 2405 [17][36]
13 2020-03-17 NaN NaN 14.0 4.0 NaN NaN NaN NaN 5.0 23.0 85.0 NaN NaN NaN 2911 [18][37]
14 2020-03-18 NaN NaN 16.0 3.0 NaN 2.0 NaN NaN 10.0 31.0 116.0 NaN NaN NaN 3070 [38][19][39]
15 2020-03-19 NaN NaN 15.0 3.0 NaN 1.0 NaN NaN 15.0 34.0 150.0 NaN NaN NaN 4832 [40][41][42]
16 2020-03-20 NaN 7.0 33.0 1.0 NaN NaN NaN NaN 11.0 52.0 202.0 NaN NaN 2 6438 [43][44]
17 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
18 Cases 0.0 7.0 109.0 24.0 1.0 5.0 0.0 0.0 56.0 NaN NaN NaN including local transmission including local transmission including local transmission including local transmission
你要找哪张桌子?@BhaveshBhana ya如果是标签,先试试熊猫。一旦我学会了熊猫用html来制作表格,它就改变了我的游戏规则。尽管如此,使用beautifulsoup解析表是学习如何使用beautifulsoup和html的好方法。