文章目录:

  1. 入门秘籍—Http协议与robots协议
  2. 内功修炼—深入理解网络爬虫概念,作用,原理和爬取方式及流程
  3. 山中奇遇—得授页面解析技术之Xpath
  4. 入驻兵器阁—获取爬虫神器之Jsoup
  5. 入驻兵器阁—获取爬虫神器之HttpClient
  6. 初出江湖路遇波折—常见反爬虫策略
  7. 伪装身份破入山门—反爬虫对策之模拟身份代理IP
  8. 修炼升级—htmlutil工具抓取ajax动态页面
  9. 升级进阶—Selenium自动化工具
  10. 化繁为简唯快不破—webmagic框架快速开发爬虫应用

引子

随着大数据技术兴起,互联网江湖再现波澜。数据采集这门一本万利的生意,一直被python这个门派所独揽,独步天下,无人能敌。然,天下熙熙,皆为利来;天下攘攘,皆为利往,曾经的web技术领域的江湖大佬,java岛亦有不甘,欲再现江湖,与之平分天下……

第一章   入门秘籍之Http协议和robots协议

爬虫元年,java岛欲重开山门,广招java弟子。

时年六月三十日,残阳如血。

小奇手握毕业证书,带着毕业聚餐之后的伤感和对未来之憧憬,意欲在互联网江湖中闯出一番天下,雄心勃勃果断上路,踏上了去往java岛修炼的征程。经过重重考验,过五关斩六将,终于如愿以偿的成为了java岛爬虫谷的入室弟子。

办完手续,了解了注意事项,领了服装,工具设备和两本小册子,小奇就一头扎进宿舍开始迫不及待的研究入门秘籍了。

首先是一本《HTTP协议》,HyperText Transfer Protocol也就是超文本传输协议。是因特网上应用最为广泛的一种网络传输协议,所有的WWW文件都必须遵守这个标准。HTTP是一个基于TCP/IP通信协议来传递数据(HTML文件, 图片文件, 查询结果等)。

看完概念,小奇若有所思,继续往下学习Http协议的工作原理:HTTP协议工作于客户端-服务端架构上,浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求,服务器端接到请求之后把相应的资源信息响应给客户端,从而完成一个请求响应的过程。

如图所示:

同时小奇也注意到,Http协议有以下特点:

1.HTTP是无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。

2.HTTP是媒体独立的:这意味着,只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。客户端以及服务器指定使用适合的MIME-type内容类型。

3.HTTP是无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

了解了工作原理和特点之后,小奇又开始进行了深入的思考。在数据传输过程中它的数据报文格式是怎样的呢?秘籍中也给出了解释:

客户端发送一个HTTP请求到服务器的请求消息包括以下格式:

请求行(request line)、请求头部(header)、空行和请求数据四个部分组成。

如图所示:

请求行以一个请求符号开头,以空格分开,后面跟着请求的URI和协议的版本,格式如下:

Method Request-URI HTTP-Version CRLF

实例:GET /login.jsp HTTP/1.1

其中GET是本次请求所采用的请求方法,HTTP请求方法有七种:

请求头部信息:

请求头部由key/value键值对组成,每行一对。请求头部通知服务器有关于客户端请求的信息,典型的请求头有:

