基本概念:
1、通用爬虫:可理解为搜索引擎,例如百度、google等,针对的是互联网上所有的资源
2、聚焦爬虫:可理解为爬取指定内容的爬虫
3、URI:统一资源标识符,即标明网络资源的字符串
4、URL:统一资源定位符,即网络资源的地址,包括协议、服务器名称或IP、文件资源的路径三部分组成
5、DNS服务器:用于解析网址,返回服务器IP地址的服务器。
爬虫所依赖的应用层的协议:HTTP协议(超文本传输协议,用于收发HTML)、HTTPS协议(HTTP协议的安全版,在HTTP的基础上添加SSL层(安全套接层),保证了数据传输的安全性)。
数据传输的流程:
1、用户在浏览器的地址栏中键入URL并回车后,浏览器向DNS服务器发送请求。
2、DNS服务器返回某IP地址,该IP地址拥有前面请求的资源。
3、浏览器向拥有某资源的服务器发送request请求。
4、服务器返回response响应。
5、浏览器解析response响应,如果响应中还有其他链接,则继续请求,直至完成。
6、浏览器渲染response,并显示。
客户端HTTP之request请求包括:请求行(请求方法、url、版本协议)、请求报头、空行、请求数据
服务器HTTP之response响应包括:状态行、消息报头、空行、响应正文
浏览器请求方法:
GET 请求指定页面,返回实体主体
HEAD 请求指定页面,返回报头
POST 请求指定页面前,先提交数据,并返回指定内容。
PUT 从客户端向服务器传输数据,用于取代指定文档的内容
DELETE 请求服务器删除指定页面
CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器(不理解啥意思)。
OPTIONS 允许客户端查看服务器的性能
TRACE 回显服务器收到的请求,主要用于测试或诊断
常用的请求报头:
1、Host(主机和端口号):对应网址URL的web名称和端口号
2、Connection(链接类型):表示客户端与服务器的链接类型,Connection:keep-alive | close
3、Upgrade-Insecure-Requests:升级为HTTPS的请求
4、User-Agent:浏览器的名称
5、Accept(传输文件类型):*/* | image/gif | text/html
6、Referer(页面跳转处):表名产生请求的网页来自于哪个URL
7、Accept-Encoding(文件编解码格式):指浏览器可以接受的编码方式
8、Accept-Language(语言种类):指浏览器可以接受的语言种类,en | en-us | zh | zh-cn
9、Accept-Charset(字符编码):指浏览器可以接受的字符编码,iso-8859-1 | gb2312 | utf-8
10、Cookie:寄存在浏览器中的小型数据体,记载了用户的信息。
11、Content-Type(post数据类型):请求数据的类型
常用的响应报头:
1、Cache-Control:must-revalidate,no-cache,private
2、Connection:keep-alive
3、Content-Encoding:gzip
4、Content-Type:text/html;charset=UTF-8
5、Date:标准时间
6、Expires
7、Pragma:no-cache
8、Server:Tengine/1.4.6
9、Transfer-Encoding:chunked 分块发送
10、Vary:Accept-Encoding 是否是压缩文件
Cookie:通过在 客户端 记录的信息确定用户的身份
Session:通过在 服务器 记录的信息确定用户的身份
响应状态码:
100~199:表示服务器成功接收部分请求,要求客户端继续提交剩余请求才完成处理过程
200~299:表示服务器成功接收请求,并已完成整个处理过程
300~399:为完成请求,客户需进一步细化请求,即重定向
400~499:客户端的请求有错误,常用404(服务器无法找到文件),403(拒绝访问,权限不够)
500~599:服务器端出现错误,常用500
bytes:
数据在互联网上是通过二进制传输的,所以在传输时,需要将 str 转换成 bytes 格式;在接收时,通过 decode()解码成需要的编码进行数据处理。
补充说明:在Python2中,不区分str和bytes,所以可以直接通过 encode() 和 decode() 方法进行编码解码