我想用漂亮的汤刮一张简单的桌子。这是我的代码:
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'
我已经阅读了关于这个错误的十几个StackOverflow问题,我不知道我做错了什么。
在表上迭代并使用
rowfind_all('td')
table
变量包含一个数组。您需要对其成员调用find_all
(即使您知道它是一个只有一个成员的数组),而不是对整个对象调用。这将为您提供一个结果集,即所有与类匹配的元素。您可以对它们进行迭代,或者,如果您知道只有一个
dataFrame
,则可以使用find
。从你的代码看来,你需要后者来处理眼前的问题:然而,这并不是全部:
您可能希望遍历此行中的
td
s,而不是整个表。(否则你只能一遍又一遍地看到第一排。)相关问题 更多 >
编程相关推荐