Belle Soupe: 'ResultSet" objet n'a pas d'attribut "find_all'?
Je suis en train de gratter un simple tableau à l'aide de Magnifiques Soupe. Voici mon code:
import requests
from bs4 import BeautifulSoup
url = 'https://gist.githubusercontent.com/anonymous/c8eedd8bf41098a8940b/raw/c7e01a76d753f6e8700b54821e26ee5dde3199ab/gistfile1.txt'
r = requests.get(url)
soup = BeautifulSoup(r.text)
table = soup.find_all(class_='dataframe')
first_name = []
last_name = []
age = []
preTestScore = []
postTestScore = []
for row in table.find_all('tr'):
col = table.find_all('td')
column_1 = col[0].string.strip()
first_name.append(column_1)
column_2 = col[1].string.strip()
last_name.append(column_2)
column_3 = col[2].string.strip()
age.append(column_3)
column_4 = col[3].string.strip()
preTestScore.append(column_4)
column_5 = col[4].string.strip()
postTestScore.append(column_5)
columns = {'first_name': first_name, 'last_name': last_name, 'age': age, 'preTestScore': preTestScore, 'postTestScore': postTestScore}
df = pd.DataFrame(columns)
df
Cependant, chaque fois que je le lance, j'obtiens cette erreur:
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-116-a900c2872793> in <module>()
14 postTestScore = []
15
---> 16 for row in table.find_all('tr'):
17 col = table.find_all('td')
18
AttributeError: 'ResultSet' object has no attribute 'find_all'
J'ai lu une dizaine de StackOverflow questions au sujet de cette erreur, et je ne peux pas comprendre ce que je fais de mal.
Vous devez vous connecter pour publier un commentaire.
La
table
variable contient un tableau. Vous devez appelerfind_all
sur ses membres (même si vous savez que c'est un tableau avec un seul membre), pas sur l'ensemble de la chose.Cela vous donne un ensemble de résultats – c'est à dire tous les éléments qui correspondent à la classe. Vous pouvez soit effectuer une itération sur eux ou, si vous savez que vous avez seulement une
dataFrame
, vous pouvez utiliserfind
à la place. À partir de votre code, il semble que le dernier est ce que vous avez besoin, pour régler le problème immédiat:Cependant, ce n'est pas tout:
Vous voulez probablement pour itérer sur les
td
s dans la ligne ici, plutôt que de l'ensemble de la table. (Sinon, vous allez juste voir la première ligne de plus et plus.)Itérer sur la table et utiliser
rowfind_all('td')