使用BeautifulSoup时,有何方法可以抑制/忽略特定类型的错误

时间:2011-01-31 21:04:13

标签: python screen-scraping beautifulsoup

我在每个页面上都需要很多元素,但很多页面都没有我需要的所有项目,因此我最终必须将每个项目都包装好

try:
    itemNeeded = soup.find(text="yada yada yada").next
except AttributeError:
    pass

这使我的代码充满了400% 有没有办法抽象出来,或至少减少眼睛?

编辑:我不仅要搜索字符串,还要做这样的事情:

navLinks = carSoup.find("span", "nav").findAll("a")
carDict['manufacturer'] = navLinks[1].next
carDict['model'] = navLinks[2].next

2 个答案:

答案 0 :(得分:1)

构建一个列表并遍历列表...使用一些模板...你只需要弄清楚如何以更小,更简单的方式遍历整个页面。

text_list = ['items', 'to', 'search', 'for']
pre_find = {'items': (('span', 'nav'), 'a', ('manufacturer', 'model'))}
carDict = {}
for text in text_list:
    try:
        if pre_find.has_key(text):
            x = 1
            navLinks = carSoup.find(pre_find[text][0]).findAll(pre_find[text][1])
            for item in pre_find[text][2]:
                carDict[item] = navLinks[x].next
                x += 1
        else:
            carDict[text] = soup.find(text=text).next
    except AttributeError:
        pass

答案 1 :(得分:0)

您是否考虑过编写一个更具全局性的尝试,除了阻止,如:

try:
    itemNeeded = soup.find(text="yada yada yada").next
    nextItem = soup.find(text = "blah blah blah").next
except AttributeError:
    pass