我在每个页面上都需要很多元素,但很多页面都没有我需要的所有项目,因此我最终必须将每个项目都包装好
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
答案 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