编写一个爬虫类库——(二)准备

数据抓取方式选择:

要编写爬虫程序,首先需要选择数据抓取的方式,一般来说有如下两种:

  1. 对服务器发送Http请求,获取响应信息
  2. 利用浏览器发送请求,获取渲染完成后的数据

这里我选择方式2,具体原因我在之前的Blog文章使用Chrome快速实现数据的抓取(四)——优点中已经做过对比分析,简单来说就是使用浏览器除了性能开销较大外,其它方面基本上秒杀发送HTTP请求的原始方式。

浏览器接口:

对于浏览器的选择,我这里支持的是Chrome。Chrome提供了比较完善的开发接口Devtool Protocol,这个接口非常强大,基本可以实现自带的DevTool能实现的任何功能。该协议本身也有各种开源的实现,要想使用这个协议驱动Chrome实现蜘蛛程序,可以有如下方式:

  1. 直接编写协议解析程序,然后再封装为蜘蛛类库
  2. 使用其他的开源协议解析程序,然后再封装为蜘蛛类库
  3. 在别人封装好的蜘蛛类库上二次封装

由于该协议比较简单,实现起来不难,加上只需要实现需要的部分接口即可,工作量也不大。自己实现所需要的时间并不比理解别人的实现和踩坑的需要的多,因此我采用了自己实现的方式,也更加具有可控性。

Devtool Protocol:

Devtool Protocol的协议定义可以在Github上查看,我之前也写了几篇文章介绍过它,

主要是一个基于Websocket的协议,具体就不多介绍了,感兴趣的朋友可以看看我上面的文章或Chrome的官方文档

辅助工具:

之前开发Devtool Protocol一个主要的问题是,官网描述了一大堆api,往往不知道怎么组合这些api实现我们需要的功能,需要查阅大量文档。现在Chrome提供了一个辅助工具Protocol Monitor帮助我们简化这一过程

当我们操作开发者工具时,相关的操作都转化成了可以通过Devtool Protocol的接口实现的脚本,类似于开发者工具的操作日志。只要我们先用开发者工具进行操作,然后分析Protocol Monitor记录的日志,就可以通过代码回放实现同样的效果,非常给力。  

这个工具目前还是预览版,默认是没有开放的,可以通过如下步骤开启它。

原文地址:https://www.cnblogs.com/TianFang/p/11143282.html

时间: 2024-08-29 03:42:42

编写一个爬虫类库——(二)准备的相关文章

编写一个爬虫驱动——(一)想法

有的时候,我会写一些爬虫程序来自动获取一些信息,之前一段时间用过Puppeteer来驱动Chrome获取信息,我之前也写过一系列文章来介绍它.Puppeteer是Google官方出品,本身质量非常好高,提供的功能也非常强大,但它本身并不是针对爬虫程序定制的,用起来存在如下不便之处: 提供的API过多,想找到需要的API比较费时间. 提供的API比较底层,要实现想要的功能往往需要多个接口组合 有的功能没有提供, 需要通过一些私有接口或改源码的方式来实现 日志,输入输出,任务调度,重试策略等都需要额

编写Python爬虫的简易流程描述

python网络爬虫,其实就是模拟人类浏览网页的行为,并将这种行为自动化的工具. 从技术上来说,就是利用python代码发送特定的request请求到Web页面,最后获得response,并将response解析,提取其中的数据并存储起来. 开发一个爬虫程序,首先要确定目标.例如爬取拉勾网的python相关职位信息是我们的目标.根据这个目标,我们可以先使用手工的方式,访问拉勾网,搜索python相关职位,从而对如何从页面获取所需信息有一个直观的理解. 其次,可以使用浏览器自带的开发者工具.抓包工

编写一个网易云音乐爬虫程序

本次借助wxPython编写一个网易云音乐的爬虫程序,能够根据一个歌单链接下载其下的所有音乐 前置说明 网易云音乐提供了一个下载接口:http://music.163.com/song/media/outer/url?id=xxx 所以只需要拿到歌单中每首歌曲对应的 id 即可 1.分析歌单网页元素 打开网易云音乐,复制一个歌单链接 打开chrome,查看网页元素 这里有个细节,我们拿到的歌单url中有一个符号“/#”,因为之前爬虫其他网站时,也是直接请求初始url,一般Elements标签中的

