如果还有其他没有标签的盒子,如何抓取某些标签

时间:2019-05-14 10:58:05

标签: python web-crawler

不知道当某些盒子有标签时,如何在某些标签之间收集值。 (例如,带有“ 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

1 个答案:

答案 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