不知道当某些盒子有标签时,如何在某些标签之间收集值。 (例如,带有“ a”标签的文本,没有)
我尝试了“ try-except”代码,它起作用了。 但是,当我对某些页面进行爬网时,它包含了许多不同的标签,因此我必须使用其他代码。这意味着,在购物中心的情况下,某些产品具有“评论数”,而另一些则没有。要么是“送货费”,要么是“折扣率”。 所以我尝试了count(),但没有发声。感谢您的帮助。
def get_info(item):
info = item.find("div",{"class":"info"})
price = info.find("span",{"class":"price"})
num_review = info.find("a",{"class":"review"})
delivery_fee = info.find("a",{"class":"fee"})
if num_review.count() = 0 :
result = {"price":price.text,
"review":"-",
"fee":delivery_fee.text}
return result
elif delivery_fee.count() = 0 :
result = {"price":price.text,
"review":"-",
"fee":"-"}
return result
else :
result = {"price":price.text,
"review":review.text,
"fee":delivery_fee.text}
return result
答案 0 :(得分:0)
尝试一下:
您缺少等号运算符
if len(num_review) == 0 :
result = {"price":price.text,
"review":"-",
"fee":delivery_fee.text}
return result
验证标签
if isinstance(num_review,Tag) and num_review in 'a':
print("do something")
添加脚本顶部:
from bs4.element import Tag
编辑:
def get_info(item):
info = item.find("div",{"class":"info"})
result = {'price':"",'review':"",'fee':""}
for tag in info.findChildren():
_class = tag.get('class')
if _class in 'price':
result['price'] = tag.text
elif _class in 'review':
result['review'] = tag.text
elif _class in 'fee':
result['fee'] = tag.text
return result