繁体   English   中英

美丽的汤:“ ResultSet”对象没有属性“ find_all”吗?

[英]Beautiful Soup: 'ResultSet' object has no attribute 'find_all'?

我正在尝试使用Beautiful Soup刮擦一张简单的桌子。 这是我的代码:

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

但是,每当我运行它时,都会出现此错误:

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

我已经阅读了大约12个有关此错误的StackOverflow问题,但我无法弄清楚自己在做什么错。

table变量包含一个数组。 您需要在其成员上调用find_all (即使您知道它是一个只有一个成员的数组),而不是全部。

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

这为您提供了一个结果集–即与该类匹配的所有元素。 您可以遍历它们,或者,如果您知道只有一个dataFrame ,则可以使用find代替。 从您的代码看来,后者是解决当前问题所需要的:

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

但是,还不止这些:

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

您可能想要遍历此行中的td ,而不是整个表。 (否则,您将一遍又一遍地看到第一行。)

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

遍历表并使用rowfind_all('td')

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM