2015-11-18 4 views
0

Я очищаю результаты поиска с сайта, где каждый результат содержится в a и имеет ряд связанных с ним данных. Однако некоторые из этих значений данных отсутствуют, и когда они есть, объект «NoneType» ошибки не имеет атрибута «текст».Обработка ошибок BeautifulSoup при поиске возвращает NoneType

Я поставил/исключить блок. В настоящее время весь результат поиска пропускается, когда отсутствует одно из значений. Что я могу сделать, чтобы заменить отсутствующие значения на «", или пробел в файле xls, который я сохраняю?

Мой код ниже:

divs = soup.find_all("div", class_="result-item standard") + soup.find_all("div", class_="result-item standard basic-ad")  
for div in divs: 
    try: 
     #item_title = " ".join(div.h2.a.text.split()) 
     item = div.h2.a.text.split() 
     item_year = item[0] 
     item_make = item[1] 

     item_model = "" 
     for i in range (2,len(item)): 
      item_model = item_model + item[i] + " " 

     item_eng = div.find("li", "item-engine").text 
     item_trans = div.find("li", "item-transmission").text 
     item_body = div.find("li", "item-body").text 
     item_odostr = div.find("li", "item-odometer").text 
     item_odo = ''.join(c for c in item_odostr if c.isdigit()) 
     item_pricestr = " ".join(div.find("div", "primary-price").text.split()) 
     item_price = ''.join(c for c in item_pricestr if c.isdigit()) 
     item_adtype = div.find("div", "ad-type").span.text 
     #item_distance = div.find("a", "distance-from-me-link").text 
     item_loc = div.find("div", "call-to-action").p.text 
     item_row = (str(x),item_year,item_make,item_model,item_eng,item_trans,item_body,item_odo,item_price,item_adtype,item_loc) 
     print ",".join(item_row) 
     print(" ") 

     for i in range(len(item_row)): 
      ws.write(x,i,item_row[i]) 

     if x % 500 == 0 : 
      wb.save("data.xls") 


    except AttributeError as e: 
     with open("error"+str(x)+".txt", "w+") as error_file: 
      error_file.write(div.text.encode("utf-8"))  
+0

Помещенный 'попробовать except' блок для каждого' xxx.find() ххх 'заявление! –

ответ

1

, например:

item_eng = div.find("li", "item-engine").text if div.find("li", "item-engine") else '' 

или:.

item_eng = div.find("li", "item-engine").text if len(div.find_all("li", "item-engine"))!=0 else '' 
Смежные вопросы