亚马逊网页抓取:属性错误:'NoneType'对象没有属性'text'



我知道这个问题已经问过无数次了…但我已经找了好几个小时了,还是找不到解决办法。我只是想在亚马逊上抓取一个页面,并将结果转换为csv。

applelist = []
apples = soup.find_all('div', {'class': 'sg-col-4-of-12 s-result-item s-asin sg-col-4-of-16 sg-col s-widget-spacing-small sg-col-4-of-20'})
for item in apples:
    apple = {
        'title': item.find('span', {'class':'a-size-base-plus a-color-base a-text-normal'}).text,
        'link': 'https://www.amazon.com' + item.find('a', {'class':'a-link-normal s-underline-textjknderline-link-text s-link-style a-text-normal'})['href'],
        'rating': item.find('i', {'class':'a-icon-alt'}).text,
        }
    applelist.append(apple)
    #print(applelist)
df = pd.DataFrame(applelist)
df.to_csv('file.csv')

我能够做到这一点,当我拿出"评级"线。但是当我添加"评级"时,它就出错了,因为不是每个项目都有评级。我试过搞乱try/except,但我认为我有麻烦,因为它是在for/in函数内。如果你能给点建议,不要让我觉得自己太蠢,我将不胜感激。

在访问属性之前试着测试它是否存在。

for item in apples:
    rating = item.find('i', {'class':'a-icon-alt'})
    
    if rating:
        rating = rating.text
    else:
        rating = 'some default value'
    apple = { ... }

最新更新