用漂亮的汤在Python中抓取 页:基础知识

在上一教程中,我向您展示了如何使用Requests模块使用Python访问 页 。 该教程涵盖了许多主题,例如发出GET / POST请求以及以编程方式下载诸如图像或PDF之类的内容。 该教程缺少的一件事是有关使用“请求”提取所需信息来刮取您访问的 页的指南。

在本教程中,您将学习Beautiful Soup ,这是一个从HTML文件提取数据的Python库。 本教程的重点是学习库的基础知识,下一个教程将介绍更高级的主题。 请注意,本教程的所有示例均使用Beautiful Soup 4。

安装

您可以使用安装Beautiful Soup 4。 包名称为 。 它应该同时在Python 2和Python 3上运行。

如果您的系统上未安装pip,则可以直接下载Beautiful Soup 4源tarball并使用安装。

BeautifulSoup最初打包为Python 2代码。 当您安装它以供Python 3使用时,它会自动更新为Python 3代码。 除非您安装该软件包,否则不会转换该代码。 您可能会注意到以下一些常见错误:

  • 当您在Python 3下运行代码的Python 2版本时,会出现“名为HTMLParser的模块” 。
  • 当您在Python 2下运行代码的Python 3版本时,会出现“名为html.parser的模块” 。

可以通过卸载并重新安装Beautiful Soup来纠正上述两个错误。

安装解析器

在讨论可以用于Beautiful Soup的不同解析器之间的差异之前,让我们编写代码来创建汤。

对象可以接受两个参数。 第一个参数是实际的标记,第二个参数是您要使用的解析器。 不同的解析器是: , lxml和html5lib 。 解析器有两个版本,一个HTML解析器和一个XML解析器。

是内置的解析器,在旧版本的Python中效果不佳。 您可以使用以下命令安装其他解析器:

解析器非常快,可用于快速解析给定HTML。 另一方面, 解析器非常慢,但也非常宽松。 这是使用每个解析器的示例:

上面的示例概述的差异仅在解析无效HTML时才有意义。 但是, 络上的大多数HTML格式都是错误的,了解这些差异将帮助您调试一些解析错误并确定要在项目中使用哪个解析器。 通常, 解析器是一个很好的选择。

美丽汤中的对象

Beautiful Soup将给定HTML文档解析为Python对象树。 您需要了解四个主要的Python对象: , , 和 。

对象引用文档中的实际XML或HTML标签。 您可以使用访问标签的名称。 您还可以将标签的名称设置为其他名称。 名称更改将在Beautiful Soup生成的标记中可见。

您可以分别使用和访问不同的属性,例如标签的class和id。 您还可以使用访问整个属性字典。 您还可以添加,删除或修改标签的属性。 可以采用多个值的属性(如元素的将存储为列表。

标记中的文本在中存储为Beautiful Soup。 它具有一些有用的方法,例如来替换标签中的文本。 您还可以使用将转换为unicode字符串。

Beautiful Soup还可以让您访问 页中的评论。 这些注释存储为对象,该对象基本上也是 。

您已经在上一节中了解了对象。 它用于表示整个文档。 由于它不是实际对象,因此没有任何名称或属性。

获取标题,标题和链接

您可以使用Beautiful Soup非常轻松地提取页面标题和其他此类数据。 让我们抓取有关Python的Wikipedia页面 。 首先,您将必须使用以下基于请求模块教程的代码来获取页面的标记, 以访问 页 。

现在已经创建了汤,您可以使用以下代码获取 页的标题:

您也可以抓取 页以获得其他信息,例如主标题或第一段,其类或属性。

同样,您可以使用以下代码遍历文档中的所有链接或子标题:

导航DOM

您可以使用常规标签名称浏览DOM树。 链接这些标签名称可以帮助您更深入地导航树。 例如,您可以使用获得给定的Wikipedia页面第一段中的第一个链接。 可以使用访问第一段中的所有链接。

您还可以使用将标签的所有子级作为列表 。 要使子级处于特定索引,可以使用 。 您还可以使用属性来遍历标签的子级。

仅当您要访问标签的直接或第一级后代时, 和才有用。 要获取所有后代,可以使用属性。

您还可以使用属性访问元素的父 。 同样,您可以使用属性访问元素的所有祖先。 顶级标记的父级是对象本身,而其父级是None。

您可以使用和属性访问元素的上一个和下一个同级。

为了使两个元素成为同级,它们应具有相同的父元素。 这意味着元素的第一个子代将没有先前的同级。 同样,元素的最后一个子元素将没有下一个同级元素。 在实际的 页中,元素的上一个和下一个同级很有可能是换行符。

您还可以使用和遍历元素的所有同级 。

您可以使用属性当前元素之后的元素。 要访问紧接当前元素的元素,请使用属性。

同样,您可以分别使用和当前元素之前和之后的所有元素。

最后的想法

完成本教程后,您现在应该对不同HTML解析器之间的主要区别有了很好的了解。 现在,您还应该能够浏览 页并提取重要数据。 当您要分析给定 站上的所有标题或链接时,这将很有帮助。

在本系列的下一部分中,您将学习如何使用Beautiful Soup库搜索和修改DOM。

翻译自: https://code.tutsplus.com/tutorials/scraping-webpages-in-python-with-beautiful-soup-the-basics–cms-28211

文章知识点与官方知识档案匹配,可进一步学习相关知识Python入门技能树预备知识Python简介215038 人正在系统学习中 相关资源:新58mm收银小票打印管理软件v3.0官方安装版-其它代码类资源…

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年5月11日
下一篇 2020年5月11日

相关推荐