2012-07-15 4 views
0

를 적절한 형식을 가지고 있지 않을 때, 나는 이런 링크의 목록이 있습니다예외 처리 입력 링크가 예를 들어

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

각 한 Right, Right 2 및 right3의 HTML의 형태 것은 :

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

와 나는 코드 등을 사용하고 있습니다 :

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

및 www.wrong.com HTML의 형태는은 (실제 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. 'linklists'

  2. 'stronglist'을 나열 <strong>

  3. 추가 사이의 데이터를 찾을 수 목록에서 HTML 링크를 통해 얻을 수

그러나 문제는 다음과 같습니다. 잘못된 링크 (www.wrong.com)가 있습니다. 그러면 코드에 오류가 표시됩니다 ...

내가 원하는 것은 예외 처리 (또는 다른 것)가 링크에 '강한'필드 (오류 있음)가 없으면 코드에 strong에서 링크에서 데이터를 가져올 수 없으므로 'null'을 문자열에 추가합니다.

이 문제를 해결하는 경우 내가 '사용하고 있지만, 그것은 나

어떤 제안에 대한 조금 어렵다?

+0

나는 당신을 위해 당신의 모든 것을 투자하지 않을 것입니다. –

답변

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

감사합니다! 정말 도움이 :) –

+0

괜찮습니다! 답변을 수락하고 투표에 투표하는 것이 좋습니다. BTW, 예외를 잡으려면 예외를 발생시키려는 경우 어떤 예외가 발생했는지, 어떤 행이 원인인지 알려 주어야합니다. 건배 – aychedee