2014-06-08 24 views
19

Güzel Çorba'yı kullanarak basit bir tablo çizmeye çalışıyorum. Bunu her çalıştırdığınızda, bu hatayı alıyorum, ancakGüzel Çorba: 'ResultSet' nesnesinin 'find_all' özelliği yok mu?

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 

: Bu hata hakkında bir düzine StackOverflow soruları etrafında okudum

--------------------------------------------------------------------------- 
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' 

ve ben ben ne olduğunu anlamaya olamaz İşte benim kodudur yanlış yapıyorum. Bu, bir sonuç kümesi verir

+0

kullanmak/Kendileri bulmak için bu kodu çalıştırabilirsiniz ... –

+0

Üzgünüz. Gönderiyi düzenledim – Anton

cevap

9
table = soup.find_all(class_='dataframe') 

- sınıfını maç yani tüm unsurları. Bunların üzerinde yineleme yapabilir veya yalnızca bir tane dataFrame olduğunu biliyorsanız, bunun yerine find'u kullanabilirsiniz. Kodunuzdaki itibaren ikincisi Eğer acil sorunla başa çıkmak için, ihtiyacımız olan görünüyor:

for row in table.find_all('tr'): 
    col = table.find_all('td') 

Muhtemelen içinde td s üzerinde yineleme istiyorum: Ancak

table = soup.find(class_='dataframe') 

, hepsi bu değil Buradaki tablo, bütün masayı değil. (Aksi takdirde sadece tekrar tekrar ilk satırı göreceksiniz.) table değişken bir dizi içerir

for row in table.find_all('tr'): 
    for col in row.find_all('td'): 
26

. Üyeleri üzerinde find_all numaralı telefonu aramanız gerekecek (bunun sadece bir üyesi olan bir dizi olduğunu biliyor olsanız bile). Eğer * Tam Traceback vermiş olması gerektiğini, mevcut ve herkes istediği .find_all`s `çok şey var gibi * yararlı olurdu

>>> type(table) 
<class 'bs4.element.ResultSet'> 
>>> type(table[0]) 
<class 'bs4.element.Tag'> 
>>> len(table[0].find_all('tr')) 
6 
>>> 
1

masanın üzerinde Bıkmadan ve rowfind_all('td')

for row in table: 
     col = row.find_all('td') 
İlgili konular