爬虫基础
一、HTTP基本原理
1.应用架构
- c/s 即 client server 客户端 服务端
- b/s 即 browser server 浏览器 服务端
- m/s 即 moblie server 移动端 服务端
2.URI和URL
- URI中文是统一资源标志符,URL中文是统一资源定位符
- URI包含URL和URN,URN用得非常少,URN只命名资源而不指定如何定位资源,发送http请求时,通过URL对网络资源进行定位
- URL是用来标识某一处资源的地址,即网址。URL的组成:访问协议、域名(IP地址和端口)、路径、参数
3.超文本
超文本,英文名hypertext,网页由超文本解析而成,在网页右击选择检查即可打开浏览器的开发者工具,Elements面板可查看网页的源代码(超文本)
Elements面板
4.HTTP和HTTPS
- 目前互连网上90%的网络传输都是基于HTTP协议。HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。HTTP协议的默认端口是80
- HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer 或 Hypertext Transfer Protocol Secure,超文本传输安全协议),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。HTTP协议是基于TCP/IP协议的,而HTTPS是在HTTP协议的基础之上,再加了一层SSL/TLS协议,数据在传输过程中是加密的。HTTPS协议的默认端口是443
5.HTTP请求过程
-
一次HTTP请求的基本流程:有客户端向服务端发起一次请求(request),而服务器在接收到以后返回给客户端一个响应(response)
-
一次完整的HTTP请求包含请求和响应两部分,开发者模式下Network可以显示访问当前请求网页时发生的所有网络请求和响应
Network面板
- Name:请求的名称,一般为URL最后一部分
- Status:响应的状态码,判断发送请求后响应的状态
- Type:请求的文档类型,document、stylesheet、script、png等
- Initiator:请求源,标记请求由谁发起
- Size:从服务器下载的文件和请求的资源大小,若是缓存中取得的资源则显示from cache
- Time:发起请求到获取相应所用的总时间
- Waterfall:网络请求的可视化瀑布流
点击其中条目可查看详细信息
General部分
- Request URL: 请求的url
- Request Method: 请求的方法
- Status Code: 响应状态码
- Remote Address: 远程服务器的端口和地址
- Referrer Policy: Referer判别策略
6.请求
请求,由客户端向服务端发出,分为4部分内容:请求方法(Request Method)、请求的网址(Request URL)、请求头(Request Headers)、请求体(Request Body)
(1).请求报文
# 请求报文的格式
请求方法 空格 URL 空格 协议及版本 回车符 换行符
头部字段名 : 值 回车符 换行符
···
头部字段名 : 值 回车符 换行符
回车符 换行符
# 举例
GET / HTTP/1.0 \r\nHost:www.baidu.com\r\n\r\n
(2).请求方法(Request Method)
HTTP/1.0定义了三种请求方法:GET,POST和HEAD方法
HTTP/1.1新增了五种请求方法:OPTIONS,PUT,DELETE,TRACE和CONNECT方法
序号 | 方法 | 描述 |
---|---|---|
1 | GET | 请求指定的页面,并返回页面内容 |
2 | HEAD | 类似于GET请求,只不过返回的响应中没有具体的内容,用于获取报头 |
3 | POST | 向指定资源提交数据惊醒数据处理(例如提交表单或上传文件),数据包含在请求体中 |
4 | PUT | 从客户端向服务器传送的数据取代指定文档中的数据 |
5 | DELETE | 请求服务器删除指定页面 |
6 | CONNECT | HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器 |
7 | OPTIONS | 允许客户端查看服务器的性能 |
8 | TRACE | 回显服务器收到的请求,主要用于测试或诊断 |
GET和POST的区别:GET请求中的参数包含在URL中,数据可以从URL中看到,提交的数据最多有1024字节。POST请求的URL不包含这些数据,数据都是通过表单形式传输,包含在请求体中,提交的数据大小没有限制
(3).请求的网址(Request URL)
(4).请求头(Request Headers)
Request Headers部分
- Accept: 指定客户端可接受哪些类型的信息
- Accept-Encoding: 指定客户端能接收的编码方式
- Accept-Language: 指定客户端可接受的语言类型,en、en-us指英文,zh、zh-cn指中文
- Cache-Control: 指定请求和响应遵循的缓存机制
- Connection: 客户端与服务器链接类型,keep-alive指保持链接,close指关闭链接
- Cookie: 网站为了辨别用户进行会话跟踪而存储在用户本地的数据,用于维持当前访问会话
- Host: 指定请求资源的域名(IP地址和端口号)
- User-Agent: 简称UA,使服务端识别客户端使用的操作系统及版本、浏览器及版本等信息,做爬虫时用于伪装成浏览器
- Referer:表明产生请求的网页来自哪个URL,用于跟踪WEB请求来源
- Content-Type:表明具体请求中的媒体类型信息,text/html指HTML格式,application/json指JSON类型
- Content-length:表明内容长度
- Content-Range:响应的资源范围
(5).请求体(Request Body)
请求体的内容一般是POST请求中的表单数据,GET请求的请求体为空
7.响应
响应,由服务端返回给客户端,分为3部分内容:响应状态码(Response Status Code)、响应头(Response Headers)、响应体(Response Body)
(1).响应状态码(Response Status Code)
当客户端向服务端发起一次请求后,服务端在返回的响应头中会包含一个HTTP状态码,HTTP的状态码是由三位数字来表示的,由第一位数字来表示状态码的类型,一般来说有五种类型
分类 | 分类描述 |
---|---|
1** | 信息,服务器收到请求,需要请求者继续执行操作 |
2** | 成功,操作被成功接收并处理 |
3** | 重定向,需要进一步的操作以完成请求 |
4** | 客户端错误,请求包含语法错误或无法完成请求 |
5** | 服务器错误,服务器在处理请求的过程中发生了错误 |
(2).响应头(Response Headers)
Response Headers部分
- Cache-Control: 指定请求和响应遵循的缓存机制
- Content-Encoding: 指定响应内容的编码
- Content-Type: 指定返回的媒体类型信息
- Date: 标识响应产生的时间
- Expires: 指定响应的过期时间
- Last-Modified: 指定资源的最后修改时间
- Server: 指定服务器的信息
- Set-Cookie:设置Cookies,响应头中的Set-cookie告诉浏览器将此内容放置在Cookies中,下次请求携带Cookies请求,每写入一个cookie都会生成一个Set-cookie
(3).响应体(Response Body)
响应的正文数据都在响应体中,Preview区域可以看到网页的源代码,即响应体的内容,它是解析的目标
Preview区域
8.HTTP协议的特点
- HTTP是无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接,采用这种方式可以节省传输时间
- HTTP是媒体独立的:这意味着,只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。客户端以及服务器指定使用适合的MIME-type内容类型
- HTTP是无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力,缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大,另一方面,在服务器不需要先前信息时它的应答就较快
9.HTTP请求测试网站
www.httpbin.org
二、爬虫的基本原理
1.爬虫的概念
网络爬虫也叫网络蜘蛛,它特指一类自动批量下载网络资源的程序,更加专业和全面对的定义是:网络爬虫是伪装成客户端与服务端进行数据交互的程序
2.爬虫的应用
-
数据采集
大数据时代来临,数据就是核心,数据就是生产力,越来越多的企业开始注重收集用户数据,而爬虫技术是收集数据的一种重要手段。
-
搜索引擎
百度,谷歌等搜索引擎都是基于爬虫技术。
-
模拟操作
爬虫也被广泛用于模拟用户操作,测试机器人,灌水机器人等
3.爬虫的流程
- 1.找到目标数据
- 2.分析请求流程
- 3.构造http请求
- 4.提取清洗数据
- 5.数据持久化
4.爬虫的难点
-
数据的获取
网络公共资源都是为用户准备的,为了避免被爬虫采集,服务端会设置非常多的图灵测试,阻止爬虫的恶意爬取,也即是反爬措施,爬虫开发工程师在开发爬虫时,需要解决这些反爬措施
-
采集的速度
大数据时代,需要巨大的数据量,动辄千万条的级别,甚至上亿条,如果采集速度跟不上,耗时过长,那么就达不到商业要求,一般我们会采取并发以及分布式来解决速度上的问题。
三、会话和Cookies
1.无状态HTTP
HTTP的一个特点是无状态,指HTTP协议对事务处理是没有记忆能力的。因此出现了用于保持HTTP连接状态的技术:会话和Cookies。会话在服务端,用来保存用户的会话信息。Cookies在客户端,浏览器在下次访问网页时会自动附带上它发送给服务器,服务器通过识别Cookies并鉴别用户,判断用户的登录状态,返回对应的响应
2.Cookies
Cookies指某些网站为了辨别用户、进行会话跟踪而存存储在用户本地终端上的数据,可以理解为一个凭证,在开发者工具中打开Application面板,选择Cookies可查看网站的Cookie
Application面板
Cookies部分
- Name:Cookie的名称,一旦创建便不可修改
- Value:Cookie的值,若为Unicode字符则需要字符编码,若为二进制数据,则需要BASE64编码
- Domain:可以访问该Cookie的域名
- Max Age:Cookie失效的时间,单位秒
- Path:Cookie的使用路径,/表示该域名下所有页面均可访问此Cookie
- Size:Cookie的大小
- HTTP:Cookie的httponly属性
- Secure:该cookie是否仅被使用安全协议传输,默认为false
3.会话(Session)
session是基于cookie的,Session的目的是在一个客户从打开浏览器到关闭浏览器这个期间内,发起的所有请求都可以被识别为同一个用户。而实现的方式则是,在一个客户打开浏览器开始访问网站的时候,会生成一个cookie,SessionID,这个ID每次的访问都会带上,而服务器会识别这个SessionID并且将与这个SessionID有关的数据保存在服务器上,由此来实现客户端的状态识别
Session是存储在服务器上的数据,只由客户端传上来的SessionID来进行判定,所以相对于Cookie,Session的安全性更高,一般SessionID会在浏览器被关闭时丢弃,或者服务器会验证Session的活跃程度,例如30分钟某一个SessionID都没有活跃,那么也会被识别为失效