Alan Hou的个人博客

第十六章 网络抓取 – 从网站上提取有用的信息

精通Python自动化脚本-运维人员宝典完整目录:

第一章 Python脚本概述
第二章 Python脚本调试和性能测试
第三章 单元测试-单元测试框架的介绍
第四章 自动化常规运维活动
第五章 文件、目录和数据处理
第六章 文件存档、加密和解密
第七章 文本处理和正则表达式
第八章 文档和报告
第九章 操作各类文件
第十章 网络基础 – Socket编程
第十一章 使用Python脚本处理邮件
第十二章 使用Telnet和SSH远程监控主机
第十三章 创建图形化用户界面
第十四章 处理Apache和其它的日志文件
第十五章 SOAP和REST API通讯
第十六章 网络抓取 – 从网站上提取有用的信息
第十七章 数据收集及报表
第十八章 MySQL和SQLite数据库管理

本章中我们将学习网页抓取的相关知识。我将还将学习Python中用于从网站上提取信息的beautifulsoup库。

本章主要涉及如下课题:

什么是网页抓取?

网页抓取是一种用于从网站上提取信息的技术。这一技术用于将非结构化数据转化为结构化数据。

网页抓取的用法是从网站是提取数据。提取的数据存储在本地系统的文件中,也可以存储在数据库的数据表中。网页抓取软件使用HTTP或浏览器直接访问万维网(WWW)。这是由网页爬虫或机器人实现的自动化过程。

爬取网页包含获取页面,然后提取数据。网页爬虫获取页面。爬虫是网页抓取中不可或缺的一个组件。在获取页面之后,就需要进行提取了。我们可以对页面进行搜索、解析、保存数据到数据表以及重构页面。

数据提取

这一部分,我们来看实际的数据提取过程。Python的beautifulsoup库可执行数据提取任务。我们还将使用Python的requests库。

首先,我们应安装这两个库。运行如下命令来安装requests和beautifulsoup库:

requests库

requests库的用处是以可读的格式使用Python脚本中的HTTP。我们可以在Python中使用requests库下载页面。requests库有不同的请求类型。这里我们将学习GET请求。GET请求用于从web服务器获取信息。web请求下载指定网页的HTML内容。每次请求都有一个状态码。状态码返回我们向服务器发送的每次请求。这些状态码向我们表明所做请求状况的信息。状态码的类型列举如下:

beautifulsoup库

beautifulsoup是一个Python库,用于网页抓取。它带有搜索、导航、变更等简单易用的方法。是一个用于从网页上提取数据的工具集。

下面,要在我们的脚本中使用beautifulsoup的功能,需要使用import语句导入这两具库。我们将来看一个解析网页的示例。这里我们来解析一个IMDb网站的热门新闻面。创建一个脚本parse_web_page.py并在其中加入如下的内容:

运行脚本,我们将得到如下输出:

上例中,我们获取了一个页面并使用beautifulsoup对其进行解析。首先我们导入了requests和beautifulsoup模块。然后,使用GET请求来获取 URL 并将该 URL 赋值给变量page_result。接着我们创建了beautifulsoup对象parse_obj。这一对象接收从requests获取的page_result.content作为参数,然后使用 html.parser对页面进行了解析。

下面我们将从class 和a标签中提取内容。要执行这一操作,打开浏览器并在想要提取的内容上右击,向下滚动可以看到Inspect(查看元素)的选项。点击它可以获取到class名。传入程序中并运行脚本。为此创建一个脚本extract_from_class.py并在其中编写如下内容:

运行脚本,我们将得到如下输出:

上例中,首先我们导入了requests和beautifulsoup模块。然后,我们创建了一个请求对象并传入URL。接着,我们创建了一个beautifulsoup对象parse_obj。该对象从接收请求的page_result.content作为参数,并使用html.parser解析页面。然后我们使用了beautifulsoup的find()方法来从news-article__content这个 class中获取内容。

下面,我们来看一个从指定标签中提取内容的示例。在这个示例中,我们将从<a>标签中提取内容。创建一个脚本extract_from_tag.py并在其中编写如下内容:

运行脚本,我们将得到如下输出:

上例中,我们从<a>标签中提取了内容。我们使用了find_all()方法来从news-article__content这个class中提取了所有<a>标签中的内容。

从维基百科提取信息

这一部分中,我们将来看一个从维基百科获取舞蹈形式列表的示例。我们将列出所有的传统印度舞。创建一个脚本extract_from_wikipedia.py并在其中编写如下内容:

运行脚本,输出内容如下:

总结

本章中,我们学习了什么是网页抓取。还学习了两个用于从网页提取数据的库。同时从维基百科上提取了信息。

下一章中,我们将学习数据的收集和报表。我们将学习NumPy模块、数据可视化以及使用图表来展示数据。

课后问题

  1. 什么是网页抓取?
  2. 什么是网页爬虫?
  3. 你是否能在登录页后爬取数据?
  4. 你是否能爬取 Twitter?
  5. 是否是爬取 JavaScript 页面?若可以,如何爬取?

扩展阅读

退出移动版