Python数据分析___爬虫入门—1
1 爬虫入门:
1.1 浏览器 Vs 服务器(DNS 、Web)
第一步,打开Google Chrome浏览器,以下简称Google浏览器
第二步,输入:http://www.baidu.com ,按回车,发生了以下过程:
(1)Google浏览器发送给DNS服务器:http://www.baidu.com (这是URL:统一资源定位符)
(2)DNS服务器返回给Google浏览器:14.215.177.39(这是IP地址)
(3)Google浏览器,根据IP地址(14.215.177.39),找到对应的Web服务器(如淘宝的服务器):
第三步,Google浏览器 和 Web服务器,两者之间有2次通信过程
(1)Google浏览器,向Web服务器请求html文件,Web服务器响应请求,返回html文件
(2)Google浏览器,分析html文件中的引用请求(如引用图片),发送请求给Web服务器,获取文件。
(3)Google浏览器,把得到的所有文件,根据HTML语法结构,渲染显示出一个页面
说明:URL转化为IP地址的过程,就是域名解析
1.2 啥是URL?
URL:统一资源定位符,全称:Uniform / Universal Resource Locator
比如:http://www.hao123.com:8888/ok/?kobe=24,就是一个URL;
Url = 通信协议+域名+端口+资源路径+查询参数
http是通信协议 www.hao123.com是域名
8888是端口号 ok是访问资源路 kobe=24是查询参数
1.3 HTTP的基础知识
打开浏览器,输入www.baidu.com,回车,右键检查,选择Network,单击左侧name下的www.baidu.com
1.3.1 基本结构
(1)头信息(Headers):
总体信息:
请求报文: 请求行+请求头+空行+请求体(GET没有,POST有)
响应报文: 响应行+响应头+空行+响应体
(2)响应体(Response):
1.3.2 请求报文示例:GET方法
GET / HTTP/1.1 请求行:请求方式+ 资源路径+HTTP/协议版本
Host: www.itcast.cn 请求头:端口号默认是80
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: pgv_pvi=1246921728;
空行
说明:
(1)Connection : keep-alive
重用连接,减少资源消耗,缩短响应时间。
比如当浏览器需要多个文件时(比如一个HTML文件和多个Image文件),不需要每次都去请求建立连接。
(2)Upgrade-Insecure-Requests:
浏览器自动升级请求,从http到https,用于大量包含http资源的http网页直接升级到https而不会报错
否则,对于https页面,页面中又链接了http资源,那么浏览器在解析的时候,就会报错,协议不一样嘛。。
(3)User-Agent (浏览器名称)
标识客户端身份的名称,通常页面会根据不同的客户端身份,自动做出适配,甚至返回不同的响应内容。
(4)Accept (传输文件类型)
指浏览器或其他客户端可以接受的文件类型,服务器可以根据它判断并返回适当的文件格式。
(5)Accept-Charset(字符编码)
可以接受的字符编码。
(6)Cookie:
浏览器用这个属性向服务器发送Cookie。
(7)Content-Type:
POST请求里用来表示的内容类型。
1.3.3 请求报文示例:POST方法
POST /xmweb?host=mail.itcast.cn&_t=1542884567319 HTTP/1.1 请求行
Host: mail.itcast.cn 请求体
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36
空行
username=hello&pass=hello 请求体
1.3.4 响应报文示例:
HTTP/1.1 200 OK 响应行:HTTP/协议版本+状态码+状态描述
Server: Tengine 响应头
Connection: keep-alive
Date: Wed, 30 Nov 2016 07:58:21 GMT
Cache-Control: no-cache
Content-Type: text/html;charset=UTF-8
Keep-Alive: timeout=20
Vary: Accept-Encoding
Pragma: no-cache
X-NWS-LOG-UUID: bd27210a-24e5-4740-8f6c-25dbafa9c395
Content-Length: 180945
空行
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" .... 响应体
说明:
(1)Cache-Control:must-revalidate, no-cache, private。
服务端告诉客户端,不希望客户端缓存资源,下次请求时,要重新请求服务器,不能从缓存副本中获取资源。
(2) Connection:keep-alive
服务器告诉客户端,服务器的tcp连接也是一个长连接,客户端可以继续使用这个tcp连接发送http请求。
(3) Content-Encoding:gzip
服务端告诉客户端,发送的资源是采用gzip编码的,客户端看到这个信息后,应该采用gzip对资源进行解码。
(4)Content-Type:text/html;charset=UTF-8
服务器告诉客户端,客户端应该通过utf-8对资源进行解码,然后对资源进行html解析。
(5)Date:Wed, 30 Nov 2016 07:58:21 GMT
服务端发送资源时的服务器时间,GMT是格林尼治所在地的标准时间。
(6)Expires:Sun, 1 Jan 2000 01:00:00 GMT
服务端告诉客户端在这个时间前,可以直接访问缓存副本。
(7) Server:Tengine/1.4.6
服务端告诉客户端,服务器的信息
(8)Transfer-Encoding:chunked
服务端告诉客户端,服务器发送的资源的方式是分块发送的。
一般分块发送的资源都是服务器动态生成的,在发送时还不知道发送资源的大小,所以采用分块发送.
每一块都是独立的,独立的块都能标示自己的长度,最后一块是0长度的,当客户端读到这个0长度的块时,就可以确定资源已经传输完了。
1.3.5 响应状态码
响应状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值
100~199
:表示服务器成功接收部分请求,要求客户端继续提交其余请求才能完成整个处理过程。200~299
:表示服务器成功接收请求并已完成整个处理过程。常用200(OK 请求成功)。300~399
:为完成请求,客户需进一步细化请求。例如:请求的资源已经移动一个新地址、常用302(所请求的页面已经临时转移至新的url)、307和304(使用缓存资源)。400~499
:客户端的请求有错误,常用404(服务器无法找到被请求的页面)、403(服务器拒绝访问,权限不够)。500~599
:服务器端出现错误,常用500(请求未完成。服务器遇到不可预知的情况)。