Web Scraping 101:2.处理异常和高级HTML解析

Internet上可用的数据非常混乱且格式不正确。 当从Internet上刮取数据时,这可能会导致一个重大问题,因为由于HTML格式不正确,刮板可能会遇到无数错误。

让我们看看一次抓取页面时可能发生的错误–


urlopen()命令

此时, 可能会发生两件事

  1. 找不到服务器。URLError
  2. 在服务器上找不到该页面,或者在检索该页面时发生错误。HTTPError

可以使用“ urllib.error ”模块来处理这些情况,如下所示-

处理HTTPError和URLError

即使成功检索页面后,也会发生错误。

如果访问bs对象并查询不存在的标记,则bs对象将返回None对象。

如果您进一步尝试访问嵌套在不存在的标签(None对象)中的标签,则将返回AttributeError

因此, 我们需要检查 None 对象和 AttributeError

可以如下所示:

当使用Beautiful Soup抓取HTML时,这两个将成为最常用的功能。

bs.find(标签,属性,文本,关键字,recursive_function) —查找所需实体的第一个实例

bs.find_all(标记,属性,文本,关键字,recursive_function) —返回所需实体的所有实例

使用find() find_all() 功能,我们可以根据标签的名称和属性来查找标签。 使用这些方法,我们可以在HTML树中导航并找到所需的元素。

在BS4中,子代与其他子代之间有一个区别- 子代恰好是父代下的一个标签,子代可以位于父代下的树中的任何级别。

要仅查找子代后代,可以使用.children方法:

我们可以使用Descendants()方法以相同的方式查找后代。

为了找到同级兄弟(即与给定元素处于同一级别的元素),Beautiful Soup提供了next_sibling(s)previous_sibling(s)方法:

本文就是这样。 在下一篇文章中,我将介绍Scraping最重要的部分之一- 正则表达式和Lambda表达式 ,并且我们将研究一些用于从Internet抓取HTML基本抓取模型

和平了。