- 本书赞誉
- 前言
- 目标读者
- 不适合阅读本书的读者
- 本书结构
- 什么是数据处理
- 遇到困难怎么办
- 排版约定
- 使用代码示例
- 致谢
- 第 1 章 Python 简介
- 第 2 章 Python 基础
- 第 3 章 供机器读取的数据
- 第 4 章 处理 Excel 文件
- 第 5 章 处理 PDF 文件 以及用 Python 解决问题
- 第 6 章 数据获取与存储
- 第 7 章 数据清洗:研究、匹配与格式化
- 第 8 章 数据清洗:标准化和脚本化
- 第 9 章 数据探索和分析
- 第 10 章 展示数据
- 第 11 章 网页抓取:获取并存储网络数据
- 第 12 章 高级网页抓取:屏幕抓取器与爬虫
- 第 13 章 应用编程接口
- 第 14 章 自动化和规模化
- 第 15 章 结论
- 附录 A 编程语言对比
- 附录 B 初学者的 Python 学习资源
- 附录 C 学习命令行
- 附录 D 高级 Python 设置
- 附录 E Python 陷阱
- 附录 F IPython 指南
- 附录 G 使用亚马逊网络服务
- 关于作者
- 关于封面
11.1 抓取什么和如何抓取
网页抓取为数据收集带来了无限可能。在互联网上有成千上万的站点,拥有可能会在项目中使用的各种各样的内容和数据。为了构建一个认真负责的网页抓取器,要熟悉每一个站点,以及可抓取的内容。
版权、商标和抓取
当在网络上抓取时,对于你找到的所有媒体(来自报纸、杂志、书籍或博客),你应该考虑收集的数据和它们的使用方式。你是否会下载其他人的照片并且将它当作自己的照片发布?不,这是不道德的,而且在一些情况下是非法的。
学习像版权(http://www.dmlp.org/legal-guide/copyright)和商标(http://www.dmlp.org/legal-guide/trademark)这样的媒体法会影响你的决定,尤其是要抓取的数据属于某人的知识产权(http://www.dmlp.org/legal-guide/intellectual-property)时。
研究域名并查阅法律允许内容和禁止内容的有关提示,还要熟读robots 文件(http://www.robotstxt.org/robotstxt.html)来更好地理解网站所有者的意愿。如果你不确定数据能否被抓取,可联系律师或网站本身。取决于你的住址和使用数据的目的,如果你对本国法律和判例存有疑问,可能需要联系一家数字媒体法定组织。
对于大多数的网络抓取,抓取文本会比抓取链接、图片或图表更合理。如果你还需要保存链接、图片或文件,这其中的大多数都可以使用简单的 bash 命令(例如 wget 或 curl,http://www.thegeekstuff.com/2012/07/wget-curl/)下载,而这不需要 Python。你可以直接保存一个 URL 列表到文件中并且写一个脚本来下载文件。
我们从简单的文本抓取开始。大多数网页的构建都基于适当的 HTML 标准,结构相似。大多数的网站有一个头部,大多数的 JavaScript 和页面样式文件在这里定义,同时还有其他额外信息,比如类似 Facebook、Pinterest 这样的服务的元标签,以及搜索引擎用法的描述信息。
头部之后是主体。主体是站点的主要部分。大多数的站点使用容器(类似 XML 节点的标记节点)来组织站点,并且允许站点内容管理系统加载内容到页面中。图 11-1 展示了一个典型的网页是如何组织的。
图 11-1:网页解剖
对于很多站点来说,页面的顶部部分包含到站点主要部分或者相关主题的导航和链接。链接或者广告通常出现在页面两边向下延展的位置。页面的中间部分通常包含你想要抓取的内容。
熟悉大多数网页的结构(元素的视觉位置和它们在标记语言中的位置)会帮助你从互联网上抓取数据。如果可以聚焦到数据源,你就可以快速地构建抓取器。
一旦知道了在页面上寻找什么,并且通过学习页面源代码的结构分析了页面的组成,你就可以确定如何收集页面中的重要的部分。许多网页在第一次页面加载的时候提供内容,或者提供一个已加载好内容的缓存页面。对于这些页面,可以使用简单的 XML 或 HTML 解析器(我们会在本章学习它们),并且从第一个 HTTP 响应(在你请求一个 URL 时浏览器加载的内容)中直接读取内容。这与读取文档类似,只是需要一个初始的页面请求。
如果你需要首先同页面交互来获取数据(也就是输入数据和点击按钮),并且它不仅仅是一个简单的 URL 的改变,你需要使用一个基于浏览器的抓取器,在浏览器中打开页面同它交互。
如果需要遍历整个网站来收集数据,你会想要一个爬虫:一个机器人,它爬取网页,并且根据规则识别好的内容或跟踪更多页面。我们在爬取中使用的库非常地快速、灵活,让编写这些类型的脚本变得十分简单。
在开始编写抓取器代码之前,我们会查看一些网站,习惯于分析要使用那个类型的抓取器(页面读取器、浏览器读取器或爬虫),以及抓取数据会多难或多简单。有时,确定数据值得付出多少努力是很重要的。我们会介绍一些工具来确定为抓取数据需要付出多少努力,以及值得为这项工作投入多少时间。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论