2011-01-31 2 views
0

На каждой странице, которую я царапаю, есть много элементов, но на многих страницах нет всех элементов, которые мне нужны, поэтому мне приходится обертывать каждый и каждый пункт захватить вЛюбой способ подавить/игнорировать определенные типы ошибок при использовании BeautifulSoup

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

Это воздушный шар моего кода на 400%.
Есть ли способ отвлечь это или, по крайней мере, уменьшить бедро?

Edit: Я не только поиск строк, но делать такие вещи, как это так:

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

Не можете ли вы просто обернуть блок try-except в функцию, а затем вызвать функцию для каждого элемента? –

+0

@ robots.jpg: Я не только ищу строки, поэтому не думаю, что смогу сделать что-то подобное, я обновил вопрос, чтобы упомянуть об этом. – Milo

ответ

0

Рассматривали ли вы писать более глобальную попытку, за исключением блока, что-то вроде:

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

Каждый отдельный элемент, который мне нужен, может быть или не быть, и мне нужно все, что есть. – Milo

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 
+0

Я не только ищу строки, поэтому не думаю, что смогу сделать что-то подобное. Я обновил вопрос, чтобы упомянуть об этом. – Milo

+0

Обновлено, чтобы быть более комплексным решением. Надеюсь, вы сможете построить здесь. – samurailawngnome

Смежные вопросы