Skip to content

Commit 61c8093

Browse files
committed
01-爬虫预备知识
1 parent badd063 commit 61c8093

12 files changed

+357
-0
lines changed

.DS_Store

6 KB
Binary file not shown.

HTTP响应列表.md

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
# HTTP 响应头列表
2+
3+
应答头 | 说明
4+
------------- | -------------
5+
Allow | 服务器支持哪些请求方法(如GET、POST等)
6+
Content-Encoding | 文档的编码(Encode)方法。只有在解码之后才可以得到Content-Type头指定的内容类型。利用gzip压缩文档能够显著地减少HTML文档的下载时间。Java的GZIPOutputStream可以很方便地进行gzip压缩,但只有Unix上的Netscape和Windows上的IE 4、IE 5才支持它。因此,Servlet应该通过查看Accept-Encoding头(即request.getHeader("Accept-Encoding"))检查浏览器是否支持gzip,为支持gzip的浏览器返回经gzip压缩的HTML页面,为其他浏览器返回普通页面。
7+
Content-Length | 表示内容长度。只有当浏览器使用持久HTTP连接时才需要这个数据。如果你想要利用持久连接的优势,可以把输出文档写入 ByteArrayOutputStream,完成后查看其大小,然后把该值放入Content-Length头,最后通过byteArrayStream.writeTo(response.getOutputStream()发送内容。
8+
Content-Type | 表示后面的文档属于什么MIME类型。Servlet默认为text/plain,但通常需要显式地指定为text/html。由于经常要设置Content-Type,因此HttpServletResponse提供了一个专用的方法setContentType。
9+
Date | 当前的GMT时间。你可以用setDateHeader来设置这个头以避免转换时间格式的麻烦。
10+
Expires | 应该在什么时候认为文档已经过期,从而不再缓存它?
11+
Last-Modified | 文档的最后改动时间。客户可以通过If-Modified-Since请求头提供一个日期,该请求将被视为一个条件GET,只有改动时间迟于指定时间的文档才会返回,否则返回一个304(Not Modified)状态。Last-Modified也可用setDateHeader方法来设置。
12+
Location | 表示客户应当到哪里去提取文档。Location通常不是直接设置的,而是通过HttpServletResponse的sendRedirect方法,该方法同时设置状态代码为302。
13+
Refresh | 表示浏览器应该在多少时间之后刷新文档,以秒计。除了刷新当前文档之外,你还可以通过setHeader("Refresh", "5; URL=http://host/path")让浏览器读取指定的页面。 注意这种功能通常是通过设置HTML页面HEAD区的<META HTTP-EQUIV="Refresh" CONTENT="5;URL=http://host/path">实现,这是因为,自动刷新或重定向对于那些不能使用CGI或Servlet的HTML编写者十分重要。但是,对于Servlet来说,直接设置Refresh头更加方便。 注意Refresh的意义是"N秒之后刷新本页面或访问指定页面",而不是"每隔N秒刷新本页面或访问指定页面"。因此,连续刷新要求每次都发送一个Refresh头,而发送204状态代码则可以阻止浏览器继续刷新,不管是使用Refresh头还是<META HTTP-EQUIV="Refresh" ...>。 注意Refresh头不属于HTTP 1.1正式规范的一部分,而是一个扩展,但Netscape和IE都支持它。
14+
Server | 服务器名字。Servlet一般不设置这个值,而是由Web服务器自己设置。
15+
Set-Cookie | 设置和页面关联的Cookie。Servlet不应使用response.setHeader("Set-Cookie", ...),而是应使用HttpServletResponse提供的专用方法addCookie。参见下文有关Cookie设置的讨论。
16+
WWW-Authenticate | 客户应该在Authorization头中提供什么类型的授权信息?在包含401(Unauthorized)状态行的应答中这个头是必需的。例如,response.setHeader("WWW-Authenticate", "BASIC realm=\"executives\"")。 注意Servlet一般不进行这方面的处理,而是让Web服务器的专门机制来控制受密码保护页面的访问(例如.htaccess)。

HTTP请求列表.md

+148
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,148 @@
1+
# HTTP请求头列表
2+
## Host
3+
### 作用
4+
> 请求报头域主要用于指定被请求资源的Internet主机和端口号,它通常从HTTP URL中提取出来的
5+
6+
### 例如
7+
> 我们在浏览器中输入:http://www.hzau.edu.cn
8+
>
9+
> 浏览器发送的请求消息中,就会包含Host请求报头域,如下:
10+
>
11+
> Host:www.hzau.edu.cn
12+
>
13+
> 此处使用缺省端口号80,若指定了端口号,则变成:Host:指定端口号
14+
15+
## Connection
16+
### 作用
17+
> 表Connection表示是否需要持久连接。如果Servlet看到这里的值为“Keep-Alive”,或者看到请求使用的是HTTP 1.1(HTTP 1.1默认进行持久连接),它就可以利用持久连接的优点,当页面包含多个元素时(例如Applet,图片),显著地减少下载所需要的时间。要实现这一点,Servlet需要在应答中发送一个Content-Length头,最简单的实现方法是:先把内容写入ByteArrayOutputStream,然后在正式写出内容之前计算它的大小。
18+
19+
### 例如
20+
> Connection: Keepalive 告诉WEB服务器或者代理服务器,在完成本次请求的响应后,保持连接,等待本次连接的后续请求。
21+
>
22+
> Connection: Keep-Alive 如果浏览器请求保持连接,则该头部表明希望 WEB 服务器保持连接多长时间(秒),如Keep-Alive:300。
23+
>
24+
> Connection: close 告诉WEB服务器或者代理服务器,在完成本次请求的响应后,断开连接,不要等待本次连接的后续请求了。
25+
>
26+
## Upgrade-Insecure-Requests
27+
### 作用
28+
> 则是告诉服务器,自己支持这种操作,也就是我能读懂你服务器发过来的上面这条信息,并且在以后发请求的时候不用http而用https
29+
30+
## User-Agent
31+
### 作用
32+
> 告诉HTTP服务器, 客户端使用的操作系统和浏览器的名称和版本.
33+
34+
> 我们上网登陆论坛的时候,往往会看到一些欢迎信息,其中列出了你的操作系统的名称和版本,你所使用的浏览器的名称和版本,这往往让很多人感到很神奇,实际上,服务器应用程序就是从User-Agent这个请求报头域中获取到这些信息User-Agent请求报头域允许客户端将它的操作系统、浏览器和其它属性告诉服务器。
35+
36+
### 例如
37+
> User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; CIBA; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; InfoPath.2; .NET4.0E)
38+
39+
## Accept
40+
### 作用
41+
> 浏览器端可以接受的媒体类型
42+
43+
### 例如
44+
> Accept: text/html 代表浏览器可以接受服务器回发的类型为 text/html 也就是我们常说的html文档,
45+
46+
> 如果服务器无法返回 text/html 类型的数据,服务器应该返回一个406错误(non acceptable)
47+
48+
> 通配符 * 代表任意类型
49+
50+
> Accept: */* 代表浏览器可以处理所有类型,(一般浏览器发给服务器都是发这个)
51+
52+
## Accept-Encoding
53+
### 作用
54+
> 浏览器申明自己接收的编码方法,通常指定压缩方法,是否支持压缩,支持什么压缩方法(gzip,deflate),(注意:这不是只字符编码);
55+
56+
### 例如
57+
> Accept-Encoding: zh-CN,zh;q=0.8
58+
59+
## Referer
60+
### 作用
61+
> 当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器籍此可以获得一些信息用于处理。比如从我主页上链接到一个朋友那里,他的服务器就能够从HTTP Referer中统计出每天有多少用户点击我主页上的链接访问他的网站。
62+
63+
## Accept-Language
64+
### 作用
65+
> 浏览器申明自己接收的语言。 语言跟字符集的区别:中文是语言,中文有多种字符集,比如big5,gb2312,gbk等等;
66+
67+
### 例如
68+
> Accept-Language: en-us
69+
70+
## Content-Length
71+
### 作用
72+
> 表示请求消息正文的长度。
73+
74+
## Cache-Control
75+
### 作用
76+
> 我们网页的缓存控制是由HTTP头中的“Cache-control”来实现的,常见值有private、no-cache、max-age、must-revalidate等,默认为private。这几种值的作用是根据重新查看某一页面时不同的方式来区分的:
77+
>
78+
> (1)、打开新窗口
79+
>
80+
> 值为private、no-cache、must-revalidate,那么打开新窗口访问时都会重新访问服务器。而如果指定了max-age值(单位为秒),那么在此值内的时间里就不会重新访问服务器,例如:
81+
>
82+
> Cache-control: max-age=5 (表示当访问此网页后的5秒内再次访问不会去服务器)
83+
>
84+
> (2)、在地址栏回车
85+
>
86+
> 值为 private 或 must-revalidate 则只有第一次访问时会访问服务器,以后就不再访问。
87+
>
88+
> 值为 no-cache ,那么每次都会访问。
89+
>
90+
> 值为 max-age ,则在过期之前不会重复访问。
91+
>
92+
> (3)、按后退按扭
93+
>
94+
> 值为 private、must-revalidate、max-age,则不会重访问,
95+
>
96+
> 值为 no-cache,则每次都重复访问
97+
>
98+
> (4)、按刷新按扭
99+
>
100+
> 无论为何值,都会重复访问
101+
102+
## Cookie
103+
### 作用
104+
> Cookie是用来存储一些用户信息以便让服务器辨别用户身份的(大多数需要登录的网站上面会比较常见),比如cookie会存储一些用户的用户名和密码,当用户登录后就会在客户端产生一个cookie来存储相关信息,这样浏览器通过读取cookie的信息去服务器上验证并通过后会判定你是合法用户,从而允许查看相应网页。当然cookie里面的数据不仅仅是上述范围,还有很多信息可以存储是cookie里面,比如sessionid等。
105+
106+
## Content-Type
107+
### 作用
108+
> 表示后面的文档属于什么MIME类型。Servlet默认为text/plain,但通常需要显式地指定为text/html。由于经常要设置Content-Type,因此HttpServletResponse提供了一个专用的方法setContentType。
109+
110+
### 例如
111+
> Content-Type: text/html
112+
113+
## If-Modified-Since
114+
### 作用
115+
> 把浏览器端缓存页面的最后修改时间发送到服务器去,服务器会把这个时间与服务器上实际文件的最后修改时间进行对比。如果时间一致,那么返回304,客户端就直接使用本地缓存文件。如果时间不一致,就会返回200和新的文件内容。客户端接到之后,会丢弃旧文件,把新文件缓存起来,并显示在浏览器中.
116+
117+
### 例如
118+
> If-Modified-Since : Mon, 17 Aug 2015 12:03:33 GMT
119+
120+
## If-None-Match
121+
### 作用
122+
> If-None-Match和ETag一起工作,工作原理是在HTTP Response中添加ETag信息。 当用户再次请求该资源时,将在HTTP Request 中加入If-None-Match信息(ETag的值)。如果服务器验证资源的ETag没有改变(该资源没有更新),将返回一个304状态告诉客户端使用本地缓存文件。否则将返回200状态和新的资源和Etag. 使用这样的机制将提高网站的性能
123+
124+
### 例如
125+
> If-None-Match: W/"3119-1437038474000"
126+
127+
## Authorization
128+
### 作用
129+
> 授权信息,通常出现在对服务器发送的WWW-Authenticate头的应答中。
130+
131+
## Upgrade
132+
### 作用
133+
> 它可以指定另一种可能完全不同的协议,如HTTP/1.1客户端可以向服务器发送一条HTTP/1.0请求,其中包含值为“HTTP/1.1”的Update头部,这样客户端就可以测试一下服务器是否也使用HTTP/1.1了。
134+
135+
## Proxy-Authenticate
136+
### 作用
137+
> 代理服务器响应浏览器,要求其提供代理身份验证信息。
138+
139+
## Proxy-Authorization
140+
### 作用
141+
> 浏览器响应代理服务器的身份验证请求,提供自己的身份信息。
142+
143+
## Range
144+
### 作用
145+
> 浏览器(比如 Flashget 多线程下载时)告诉 WEB 服务器自己想取对象的哪部分。
146+
147+
### 例如
148+
> Range: bytes=1173546

images/http.png

42.3 KB
Loading

images/http的url规则.jpg

26.3 KB
Loading

images/响应格式.jpg

35.8 KB
Loading

images/模型对应图.jpg

62.4 KB
Loading

images/爬虫流程图.png

53.6 KB
Loading

images/网络模型图.jpg

177 KB
Loading

images/请求协议格式.png

9.91 KB
Loading

images/请求协议案例.jpg

109 KB
Loading

爬虫预备知识.md

+193
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,193 @@
1+
# 爬虫预备知识
2+
> 爬虫课程中所需要的相关知识储备
3+
4+
5+
## 概要
6+
- 爬虫``定义````分类````流程``
7+
- ``http````https``
8+
9+
### 爬虫定义、分类和流程
10+
11+
#### 爬虫定义
12+
> 网络爬虫(又被称为网页蜘蛛,网络机器人)就是模拟浏览器发送网络请求,接收请求响应,一种按照一定的规则,自动地抓取互联网信息的程序。
13+
14+
> 原则上,只要是浏览器(客户端)能做的事情,爬虫都能够做
15+
16+
#### 爬虫的分类
17+
1. ``通用爬虫``:通常指搜索引擎的爬虫
18+
2. ``聚焦爬虫``:针对特定网站的爬虫
19+
20+
#### 爬虫的用途
21+
- 今日头条
22+
- 网易云音乐
23+
- 12306抢票
24+
- 网站自动投票
25+
- 短信轰炸
26+
- 等等
27+
28+
#### 爬虫的流程
29+
![](./images/爬虫流程图.png)
30+
1. 向起始url发送请求,并获取响应
31+
2. 对响应进行提取
32+
3. 如果提取url,则继续发送请求获取响应
33+
4. 如果提取数据,则将数据进行保存
34+
35+
#### robots协议
36+
> Robots协议:网站通过Robots协议告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取,但它仅仅是道德层面上的约束 例如:[淘宝的robots协议](https://www.taobao.com/robots.txt)
37+
38+
### 总结
39+
- 爬虫概念:模拟浏览器发送网络请求,接收请求响应。只要是浏览器(客户端)能做的事情,爬虫都能够做。
40+
- 爬虫的分类:聚焦爬虫、通用爬虫
41+
- 爬虫的流程:
42+
1. 向起始url发送请求,并获取响应
43+
2. 对响应进行提取
44+
3. 如果提取url,则继续发送请求获取响应
45+
4. 如果提取数据,则将数据进行保存
46+
47+
48+
### HTTP 与 HTTPS
49+
50+
#### HTTP 与 HTTPS 的概念
51+
52+
##### HTTP
53+
> 概念:HTTP(超文本传输协议)是应用层上的一种客户端/服务端模型的通信协议,它由请求和响应构成,且是无状态的。
54+
> 协议:协议规定了通信双方必须遵守的数据传输格式,这样通信双方按照约定的格式才能准确的通信。
55+
> 无状态:无状态是指两次谅解通信之间是没有任何联系的,每次都是一个新的连接,服务端不会记录前后的请求信息。
56+
57+
###### HTTP请求流程
58+
59+
![](./images/http.png)
60+
61+
1. 浏览器通过域名解析服务器(DNS)获取IP地址
62+
2. 浏览器先向IP发起请求,并获取相应
63+
3. 在返回的响应内容(html)中,会带有css、js、图片等url地址,以及ajax代码,浏览器按照响应内容中的顺序依次发送其他的请求,并获取相应的响应
64+
4. 浏览器每获取一个响应就对展示出的结果进行添加(加载),js,css等内容会修改页面的内容,js也可以重新发送请求,获取响应
65+
5. 从获取第一个响应并在浏览器中展示,直到最终获取全部响应,并在展示的结果中添加内容或修改————这个过程叫做浏览器的渲染
66+
67+
###### 五层网络模型
68+
69+
![](./images/网络模型图.jpg)
70+
71+
###### 网络模型对应关系表
72+
73+
![](./images/模型对应图.jpg)
74+
75+
###### 对应关系
76+
77+
1. HTTP -------> 应用层
78+
2. TCP -------> 传输层
79+
3. IP -------> 网络层
80+
4. 数据链路 -------> 数据链路层
81+
5. 物理介质 -------> 物理层
82+
83+
###### url地址格式
84+
85+
![](./images/http的url规则.jpg)
86+
> 格式说明: scheme://host[:port]/path/…/[?query-string][#anchor]
87+
88+
1. scheme:协议(例如:http, https, ftp)
89+
2. host:服务器的IP地址或者域名
90+
3. port:服务器的端口(如果是走协议默认端口,缺省端口80)
91+
4. path:访问资源的路径
92+
5. query-string:参数,发送给http服务器的数据
93+
6. anchor:锚(跳转到网页的指定锚点位置)
94+
95+
###### HTTP 请求
96+
- 请求格式
97+
![](./images/请求协议格式.png)
98+
99+
- 案例
100+
![](./images/请求协议案例.jpg)
101+
102+
- **请求方式**
103+
> 根据HTTP标准,HTTP请求可以使用多种请求方法。
104+
>
105+
> HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。
106+
>
107+
> HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。
108+
109+
请求方式 | 描述
110+
------------- | -------------
111+
GET | 请求指定的页面信息,并返回实体主体。
112+
HEAD | 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头
113+
POST | 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
114+
PUT | 从客户端向服务器传送的数据取代指定的文档的内容
115+
DELETE | 请求服务器删除指定的页面。
116+
CONNECT | HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
117+
OPTIONS | 允许客户端查看服务器的性能。
118+
TRACE | 回显服务器收到的请求,主要用于测试或诊断。
119+
120+
- **常见请求头**
121+
122+
请求头 | 作用
123+
------------- | -------------
124+
**Cookie** | Cookie
125+
**User-Agent** | 浏览器名称
126+
**Referer** | 页面跳转处
127+
Host | 主机和端口号
128+
Connection | 链接类型
129+
Upgrade-Insecure-Requests | 升级为 HTTPS 请求
130+
Accept | 传输文件类型
131+
Accept-Encoding | 文件编解码格式
132+
x-requested-with : XMLHttpRequest | ajax 请求
133+
134+
[点击查看更多]()
135+
136+
###### HTTP 响应
137+
138+
- **响应格式**
139+
140+
> HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行(回车符 + 换行符)和响应正文。
141+
![](./images/响应格式.jpg)
142+
143+
- **响应头**
144+
145+
146+
响应头 | 作用
147+
------------- | -------------
148+
**Location** | 这个头配合302状态码使用,告诉用户端找谁。
149+
**Set-Cookie** | 设置和页面关联的Cookie
150+
Content-Type | 服务器通过这个头,回送数据的类型
151+
Server | 服务器通过这个头,告诉浏览器服务器的类型
152+
Content-Length | 服务器通过这个头,告诉浏览器回送数据的长度
153+
Connection | 服务器通过这个头,响应完是保持链接还是关闭链接
154+
155+
- **HTTP 状态码**
156+
157+
>当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头(server header)用以响应浏览器的请求。
158+
>
159+
> HTTP状态码的英文为HTTP Status Code。
160+
>
161+
> HTTP 状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型,后两个数字没有分类的作用。HTTP 状态码共分为5种类型
162+
163+
分类 | 分类描述
164+
------------- | -------------
165+
1** | 信息,服务器收到请求,需要请求者继续执行操作
166+
2** | 成功,操作被成功接收并处理
167+
3** | 重定向,需要进一步的操作以完成请求
168+
4** | 客户端错误,请求包含语法错误或无法完成请求
169+
5** | 服务器错误,服务器在处理请求的过程中发生了错误
170+
171+
- 常见的HTTP状态码:
172+
- 200 - 请求成功
173+
- 301 - 资源(网页等)被永久转移到其它URL
174+
- 404 - 请求的资源(网页等)不存在
175+
- 500 - 内部服务器错误
176+
177+
[点击查看更多]()
178+
179+
##### HTTPS
180+
- HTTP + SSL(安全套接字层),即带有安全套接字层的超本文传输协议
181+
- 默认端口号:443
182+
183+
- **HTTPS 作用**
184+
> 在 传输过程中 对数据进行加密,防止中间路由器、交换机等中间的路由设备对数据进行篡改。
185+
186+
- **HTTP 与 HTTPS 优缺点**
187+
> HTTP 因为不需要对数据进行加密所以性能更高,但是安全性差。
188+
>
189+
>
190+
>HTTPS 虽然安全性高,但是因为浏览器和服务器端需要对数据进行加解密,所以占用服务器资源。
191+
192+
- **当前形式**
193+
> 注意:目前HTTPS是未来主流,微信小程序,iOS客户端,android客户端 的接口提供都需要 HTTPS 接口支持。

0 commit comments

Comments
 (0)