有没有办法在使用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
你有没有想过写一个更广泛的错误处理块,比如这样:
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