テーブルから情報を取得しようとしています。しかし何らかの理由で私はできません。私はコードに何が欠けているか分かりません。別のテーブルをフェッチしている間は、同じコードが動作します(変更はほとんどありません)。Webスクレイピング(テーブルを取得中の問題)
ここに私のコードです。 url
からHTMLテーブルのDataframes
の関数の戻りlist
-
import urllib.request
from bs4 import BeautifulSoup
import pandas as pd
htmlfile = urllib.request.urlopen("https://en.wikipedia.org/wiki/Demographics_of_Finland")
htmltext = htmlfile.read()
soup = BeautifulSoup(htmltext)
all_tables=soup.find_all('table')
right_table=soup.find('table', class_='wikitable')
right_table
#Generate lists
A=[]
B=[]
C=[]
D=[]
E=[]
F=[]
G=[]
H=[]
I=[]
for row in right_table.findAll("tr"):
cells = row.findAll('td')
states=row.findAll('th') #To store second column data
if len(cells)==8: #Only extract table body not heading
A.append(cells[0].find(text=True))
B.append(states[0].find(text=True))
C.append(cells[1].find(text=True))
D.append(cells[2].find(text=True))
E.append(cells[3].find(text=True))
F.append(cells[4].find(text=True))
G.append(cells[5].find(text=True))
H.append(cells[6].find(text=True))
I.append(cells[7].find(text=True))
#import pandas to convert list to data frame
df=pd.DataFrame(A,columns=['Number'])
df['Average´_population_(x 1000)']=B
df['Live_births']=C
df['Deaths']=D
df['Natural_change']=E
df['Crude_birth_rate_(per 1000)']=F
df['>Crude_death_rate_(per_1000)']=G
df['>Natural_change_(per 1000)']=H
df['>Total_fertility_rate']=I
df
? – Boud