爬虫的时候很容易发生错误,为了避免因为某几个网页错误影响所有网页的爬取,在代码中加入错误检测机制是很有必要的
HTTPError
html = urlopen("http://www.pythonscraping.com/pages/page1.html")
运行以上代码主要会发生两种异常:
- 网页在服务器上不存在(或者获取页面的时候出现错误)
- 服务器不存在
这两种错误,urlopen都会抛出HTTPError异常。可以用以下方式处理:
try:
html = urlopen("http://www.pythonscraping.com/pages/page1.html")
except HTTPError as e:
print(e)
# 返回空值,中断程序,或者执行另一个方案
else:
# 程序继续。注意:如果你已经在上面异常捕捉那一段代码里返回或中断
# 那么就不需要使用else语句了,这段代码也不会执行
AttributeError
即使网页已经从服务器成功获取,如果网页上的内容并非完全是我们期望的那样, 仍然可能会出现异常。
每当你调用 BeautifulSoup 对象里的一个标签时,增加一个检查条件保证标签确实存在是很聪明的做法。如果你想要调用的标签不存,BeautifulSoup 就会返回 None 对象。不过,如果再调用这个 None 对象下面的子标签,就会发生 AttributeError 错误。
假设返回对象bsObj中没有h1这个标签ÿ