随笔分类 - 爬虫
摘要:第六章 Ajax 数据爬取 有时候我们在用 requests 抓取页面的时候,得到的结果可能和在浏览器中看到的不一样:在浏览器中可以看到正常显示的页面数据,但是使用 requests 得到的结果并没有。这是因为 requests 获取的都是原始的 HTML 文档,而浏览器中的页面则是经过 JavaS
阅读全文
摘要:5.3 非关系型数据库存储 NoSQL,全称 Not Only SQL,意为不仅仅是 SQL,泛指非关系型数据库。NoSQL 是基于键值对的,而且不需要经过 SQL 层的解析,数据之间没有耦合性,性能非常高。 非关系型数据库又可细分如下。 键值存储数据库:代表有 Redis、Voldemort 和
阅读全文
摘要:5.2 关系型数据库存储 关系型数据库是基于关系模型的数据库,而关系模型是通过二维表来保存的,所以它的存储方式就是行列组成的表,每一列是一个字段,每一行是一条记录。表可以看作某个实体的集合,而实体之间存在联系,这就需要表与表之间的关联关系来体现,如主键外键的关联关系。多个表组成一个数据库,也就是关系
阅读全文
摘要:6.4 分析 Ajax 爬取今日头条街拍美图 本节中,我们以今日头条为例来尝试通过分析 Ajax 请求来抓取网页数据的方法。这次要抓取的目标是今日头条的街拍美图,抓取完成之后,将每组图片分文件夹下载到本地并保存下来。 1. 准备工作 在本节开始之前,请确保已经安装好 requests 库。如果没有安
阅读全文
摘要:6.3 Ajax 结果提取 这里仍然以微博为例,接下来用 Python 来模拟这些 Ajax 请求,把我发过的微博爬取下来。 1. 分析请求 打开 Ajax 的 XHR 过滤器,然后一直滑动页面以加载新的微博内容。可以看到,会不断有 Ajax 请求发出。 选定其中一个请求,分析它的参数信息。点击该请
阅读全文
摘要:6.2 Ajax 分析方法 这里还以前面的微博为例,我们知道拖动刷新的内容由 Ajax 加载,而且页面的 URL 没有变化,那么应该到哪里去查看这些 Ajax 请求呢? 1. 查看请求 这里还需要借助浏览器的开发者工具,下面以 Chrome 浏览器为例来介绍。 首先,用 Chrome 浏览器打开微博
阅读全文
摘要:7.2 Splash 的使用 Splash 是一个 JavaScript 渲染服务,是一个带有 HTTP API 的轻量级浏览器,同时它对接了 Python 中的 Twisted 和 QT 库。利用它,我们同样可以实现动态渲染页面的抓取。 1. 功能介绍 利用 Splash 我们可以实现如下功能:
阅读全文
摘要:7.1 Selenium 的使用 Selenium 是一个自动化测试工具,利用它可以驱动浏览器执行特定的动作,如点击、下拉等操作,同时还可以获取浏览器当前呈现的页面的源代码,做到可见即可爬。对于一些 JavaScript 动态渲染的页面来说,此种抓取方式非常有效。本节中,就让我们来感受一下它的强大之
阅读全文
摘要:第七章 动态渲染页面抓取 在前一章中,我们了解了 Ajax 的分析和抓取方式,这其实也是 JavaScript 动态渲染的页面的一种情形,通过直接分析 Ajax,我们仍然可以借助 requests 或 urllib 来实现数据爬取。 不过 JavaScript 动态渲染的页面不止 Ajax 这一种。
阅读全文
摘要:8.1 图形验证码的识别 我们首先识别最简单的一种验证码,即图形验证码。这种验证码最早出现,现在也很常见,一般由 4 位字母或者数字组成。例如,中国知网的注册页面有类似的验证码,链接为:http://my.cnki.net/elibregister/commonRegister.aspx,页面如图
阅读全文
摘要:第八章 验证码的识别 目前,许多网站采取各种各样的措施来反爬虫,其中一个措施便是使用验证码。随着技术的发展,验证码的花样越来越多。验证码最初是几个数字组合的简单的图形验证码,后来加入了英文字母和混淆曲线。有的网站还可能看到中文字符的验证码,这使得识别愈发困难。 后来 12306 验证码的出现使得行为
阅读全文
摘要:7.4 使用 Selenium 爬取淘宝商品 在前一章中,我们已经成功尝试分析 Ajax 来抓取相关数据,但是并不是所有页面都可以通过分析 Ajax 来完成抓取。比如,淘宝,它的整个页面数据确实也是通过 Ajax 获取的,但是这些 Ajax 接口参数比较复杂,可能会包含加密密钥等,所以如果想自己构造
阅读全文
摘要:7.3 Splash 负载均衡配置 用 Splash 做页面抓取时,如果爬取的量非常大,任务非常多,用一个 Splash 服务来处理的话,未免压力太大了,此时可以考虑搭建一个负载均衡器来把压力分散到各个服务器上。这相当于多台机器多个服务共同参与任务的处理,可以减小单个 Splash 服务的压力。 1
阅读全文
摘要:8.3 点触验证码的识别 除了极验验证码,还有另一种常见且应用广泛的验证码,即点触验证码。 可能你对这个名字比较陌生,但是肯定见过类似的验证码,比如 12306 就是典型的点触验证码,如图 8-18 所示。 图 8-18 12306 验证码 直接点击图中符合要求的图。所有答案均正确,验证才会成功。如
阅读全文
摘要:9.2 代理池的维护 我们在上一节了解了利用代理可以解决目标网站封 IP 的问题。在网上有大量公开的免费代理,或者我们也可以购买付费的代理 IP,但是代理不论是免费的还是付费的,都不能保证都是可用的,因为可能此 IP 被其他人使用来爬取同样的目标站点而被封禁,或者代理服务器突然发生故障或网络繁忙。一
阅读全文
摘要:第九章 代理的使用 我们在做爬虫的过程中经常会遇到这样的情况,最初爬虫正常运行,正常抓取数据,一切看起来都是那么的美好,然而一杯茶的功夫可能就会出现错误,比如 403 Forbidden,这时候打开网页一看,可能会看到 “您的 IP 访问频率太高” 这样的提示,或者跳出一个验证码让我们输入,输入之后
阅读全文
摘要:8.4 微博宫格验证码的识别 本节我们将介绍新浪微博宫格验证码的识别。微博宫格验证码是一种新型交互式验证码,每个宫格之间会有一条指示连线,指示了应该的滑动轨迹。我们要按照滑动轨迹依次从起始宫格滑动到终止宫格,才可以完成验证,如图 8-24 所示。 图 8-24 验证码示例 鼠标滑动后的轨迹会以黄色的
阅读全文
摘要:第十章 模拟登录 很多情况下,页面的某些信息需要登录才可以查看。对于爬虫来说,需要爬取的信息如果需要登录才可以看到的话,那么我们就需要做一些模拟登录的事情。 在前面我们了解了会话和 Cookies 的用法。简单来说,打开网页然后模拟登录,这实际上是在客户端生成了 Cookies,而 Cookies
阅读全文
摘要:9.5 使用代理爬取微信公众号文章 前面讲解了代理池的维护和付费代理的相关使用方法,接下来我们进行一下实战演练,利用代理来爬取微信公众号的文章。 1. 本节目标 我们的主要目标是利用代理爬取微信公众号的文章,提取正文、发表日期、公众号等内容,爬取来源是搜狗微信,其链接为 http://weixin.
阅读全文
摘要:9.4 ADSL 拨号代理 我们尝试维护过一个代理池。代理池可以挑选出许多可用代理,但是常常其稳定性不高、响应速度慢,而且这些代理通常是公共代理,可能不止一人同时使用,其 IP 被封的概率很大。另外,这些代理可能有效时间比较短,虽然代理池一直在筛选,但如果没有及时更新状态,也有可能获取到不可用的代理
阅读全文

浙公网安备 33010602011771号