动态网页抓取(动态网页抓取工具推荐(二):为什么一定要用http字段)
优采云 发布时间: 2021-09-26 00:08动态网页抓取(动态网页抓取工具推荐(二):为什么一定要用http字段)
动态网页抓取工具推荐提到抓取,不得不说http协议。相对于socket编程,可能更多人被网络爬虫培训机构误导,以为这是解决爬虫抓取问题的万金油。要说抓取工具是什么,对于http协议抓取而言,webspider,spiderhub、googlespider等已经是烂大街的主流工具。但这几种抓取工具应该都存在不少问题,curl不稳定,fiddler抓取非常不稳定。
在上一篇介绍前,我们基本明确了目前主流工具的不足和局限。针对这些问题,下面用几个很酷的案例告诉大家,为什么一定要用http协议抓取。1.http协议定义了哪些消息类型以及编码方式?http和tcp不同,不同的浏览器会有不同解析器对同一method请求作出不同的request,进而返回不同的html。好了,我们先来看一张图:图中标蓝的为content-length字段,也就是消息的长度。
下面举例说明。这个任务属于第二章示例图中的第一步,从examplebooks数据库中获取电子书籍名单。这个任务参考[[content-length]]解决这一步,需要明确传递给爬虫工具的是method:post,而非postmessage。如果网站遵循postmessage的request就直接返回结果。
举例如下:http协议定义了三种header字段,其中content-length字段,有两种编码方式,分别如下:utf-8和gbk,两种编码方式又被分类为aes、aes-128、ed-8,这个问题大家不必深究,有兴趣的同学自己动手研究。在这里先讲utf-8,utf-8是unicode字符集中保存字符的一种编码方式,其最大的好处就是unicode字符能够在内存中与html中保存的字符都一一对应。
http协议的每个字段只支持一种编码方式。而webspider生成的postmessage字段就是采用的utf-8编码。这里放上http协议定义的部分内容,其余大家可自行查阅资料。http协议的每个字段定义的编码格式如下:content-typetext/plain无header/attachment/send-expires设置上面列举的三种content-type字段utf-8,可以理解为在头部文本中预留下来的字符编码。
随着web抓取的大火,这个部分也被设置上了支持。[[protocol]]带上这个就是带头部脚本字段的utf-8方案。[[scheme]]随着如火如荼的翻墙浪潮,谷歌提供了一组scheme供爬虫工具抓取,我们也可以提供自己的。对这个scheme可能很多人不是很了解,这里来举例说明,比如上面图中javascript脚本文件中的'-webkit-iscroll',正则表达式引擎就是采用的googlejs脚本引擎,[[after]]这里的after是一个修饰词,用于作为时间戳,用作条件判断。比如s。