将维基百科 table 抓取到 pandas 数据框
Scraping wikipedia table to pandas data frame
我需要将维基百科 table 抓取到 pandas 数据框并创建三列:PostalCode、Borough 和 Neighborhoods。
https://en.wikipedia.org/wiki/List_of_postal_codes_of_Canada:_M
这是我使用过的代码:
import requests
website_url = requests.get('https://en.wikipedia.org/wiki/List_of_postal_codes_of_Canada:_M').text
from bs4 import BeautifulSoup
soup = BeautifulSoup(website_url,'lxml')
print(soup.prettify())
My_table = soup.find('table',{'class':'wikitable sortable'})
My_table
links = My_table.findAll('a')
links
Neighbourhood = [ ]
for link in links:
Neighbourhood.append(link.get('title'))
print (Neighbourhood)
import pandas as pd
df = pd.DataFrame([])
df['PostalCode', 'Borough', 'Neighborhood'] = Neighbourhood
df
它 returns 是:
(PostalCode, Borough, Neighborhood)
0 North York
1 Parkwoods
2 North York
3 Victoria Village
4 Downtown Toronto
5 Harbourfront (Toronto)
6 Downtown Toronto
7 Regent Park
8 North York
我不知道如何从维基百科中获取邮政编码和社区 table。
谢谢
提供错误信息。
通过查看它,首先您有 df['Neighbourhoods'] = Neighbourhoods,其中您的列表名称为 Neighborhoods.
你有两个小错误:
df = pd.dataframe()
应该是 df = pd.DataFrame([])
您第二次也将 Neighborhoods
拼错为 Neighbourhoods
。
您可能还需要将 soup = BeautifulSoup(website_url,'lxml')
更改为 soup = BeautifulSoup(website_url,'xml')
,但在不知道您的确切错误消息的情况下我们无法为您提供更多帮助。
而不是使用
df = pd.dataframe()
df['Neighbourhoods'] = Neighbourhoods
您可以使用
df['Neighbourhoods'] = pd.Series(Neighbourhoods)
这将解决您的错误并使用 pd.Series(listname) 类似地添加新列,或者您可以使用此代码
提供包含邮政编码、自治市镇和社区的列表列表
df = pd.Dataframe(list_of_lists)
您似乎只选择了其中一列:
links = My_table.findAll('a')
您应该寻找 'tr'
而不是 'a'
,因为它表示 table.
中的新行
然后您应该使用 for 循环来填充列表的列表,此代码应该有效:
v = []
for tr in values:
td = tr.find_all('td')
row = [i.text for i in td]
v.append(row)
df = pd.DataFrame.from_records(v)
pandas 一行代码即可完成:
df = pd.read_html('https://en.wikipedia.org/wiki/List_of_postal_codes_of_Canada:_M')[0]
我需要将维基百科 table 抓取到 pandas 数据框并创建三列:PostalCode、Borough 和 Neighborhoods。
https://en.wikipedia.org/wiki/List_of_postal_codes_of_Canada:_M
这是我使用过的代码:
import requests
website_url = requests.get('https://en.wikipedia.org/wiki/List_of_postal_codes_of_Canada:_M').text
from bs4 import BeautifulSoup
soup = BeautifulSoup(website_url,'lxml')
print(soup.prettify())
My_table = soup.find('table',{'class':'wikitable sortable'})
My_table
links = My_table.findAll('a')
links
Neighbourhood = [ ]
for link in links:
Neighbourhood.append(link.get('title'))
print (Neighbourhood)
import pandas as pd
df = pd.DataFrame([])
df['PostalCode', 'Borough', 'Neighborhood'] = Neighbourhood
df
它 returns 是:
(PostalCode, Borough, Neighborhood)
0 North York
1 Parkwoods
2 North York
3 Victoria Village
4 Downtown Toronto
5 Harbourfront (Toronto)
6 Downtown Toronto
7 Regent Park
8 North York
我不知道如何从维基百科中获取邮政编码和社区 table。
谢谢
提供错误信息。 通过查看它,首先您有 df['Neighbourhoods'] = Neighbourhoods,其中您的列表名称为 Neighborhoods.
你有两个小错误:
df = pd.dataframe()
应该是 df = pd.DataFrame([])
您第二次也将 Neighborhoods
拼错为 Neighbourhoods
。
您可能还需要将 soup = BeautifulSoup(website_url,'lxml')
更改为 soup = BeautifulSoup(website_url,'xml')
,但在不知道您的确切错误消息的情况下我们无法为您提供更多帮助。
而不是使用
df = pd.dataframe()
df['Neighbourhoods'] = Neighbourhoods
您可以使用
df['Neighbourhoods'] = pd.Series(Neighbourhoods)
这将解决您的错误并使用 pd.Series(listname) 类似地添加新列,或者您可以使用此代码
提供包含邮政编码、自治市镇和社区的列表列表df = pd.Dataframe(list_of_lists)
您似乎只选择了其中一列:
links = My_table.findAll('a')
您应该寻找 'tr'
而不是 'a'
,因为它表示 table.
然后您应该使用 for 循环来填充列表的列表,此代码应该有效:
v = []
for tr in values:
td = tr.find_all('td')
row = [i.text for i in td]
v.append(row)
df = pd.DataFrame.from_records(v)
pandas 一行代码即可完成:
df = pd.read_html('https://en.wikipedia.org/wiki/List_of_postal_codes_of_Canada:_M')[0]