special_price = div.find('span', attrs={'class' : 'subcategory-product-item__price_special'}).text
AttributeError: 'NoneType' object has no attribute 'text'
А что если div.find не находит эту строку в принципе(т.е. в div в котором проходит поиск её просто нет)?
Можно сделать, например так:
def safe_search(tag, attrs):
x = div.find('span', attrs={'class' : 'subcategory-product-item__price_special'})
if x is not None:
return x.text()
else:
return ''