前言
互联网包含大量数据。这些数据既通过结构化 API 提供,也通过网站直接提供的内容提供。虽然 API 中的数据是高度结构化的,但网页中的信息通常是非结构化的,需要收集、提取和处理才能有价值。收集数据只是旅程的开始,因为这些数据还必须被存储、挖掘,然后以增值形式暴露给其他人。
通过本书,您将了解从网站收集各种形式的信息所需的许多核心任务。我们将介绍如何收集它,如何执行几种常见的数据操作(包括在本地和远程数据库中存储),如何执行常见的基于媒体的任务,例如将图像和视频转换为缩略图,如何使用 NTLK 清理非结构化数据,如何检查几种数据挖掘和可视化工具,最后是构建可以并且将在云上运行的基于微服务的抓取工具和 API 的核心技能。
通过基于配方的方式,我们将学习独立的技术来解决不仅涉及抓取的特定任务,还涉及数据操作和管理、数据挖掘、可视化、微服务、容器和云操作。这些秘诀将以渐进和全面的方式培养技能,不仅教授如何执行抓取的基础知识,还带您从抓取的结果到通过云向其他人提供的服务。 我们将使用 Python、容器和云生态系统中的常用工具构建实际的网络爬虫即服务。
这本书适合谁
本书适合那些想要学习使用抓取过程从网站提取数据以及如何使用各种数据管理工具和云服务的人。编码需要 Python 编程语言的基本技能。本书还适合那些希望了解更大的用于检索、存储和搜索数据的工具生态系统,以及使用现代工具和 Pythonic 库来创建数据 API 和云服务的人。您可能还使用 Docker 和 Amazon Web Services 在云上打包和部署抓取工具。
本书涵盖的内容
第 1 章,“抓取入门” 介绍了网页抓取的几个概念和工具。我们将研究如何使用 requests、urllib、BeautifulSoup、Scrapy、PhantomJS 和 Selenium 等工具安装和执行基本任务。
第 2 章,“数据采集和提取” 基于对 HTML 结构以及如何查找和提取嵌入数据的理解。我们将介绍 DOM 中的许多概念以及如何使用 BeautifulSoup、XPath、LXML 和 CSS 选择器查找和提取数据。我们还简要研究了 Unicode / UTF8 的使用。
第 3 章,“处理数据” 教您加载和操作多种格式的数据,以及如何将这些数据存储在各种数据存储(S3、MySQL、PostgreSQL 和 ElasticSearch)中。网页中的数据以各种格式表示,最常见的是 HTML、JSON、CSV 和 XML。我们还将研究消息队列系统(主要是 AWS SQS)的使用,以帮助构建强大的数据处理管道。
第 4 章,使用图像、音频和其他资产,研究检索多媒体项目、将其存储在本地以及执行多项任务的方法,例如 OCR、生成缩略图、制作网页屏幕截图、从视频中提取音频以及查找所有视频 YouTube 播放列表中的 URL。
第 5 章,抓取-行为准则,涵盖了抓取合法性所涉及的几个概念,以及进行礼貌抓取的实践。 我们将检查用于处理 robots.txt 和站点地图的工具,以尊重网络托管服务商对可接受行为的期望。我们还将检查爬行的几个方面的控制,例如使用延迟、包含爬行的深度和长度、使用用户代理以及实现缓存以防止重复请求。
第 6 章,抓取挑战和解决方案,涵盖了编写强大的抓取工具所面临的许多挑战,以及如何处理许多场景。这些场景包括分页、重定向、登录表单、将爬虫保持在同一域内、失败时重试请求以及处理验证码。
第 7 章,文本整理和分析,研究了各种工具,例如使用 NLTK 进行自然语言处理以及如何删除常见的干扰词和标点符号。我们经常需要处理网页的文本内容,以查找页面上属于文本一部分的信息,而不是结构化/嵌入数据或多媒体。这需要了解使用各种概念和工具来清理和理解文本。
第 8 章,搜索、挖掘和可视化数据,涵盖了在 Web 上搜索数据、存储和组织数据以及从已识别的关系中得出结果的几种方法。我们将了解如何了解维基百科贡献者的地理位置、在 IMDB 上查找参与者之间的关系以及在 Stack Overflow 上查找与特定技术相匹配的工作。
第 9 章,创建一个简单的数据 API,教我们如何创建一个爬虫即服务。我们将使用 Flask 为抓取工具创建一个 REST API。我们将把抓取工具作为此 API 背后的服务来运行,并能够提交抓取特定页面的请求,以便从抓取以及本地 ElasticSearch 实例中动态查询数据。
第 10 章,使用 Docker 创建 Scraper 微服务,通过将服务和 API 打包在 Docker 群中,并通过消息队列系统 (AWS SQS) 在抓取器之间分发请求,继续将抓取器作为服务进行增长。我们还将介绍如何使用 Docker 群工具来上下扩展 scraper 实例。
第 11 章,“使抓取工具成为真正的服务”,最后充实了前一章中创建的服务,添加了一个抓取工具,将前面介绍的各种概念整合在一起。该抓取工具可以帮助分析 StackOverflow 上的职位发布,以查找和比较使用特定技术的雇主。该服务将收集帖子并允许查询来查找和比较这些公司。
为了充分利用这本书
本书中的食谱所需的主要工具是 Python 3 解释器。这些食谱是使用 Anaconda Python 发行版的免费版本(特别是版本 3.6.1)编写的。其他 Python 版本 3 发行版应该可以正常运行,但尚未经过测试。
食谱中的代码通常需要使用各种 Python 库。这些都可以使用 pip 安装并使用 pip install 访问。只要需要,这些安装都会在食谱中详细说明。有一些食谱需要 Amazon AWS 帐户。AWS 账户第一年可免费访问。这些食谱只需要免费服务即可。可以在 https://portal.aws.amazon.com/billing/signup 创建新帐户。
有几个食谱将使用 Elasticsearch。GitHub 上有一个免费的开源版本: https://github.com/elastic/elasticsearch ,该页面上有安装说明。Elastic.co 还提供托管在云上的功能齐全的版本(也支持 Kibana 和 Logstash),并可在 http://info.elastic.co (我们将使用)上提供 14 天免费试用版。 https://github.com/elastic/stack-docker 有一个包含所有 x-pack 功能的 docker-compose 版本,所有这些都可以通过简单的 docker-compose up 命令启动 。
最后,一些秘诀使用 MySQL 和 PostgreSQL 作为数据库示例以及这些数据库的几个常见客户端。对于这些食谱,需要在本地安装。MySQL 社区服务器位于 https://dev.mysql.com/downloads/mysql/ ,PostgreSQL 位于 https://www.postgresql.org/ 。我们还将研究为几个配方创建和使用 docker 容器。Docker CE 是免费的,可从 https://www.docker.com/community-edition 获取。