美丽的汤 - 可变数量的子标签

时间:2014-10-01 22:53:14

标签: python beautifulsoup

我已经设置了以下函数来使用BeautifulSoup从页面中提取数据。哪个工作正常,除了在某些情况下,span标签(带有一个类元素)在我传递给函数的next_tag属性下面,所以当我调用{{ 1}}我在树下没有达到我需要的真实内容。

这是我正在抓的页面,失败的元素开始“感兴趣的表达”。

https://www.londontenders.org/procontract/supplier.nsf/frm_opportunity?openForm&opp_id=OPP-HIS-DNWC-8LBMQ8&contract_id=CONTRACT-DNWC-8LBM3B&org_id=ORG-DNWB-74MCW7&from=%20eoi_start

我尝试过.string而不是内容[0],但它似乎不适用于contents[0]

findNext

1 个答案:

答案 0 :(得分:0)

我想出了一个令人震惊的黑客来让它工作,任何关于如何以更有效的方式工作树的建议将非常感激。我添加了另一个处理此数据类型的函数,并添加了if语句来处理len()超过1的标记。我用两个潜在标记调用该函数,并过滤根据标记的len计数向下命令,如下所示:

def get_estimates (tender_soup, tag, text, next_tag, alt_tag):
if tender_soup.find(tag,text=text) == None:
    item_name = ''
    return item_name
else:
    if len(tender_soup.find(tag,text=text).findNext(next_tag).contents) == 0:
        item_name = ''
        return item_name
    else:
        if len(tender_soup.find(tag,text=text).findNext(next_tag)) > 1:
            item_name = tender_soup.find(tag,text=text).findNext(alt_tag).contents[0]
        else:
            item_name = tender_soup.find(tag,text=text).findNext(next_tag).contents[0]

    item_name = item_name.encode('utf-8')        
    item_name = item_name.strip()
    return item_name
return item_name