代码之家  ›  专栏  ›  技术社区  ›  Chris Macaluso

BeautifulSoup异常中循环刮取HTML文件

  •  1
  • Chris Macaluso  · 技术社区  · 7 年前

    我试图用一个本地文件夹中的HTML文件替换几个变量,但在循环的中途我遇到了一个异常。例外是 AttributeError: 'NoneType' object has no attribute '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'])
    
    1 回复  |  直到 7 年前
        1
  •  3
  •   Bitto    7 年前

    我的猜测是,有些文件没有您要查找的属性。

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

    如果没有 div 和全班同学一起 audience-score meter 然后 soup.find('div', class_ = 'audience-score meter') 会回来的 None . 任何后续的 find 或 contents 这将导致 AttributeError

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

    对我来说也是如此 title 和 num_audience_ratings