BeautifulSoup 异常中间循环抓取 HTML 文件
BeautifulSoup Exception mid loop scraping HTML file
我正在尝试为几个变量抓取 HTML 文件的本地文件夹,但在循环进行到一半时出现异常。例外是 AttributeError: 'NoneType' object has no attribute 'contents
。它实际上不是 .contents
我查看了它挂起的文件,它的结构与其他文件完全相同。如果你删除 .contents
那么你只是引发相同的异常但是使用 find()
函数。有人知道为什么会这样吗?同样,许多文件处理都没有问题。我的代码如下:
df_list = []
folder = 'rt_html'
for movie_html in os.listdir(folder):
with open(os.path.join(folder, movie_html)) as file:
soup = BeautifulSoup(file)
title = soup.find('title').contents[0][:-len(' - Rotten Tomatoes')]
audience_score = soup.find('div', class_ = 'audience-score meter').find('span').contents[0][:-1]
num_audience_ratings = soup.find('div', class_ = 'audience-info hidden-xs superPageFontColor')
num_audience_ratings = num_audience_ratings.find_all('div') [1].contents[2].strip().replace(',', '')
# print(num_audience_ratings)
# break
df_list.append({'title': title,
'audience_score': int(audience_score),
'number_of_audience_ratings': int(num_audience_ratings)})
df = pd.DataFrame(df_list, columns = ['title', 'audience_score', 'number_of_audience_ratings'])
我猜有些文件没有您要查找的属性。
例如
audience_score = soup.find('div', class_ = 'audience-score meter').find('span').contents[0][:-1]
如果没有 div
与 class audience-score meter
则 soup.find('div', class_ = 'audience-score meter')
将 return None
。任何后续的 find
或 contents
都会导致 AttributeError
一个解决方案是 try-except this 并将值设置为空字符串。
try:
audience_score = soup.find('div', class_ = 'audience-score meter').find('span').contents[0][:-1]
except AttributeError:
audience_score=""
对 title
和 num_audience_ratings
(两项作业)执行相同的操作
我正在尝试为几个变量抓取 HTML 文件的本地文件夹,但在循环进行到一半时出现异常。例外是 AttributeError: 'NoneType' object has no attribute 'contents
。它实际上不是 .contents
我查看了它挂起的文件,它的结构与其他文件完全相同。如果你删除 .contents
那么你只是引发相同的异常但是使用 find()
函数。有人知道为什么会这样吗?同样,许多文件处理都没有问题。我的代码如下:
df_list = []
folder = 'rt_html'
for movie_html in os.listdir(folder):
with open(os.path.join(folder, movie_html)) as file:
soup = BeautifulSoup(file)
title = soup.find('title').contents[0][:-len(' - Rotten Tomatoes')]
audience_score = soup.find('div', class_ = 'audience-score meter').find('span').contents[0][:-1]
num_audience_ratings = soup.find('div', class_ = 'audience-info hidden-xs superPageFontColor')
num_audience_ratings = num_audience_ratings.find_all('div') [1].contents[2].strip().replace(',', '')
# print(num_audience_ratings)
# break
df_list.append({'title': title,
'audience_score': int(audience_score),
'number_of_audience_ratings': int(num_audience_ratings)})
df = pd.DataFrame(df_list, columns = ['title', 'audience_score', 'number_of_audience_ratings'])
我猜有些文件没有您要查找的属性。
例如
audience_score = soup.find('div', class_ = 'audience-score meter').find('span').contents[0][:-1]
如果没有 div
与 class audience-score meter
则 soup.find('div', class_ = 'audience-score meter')
将 return None
。任何后续的 find
或 contents
都会导致 AttributeError
一个解决方案是 try-except this 并将值设置为空字符串。
try:
audience_score = soup.find('div', class_ = 'audience-score meter').find('span').contents[0][:-1]
except AttributeError:
audience_score=""
对 title
和 num_audience_ratings
(两项作业)执行相同的操作