Accept: text/html,image/*

Accept-Charset: UTF-8

Accept-Encoding: gzip,compress

Accept-Language: en-us,zh-cn

Host: www.zhidisoft.com:80

If-Modified-Since: Tue, 11 Jul 2017 18:23:51 GMT

Referer: http://www.zhidisoft.com/index.jsp

User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)

Connection: close/Keep-Alive

Date: Tue, 11 Jul 2017 18:23:51 GMT

HTTP响应(response):

服务器端对一个HTTP请求处理完毕之后,服务器会返回给客户端一些信息,这就是HTTP响应。一个HTTP响应代表服务器向客户端回送的数据,它也包括三个部分:一个状态行、若干消息头、以及实体内容 。其中的一些消息头和实体内容都是可选的,消息头和实体内容间要用空行隔开:

HTTP状态行格式如下:

HTTP-Version Status-Code Reason-Phrase CRLF

HTTP-Versio:表示服务器HTTP协议的版本

Status-Code:表示服务器发回的响应状态代码

Reason-Phrase:表示状态代码的文本描述

状态码用于表示服务器对请求的处理结果。响应状态码分为5类,如下所示:

消息报头

与请求报头类似,不同在于请求报头附带的是关于请求的相关信息,而消息报头则附带的是服务端应答的相关信息。

常见的响应头:

Content-Encoding: gzip

Content-Type: text/html; charset=UTF-8

Last-Modified: Tue, 11 Jul 2017 18:23:51 GMT

Expires: -1

Cache-Control: no-cache

Pragma: no-cache

Connection: close/Keep-Alive

Date: Tue, 11 Jul 2017 18:23:51 GMT

通过以上内容的学习,小奇略有所得。实践才是检验真理的唯一标准,于是迫不及待的打开电脑连接上互联网,在浏览器中输入网址,通过HTTP协议访问互联网。看到响应的页面信息后,按F12键打开开发者工具,再刷新页面,点击一个请求连接,可以查看到部分该请求响应的报文信息:

通过实践小奇对HTTP协议的请求响应模式又有了新的认识和感悟,果然是背靠大树好乘凉,以前虽然也是在使用互联网,但知其然而不知其所以然,现在终于搞明白怎么回事了。

接着又打开了另外一本小册子《robots协议》,Robots协议全称是“网络爬虫排除标准”(Robots Exclusion Protocol),网站通过Robots协议告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取,也称为爬虫协议、机器人协议等。Robots协议可以屏蔽一些网站中比较大的文件,如:图片,音乐,视频等,节省服务器带宽;可以屏蔽站点的一些死链接。方便搜索引擎抓取网站内容;设置网站地图连接,方便引导蜘蛛爬取页面。

Robots协议的语法格式:

Disallow: /表示禁止访问,Allow: /表示允许访问。

在写robots.txt时需特别注意的是,/前面有一个英文状态下的空格(必须是英文状态下的空格)。

禁止搜索引擎访问网站中的某几个文件夹,以a、b、c为例,写法分别如下:

Disallow: /a/

Disallow: /b/

Disallow: /c/

禁止搜索引擎访问文件夹中的某一类文件,以a文件夹中的js文件为例,写法如下:

Disallow: /a/*.js

只允许某个搜索引擎访问,以Baiduspider为例,写法如下:

User-agent: Baiduspider

Disallow:

禁止访问网站中的动态页面

User-agent: *

Disallow: /*?*

只允许搜索引擎访问某类文件,以htm为例,写法如下:

User-agent: *

Allow: .htm$

Disallow: /

禁止某个搜索引擎抓取网站上的所有图片,以Baiduspider为例,写法如下:

User-agent: Baiduspider

Disallow: .jpg$

Disallow: .jpeg$

Disallow: .gif$

Disallow: .png$

Disallow: .bmp$

robots.txt文件存放在网站根目录下,并且文件名所有字母都必须小写。

看完robots协议的介绍之后,小奇发现这就是一个规范说明而已,不禁有些感叹,“就是一个防君子不防小人的行业规范嘛”。

“嗯,robots就是一个君子协定”,突然后面有人应声道。

小奇被这突然的声音吓了一跳,由于太过专注,没有发现后面有人在看自己。高高的个子,戴个黑框眼镜,一头短发,酷酷的感觉。小奇这才突然想起来,办理手续的时候,告诉过自己,是同宿舍的小酷师兄,于是连忙问好:“小酷师兄好!”

“你是新来的小奇师弟吧”。接着说道:“robots协议虽然平时与我们影响不大,但真正做项目的时候还是需要注意的。听说过2012年的时候的3百大战吗?那真是一场血雨腥风的大战,百度指责360不顾robots协议,非法抓取百度的信息,要求赔偿1亿元损失,360指责百度行业垄断,相互掐架,后来sogo,腾讯等公司相序加入战团,一片混乱。最后,工信部调解,双方才停止相互攻击。直到2013年4月27日,百度起诉360不正当竞争案今日宣判,北京一中院依据robots协议等相关规范判决360败诉,要求360停止不正当竞争行为、连续15日在首页道歉声明,赔偿损失45万元”,说起这件事小酷师兄满脸的悻悻之色。

小奇听完也是充满了震惊感叹道:“robots协议还是蛮重要的”。

“嗯,平时我们自己练练手之类的可以不用在意,在不影响宗门利益的情况下,也可以自由发挥的,以后你就会明白的。”,小酷师兄总结道。

“对了,明天早起别忘了去问道阁参加入门弟子的培训”,说完就呼呼睡去。

更多视频java爬虫视频课程:https://edu.csdn.net/course/detail/20623/258631

Java爬虫技术—入门秘籍之HTTP协议和robtos协议(一)相关推荐

  1. 第二十七期:网络爬虫程序员被抓,我们还敢爬虫吗?细数那些Java爬虫技术

    最近,某大数据科技公司因为涉嫌非法抓取某招聘网站用户的简历信息,公司被查封,负责编写抓取程序的程序员也将面临坐牢. 作者:架构之路来源 最近,某大数据科技公司因为涉嫌非法抓取某招聘网站用户的简历信息, ...

  2. php reactphp wss_浅谈WebSocket协议、WS协议和WSS协议原理及关系

    websocket在实时通信领域运用的比较多,比如社交聊天.弹幕.多玩家游戏.协同编辑.股票基金实时报价.体育实况更新.视频会议/聊天.基于位置的应用.在线教育.智能家居等需要高实时的场景. 具体到w ...

  3. Bytom BIP-32协议和BIP-44协议解读

    我们知道HD(分层确定性)钱包,基于 BIP-32:多币种和多帐户钱包,基于 BIP-44:最近比原社区的钱包开发者对比原的BIP-32和BIP-44协议有疑问,所以我今天就专门整理了一下该协议的内容 ...

  4. 计算机网络(二十)-广域网-PPP协议和HDLC协议

    一.广域网 广域网,通常跨接很大的物理范围,所覆盖的范围从几十公里到几千公里,它能连接多个城市或国家,远距离通信,形成国际性的远程网络. 广域网的通信子网主要使用分组交换技术.广域网的通信子网可以利用 ...

  5. nginx websocket wss 连接失败 failed_浅谈WebSocket协议、WS协议和WSS协议原理及关系

    现如今,一些游戏,网站,APP,支付行业的网络经常会收到DDOS和CC,因此这个事情也变得不足为奇了.但在防护方案中有多种不同的方案.如,今天有几个同事在针对高防CDN问题讨论的时,谈到WebSock ...

  6. SSL协议和SET协议

    SSL协议和SET协议 --三.安全电子交易的协议 --目前的安全电子交易协议主要有两种,即安全套接层(SSL)协议和安全电子交易(SET)协议. --1.SSL协议 --SSL协议由Netscape ...

  7. 二十五、广域网,PPP协议和HDLC协议

    文章目录 1.广域网 2.PPP协议 2.1 PPP协议应满足的要求 2.2 PPP协议无需满足的要求 2.3 PPP协议的三个组成部分 2.4 PPP协议的状态图 2.5 PPP协议的帧格式 3.H ...

  8. PPP协议和PPPoE协议

    以前没有关注过这两个协议,因为我一直认为PPP协议和PPPoE协议属于底层协议.但是在一次抓包时候发现在校园网内的数据包都带有PPP协议层,因此去研究了一下. 1 PPP协议介绍 PPP 点对点协议( ...

  9. jt808终端鉴权_驾培协议和jt808协议的区别 | 车载GPS和视频平台产品经理

    交通部颁发的<机动车驾驶员计时培训系统平台技术规范>中的驾培TCP协议和jt808协议虽然很像,但有本质的不同,很多人以为就是部标808协议,这个认识是错误的,驾培协议是驾培协议,jt80 ...

最新文章

  1. 阿里云安全肖力:安全基础建设是企业数字化转型的基石
  2. 解决sdk manager 下载API失败的问题
  3. 【面试宝典】:《深度学习面试指南》重磅开源!
  4. 使用Cython库包对python的py文件(源码)进行加密,把python的.py文件生成.so文件并调用
  5. 阶段1 语言基础+高级_1-3-Java语言高级_1-常用API_1_第8节 Math类_18_数学工具类Math...
  6. python实现微信自动发信息_Python实现智慧-定期向微信女友发送消息,python,智给,定时,发消息...
  7. 郎溪 溪流_到无限(溪流)和超越!
  8. HDU 5439 Aggregated Counting
  9. python利用()写模块_介绍一下我自己写的一些Python模块
  10. centos安装GNOME打开emacs
  11. 大数据平台、从数仓 到 数据中台
  12. 【转载】士兵突击 经典语录
  13. Smobiler客户端会话
  14. 子曰:中庸之为德也,其至矣乎!民鲜久矣。
  15. linux 中etc全拼,英语etc_英语中“等等”缩写成为etc吗要加一点吗全拼是什么谢谢大家_淘题吧...
  16. [论文] Feature Squeezing:Detecting Adversarial Examples in Deep Neural Networks
  17. JSR 356 WebSocket (Java WebSocket 1.0) support is not available when running on Java 6. To suppress
  18. Linux:dd命令详解(df du命令参数)
  19. 做网站开发设计注意字体是否侵权
  20. 基于融云的即时通讯开发(一)

热门文章

  1. 易拉罐真的能增强WiFi信号!笔记本手机都适用
  2. java实现简单压缩与解压缩功能
  3. No.4PPT封面设计
  4. linux怎么运行dnf,dnf命令 - Linux命令大全 | linux教程
  5. 信息系统开发与管理【八】之 运行管理
  6. Python实现一个总体的均值、比例、方差检验
  7. Python copy()与deepcopy()方法的区别
  8. 简简单单玩转CSS3(1)
  9. 终端显示env: node\r: No such file or directory的解决办法
  10. ArcGIS基础:基于python代码简单计算坡度、坡向和洪水淹没