Python 使用beautifulSoup4解析html表时出现属性错误

Python 使用beautifulSoup4解析html表时出现属性错误,python,web-scraping,beautifulsoup,html-parsing,Python,Web Scraping,Beautifulsoup,Html Parsing,我试图使用BeautifulSoup4从表格中获取排名、国家名称、人口、密度和表面。当我使用table.find_all('tr')时,它返回以下错误: AttributeError:“ResultSet”对象没有“find_all”属性 我想问题的根源在于: table = soup.find_all("table",attrs={"class":"wikitable sortable"}) 它返回一个元素的列表,其中包含tbody,我不能在它上面循环 import requests f

我试图使用
BeautifulSoup4
从表格中获取排名、国家名称、人口、密度和表面。当我使用table.find_all('tr')时,它返回以下错误:

AttributeError:“ResultSet”对象没有“find_all”属性

我想问题的根源在于:

table = soup.find_all("table",attrs={"class":"wikitable sortable"}) 
它返回一个元素的列表,其中包含
tbody
,我不能在它上面循环

import requests 
from bs4 import BeautifulSoup
import re

r = requests.get("https://fr.wikipedia.org/wiki/Liste_des_pays_par_densit%C3%A9_de_population")

soup = BeautifulSoup(r.content, "html.parser")
table = soup.find_all("table",attrs={"class":"wikitable sortable"})
for i in table.find_all('tr'):

    tds=i.find_all('td', string=True)
    tds_string = str(tds)
    specifications = str(re.sub("<.+?>"," ",tds_string))    
    print(specifications)
导入请求
从bs4导入BeautifulSoup
进口稀土
r=请求。获取(“https://fr.wikipedia.org/wiki/Liste_des_pays_par_densit%C3%A9_de_population")
soup=BeautifulSoup(r.content,“html.parser”)
table=soup.find_all(“table”,attrs={“class”:“wikitable sortable”})
对于表中的i.find_all('tr'):
tds=i.find_all('td',string=True)
tds_string=str(tds)
规格=str(re.sub(“,”,tds_字符串))
打印(规格)
下表格式如下:

<table class="wikitable sortable" style="text-align:right">
<tbody><tr>
<th scope="col">Rang
</th>
<th scope="col">Pays <i>(ou territoire)</i>
</th>
<th scope="col">Densité (<abbr class="abbr" title="habitants">hab.</abbr>/km<sup>2</sup>)
</th>
<th scope="col">Population (<abbr class="abbr" title="habitants">hab.</abbr>)
</th>
<th scope="col">Superficie (km<sup>2</sup>)
</th></tr>
<tr>
<td>1</td>
<td align="left"><span class="datasortkey" data-sort-value="Monaco"><span class="flagicon"><a class="image" href="/wiki/Fichier:Flag_of_Monaco.svg" title="Drapeau de Monaco"><img alt="Drapeau de Monaco" class="noviewer thumbborder" data-file-height="600" data-file-width="750" decoding="async" height="16" src="//upload.wikimedia.org/wikipedia/commons/thumb/e/ea/Flag_of_Monaco.svg/20px-Flag_of_Monaco.svg.png" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/e/ea/Flag_of_Monaco.svg/30px-Flag_of_Monaco.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/e/ea/Flag_of_Monaco.svg/40px-Flag_of_Monaco.svg.png 2x" width="20"/></a> </span><a href="/wiki/Monaco" title="Monaco">Monaco</a></span></td>
<td>18 866</td>
<td>38 109</td>
<td>2,02
</td></tr>
<tr>
<td>2</td>
<td align="left"><span class="datasortkey" data-sort-value="Singapour"><span class="flagicon"><a class="image" href="/wiki/Fichier:Flag_of_Singapore.svg" title="Drapeau de Singapour"><img alt="Drapeau de Singapour" class="noviewer thumbborder" data-file-height="2880" data-file-width="4320" decoding="async" height="13" src="//upload.wikimedia.org/wikipedia/commons/thumb/4/48/Flag_of_Singapore.svg/20px-Flag_of_Singapore.svg.png" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/4/48/Flag_of_Singapore.svg/30px-Flag_of_Singapore.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/4/48/Flag_of_Singapore.svg/40px-Flag_of_Singapore.svg.png 2x" width="20"/></a> </span><a href="/wiki/Singapour" title="Singapour">Singapour</a></span></td>
<td>7 829</td>
<td>5 423 148</td>
<td>692,7
</td></tr>
<tr>
.....

响
支付(其他地区)
密度(
18 866
38 109
2,02
2.
 
7 829
5 423 148
692,7
.....

find\u all
返回一个列表。您可能希望使用
find
返回一个表。或者使用该方法,或者通过调用
find\u all('tr')来迭代列表
在每个表上。

find_all
返回一个列表。您可能想使用
find
返回一个表。或者,在每个表上重复调用
find_all('tr')

<

import pandas as pd
table = pd.read_html('https://fr.wikipedia.org/wiki/Liste_des_pays_par_densit%C3%A9_de_population')
# print(table)
table[0].to_csv(r'C:\Users\User\Desktop\Data.csv', sep=',', encoding='utf-8-sig',index = False )

只有一张桌子,所以请使用熊猫

import pandas as pd
table = pd.read_html('https://fr.wikipedia.org/wiki/Liste_des_pays_par_densit%C3%A9_de_population')
# print(table)
table[0].to_csv(r'C:\Users\User\Desktop\Data.csv', sep=',', encoding='utf-8-sig',index = False )

可能重复的可能重复的可能重复的谢谢你的回答。我可以得到表格,但是它不适合终端,我如何修复它?将其写入csv?查看我的编辑并让我知道。当然更改文件路径。这回答了你的问题吗?谢谢你的回答。我可以得到表格,但是它不适合终端l、 如何修复?将其写入csv?查看我的编辑并让我知道。当然要更改文件路径。这是否回答了您的问题?