编写一个猥琐的反爬虫系统是种怎样的体验

我们所处的互联网, 是一个爬虫的世界.任何一个小公司,小团队,甚至一个应届毕业生,都有可能编写爬虫,偷偷的获取数据. 当你看到“爬虫”两个字的时候, 就应该有点血脉贲张的感觉了. 爬虫就如同病毒一样无孔不入.有的爬虫肆无忌惮地访问资源,导致服务器性能下降甚至崩溃:有的爬虫如同间谍一样秘密入侵,伪装成用户获取本不应该让它获取到的数据:有的爬虫冒充搜索引擎,堂而皇之的威胁你交出数据,可能还明目张胆的写各种教程嘲笑你们,是可忍孰不可忍?! 然而,千万要忍耐,稍稍做点什么,可以在名义上让他们胜利,实际上

编写一个表示二维平面上的点的类MyPoint,满足以下条件: 1、定义private的成员变量x和y,表示点的x和y坐标,类型为double

编写一个表示二维平面上的点的类MyPoint,满足以下条件:1.定义private的成员变量x和y,表示点的x和y坐标,类型为double2.定义两个MyPoint的构造方法,一个构造方法不带参数,而且x和y的初始值为0,另一个构造方法有两个参数,参数名为x和y,类型为double,用这两个参数分别作为初始x和y坐标3.定义一个getD方法,有一个类型为MyPoint的对象参数,功能为返回当前对象和参数对象这两个坐标点的距离,返回值为double类型4.编写测试的main方法,调用getD计算两

30分钟编写一个抓取 Unsplash 图片的 Python爬虫

我一直想用 Python and Selenium 创建一个网页爬虫,但从来没有实现它. 几天前, 我决定尝试一下,这听起来可能是挺复杂的, 然而编写代码从 Unsplash 抓取一些美丽的图片还是挺容易的. PS:很多人在学习Python的过程中,往往因为遇问题解决不了或者没好的教程从而导致自己放弃,为此我整理啦从基础的python脚本到web开发.爬虫.django.数据挖掘等[PDF等]需要的可以进Python全栈开发交流.裙 :一久武其而而流一思(数字的谐音)转换下可以找到了,里面有最新

通过编写一个简单的日志类库来加深了解C#的文件访问控制

在程序的开发调试过程及发布运行后的状态监控中,日志都有着极其重要的分量,通过在关键逻辑节点将关键数据记录到日志文件当中能帮助我们尽快找到程序问题所在.网上有不少专业成熟的日志组件可用,比如log4net和nlog等,由其专业及受欢迎程度可见日志在一个程序中的重要性. 我只用过log4net,而在用log4net写日志的过程中慢慢觉着太繁琐了点,不就写个日志吗?为毛搞得那么复杂?各种配置让我有点抓狂. 于是我就想,自己来吧! 首先分析一下一个基本的日志类库应该具有的基本功能及实现的时候需要注意和解

Python爬虫进阶二之PySpider框架安装配置

关于 首先,在此附上项目的地址,以及官方文档 PySpider 官方文档 安装 1. pip 首先确保你已经安装了pip,若没有安装,请参照 pip安装 2. phantomjs PhantomJS 是一个基于 WebKit 的服务器端 JavaScript API.它全面支持web而不需浏览器支持,其快速.原生支持各种Web标准:DOM 处理.CSS 选择器.JSON.Canvas 和 SVG. PhantomJS 可以用于页面自动化.网络监测.网页截屏以及无界面测试等. 安装 以上附有官方安

面试题之java 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 要求不能出现截半的情况

题目:10. 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串. 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”. 一.需要分析 1.输入为一个字符串和字节数,输出为按字节截取的字符串-------------->按照字节[byte]截取操作字符串,先将String转换成byte类型 .2.汉字不可以截半----------------------------------