2012-07-15 34 views
0

舉例來說,我有一個像這樣的鏈接列表:異常處理當輸入連接不具備適當的形式

linklists = ['www.right1.com', www.right2.com', 'www.wrong.com', 'www.right3.com'] 

每個RIGHT1,RIGHT2和right3 HTML的形式是:

<html> 
<p> 
hi 
</p> 
<strong> 
hello 
</strong> 
</html> 

和www.wrong.com HTML的形式是(實際HTML是複雜得多):

<html> 
<p> 
hi 
</p> 
</html> 

和我使用像一個代碼這樣的:

from BeautifulSoup import BeautifulSoup 
stronglist=[] 
for httplink in linklists: 
    url = httplink 
    page = urllib2.urlopen(url) 
     html = page.read() 
     soup = BeautifulSoup(html) 
    findstrong = soup.findAll("strong") 
    findstrong = str(findstrong) 
    findstrong = re.sub(r'\[|\]|\s*<[^>]*>\s*', '', findstrong)  #remove tag 
    stronglist.append(findstrong) 

我想要做的是:

  1. 打通HTML鏈接從列表'linklists'

  2. 之間找到<strong>

  3. 將它們添加到列表'stronglist'數據

但問題是: 有一個錯誤的鏈接(www.wrong.com),沒有。 然後代碼說錯誤...

我想要的是一個異常處理(或別的東西),如果鏈接沒有'強'字段(它有錯誤),我想代碼添加由於無法從鏈接獲取數據,因此將字符串'null'添加到強列表中。

我一直在使用「如果解決了這個,但它是一個有點難受

有什麼建議?

+0

我不打算把你所有的'i's大寫,請你自己去做。 – 2012-07-15 07:40:27

回答

1

沒有必要使用異常處理。只需確定findAll方法何時返回一個空列表並處理。

from BeautifulSoup import BeautifulSoup 
strong_list=[] 
for url in link_list: 
    soup = BeautifulSoup(urllib2.urlopen(url).read()) 
    strong_tags = soup.findAll("strong") 
    if not strong_tags: 
     strong_list.append('null') 
     continue 
    for strong_tag in strong_tags: 
     strong_list.append(strong_tag.text) 
+0

謝謝!它真的幫助:) – 2012-07-15 09:53:56

+0

沒問題!接受答案並投票表決總是很好的。順便說一句,如果你確實想要捕捉異常,那麼你可能想告訴我們引發的異常是什麼,以及是什麼原因造成的。乾杯 – aychedee 2012-07-15 10:05:26