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 metersoup.find('div', class_ = 'audience-score meter') 将 return None 。任何后续的 findcontents 都会导致 AttributeError

一个解决方案是 try-except this 并将值设置为空字符串。

try:    
    audience_score = soup.find('div', class_ = 'audience-score meter').find('span').contents[0][:-1]
except AttributeError:
    audience_score=""  

titlenum_audience_ratings(两项作业)执行相同的操作