我知道这个问题已经问过无数次了…但我已经找了好几个小时了,还是找不到解决办法。我只是想在亚马逊上抓取一个页面,并将结果转换为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 = { ... }