输入链接没有适当的表单时的异常处理

时间:2012-07-15 07:24:14

标签: python xml exception-handling beautifulsoup

例如,我有一个像这样的链接列表:

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. 从列表'linklists'

  2. 中获取html链接
  3. <strong>

  4. 之间查找数据
  5. 将它们添加到列表'stronglist'

  6. 但问题是: 有一个错误的链接(www.wrong.com)没有。 然后代码说错误......

    我想要的是异常处理(或其他),如果链接没有“强”字段(它有错误),我希望代码将字符串'null'添加到强列表,因为它可以从链接中获取数据。

    我一直在使用'如果要解决这个问题,但这对我来说有点困难

    有什么建议吗?

1 个答案:

答案 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)