Web scraping 用Python刮维基百科,漂亮的汤

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

我对维基表格有一些挑战,希望以前做过的人能给我一些建议。从wikitable mw可折叠表中,我需要将数据放入数据框中。(代码不起作用)。我不知道该怎么做。在最初尝试提取数据时,它显示ValueError:值的长度与索引的长度不匹配。谢谢你的帮助

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的好方法。