有没有办法在使用BeautifulSoup时抑制/忽略特定类型的错误

0 投票
2 回答
1293 浏览
提问于 2025-04-16 10:58

我在抓取每个页面时需要很多元素,但很多页面并没有我需要的所有项目,所以我最终不得不把每一个抓取的项目都包裹在

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

你有没有想过写一个更广泛的错误处理块,比如这样:

try:
    itemNeeded = soup.find(text="yada yada yada").next
    nextItem = soup.find(text = "blah blah blah").next
except AttributeError:
    pass
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

撰写回答