请求过程与网页基础
1. 请求过程与网页基础(⭐⭐⭐)
1.1 URL介绍
- URL请求的网址,即统一资源定位符,它可以唯一确定我们想要请求的资源,其结构如下: https://www.baidu.com/s?wd=%E6%96%87%E6%A3%AEXE7%89%B9&rsv-spt=1
协议 域名 查询的参数 https://www.baidu.com/s? wd-%E6%96%87%E6%A3%AEXE7%89%B9&rsv-spt=1arsy.iqid-0x93f35fo200053440& issp=18f-88rsv_bp=1&rsv_idxe2&ie-utf- 8&rqlang-cn&tn=baiduhome_pg&rsv_enten-arsy.di-tb&og-%25E6%2596%2587% 25E6%25A3%25AE%25E7%2589%25898rsv_t=88fABjVuRyvsfEzBevOZNBFeFqfiy5vuN gPQXX3n96%2BVTKUbBBKE1nwa%2BxXzuCTSTUM&rsv_sugl-5&rsv_sug7-1ee&rsv_p q=d2e9c48980055de5&rsv_btype=t&inputT=546548rsv_sug4=68279
请求过程:
客户端,通常指web浏览器或APP向服务器发起请求,服务器接收到请求进行处理,并向客户端发起响应 # 与django做对比: 用户访问url ---> uwsgi ---> 框架:urls.py ---> 视图 ---> 响应 ---> uwsgi ---> 浏览器 ---> 渲染
1.2 请求(⭐⭐⭐⭐)
请求:由客户端向服务器发出的,可以分为四部分内容:请求方法(Request Method),请求网址(Request URL),请求头(Request Headers),请求体(Request Body)
请求方法:常见有8种:
- GET:请求页面,并返回页面内容 # 重点 - POST:用于提交表单数据或上传文件,数据包包含在请求体中 # 重点 - PUT:从客户端向服务器传送的数据取代指定文档中的内容 - DELETE:请求服务器删除指定的页面 - HEAD:类似于GET请求,只不过返回的响应中没有具体内容,用于获取报头 - CONNECT:把服务器当作跳板,让服务器代替客户端访问其他页面 - OPTIONS:允许客户端查看服务器性能 - TRACE: 回显服务器收到的请求,主要用于测试或诊断 # 重点掌握get & post (get与post区别⭐⭐⭐⭐⭐)面试率高 1.get请求中参数包含在url里面,数据包可以在url中看到,而post请求的url不会包含这些数据,post数据都是通过表单形式传输的,会包含在请求体中 2.get请求提交的数据最多只有1024字节,而post请求没有限制 3.post请求比get请求相对安全
请求头:
请求头,用来说明服务器要使用的附加信息.重点掌握:Accpet,Cookie,Referer,User-Agent,Host
- Accept:请求报头域,用于指定客户端可以接受那些类型的信息 # 重点
- Cookie:也常用复数形式Cookies,这是网站用于辨别用户进行会话跟踪而存储在用户本地的数据。它主要功能是维护当前访问会话。
例如,我们输入用户名和密码成功登录某个网站后,服务器会用会话保存登录状态信息,后面我们每次请求或刷新该站点其他页面时,会发现都是登录状态,这就是cookies的功劳。cookies有信息标识了我们所对应服务器的会话,每次服务器在请求该站点的页面时,都会在请求头加上cookies并将其发送给服务器,服务器通过cookies识别出是我们自己,并且查出当前状态是登录状态,所以返回结果就是登录之后才能看到的网页内容 # 重点
- Referer:此内容用于标识这个请求是从哪个页面发送过来的,服务器可以拿到这一信息并做相应的处理。如做来源统计 防盗链处理
- User-Agent:简称UA,它是一个特殊的字符串头,可以使服务器识别客户使用的操作系统及版本、浏览器及版本等信息。在做爬虫时加上此信息,可以伪装成浏览器,如果不加,可能会被识别成爬虫
- X-requested-with:XMLHttpRequest # 代表ajax请求
- Accept-Encoding:指定客户端可以接受的内容编码
- Accept-Language:指定客户端可以接受的语言类型
- Content-Type:也叫互联网媒体类型(Internet Media Type)或者MIME类型,在HTTP协议消息头中,它用来表示具体请求中的媒体类型信息。例如,text/html代表html格式,image/gif代表gif图片,appliction/json代表json类型
请求体:
请求体一般承载的是post请求中的表单数据,而对于get请求,请求体则为空 # get获取页面资源 # get和post是否都能向服务器传递数据
1.3 响应(⭐⭐⭐)
响应,是由服务端返回给看客户端的,可以分为三部分:响应状态码(response status code) ---> 响应头(response headers) ---> 响应体(response body)⭐⭐⭐⭐⭐
响应状态码:用于判断请求后的响应状态
常见状态码:
200系列:
200 成功 服务器已成功处理了请求 # 重点
300系列:
301 永久移动 请求网页以永久移动到新位置,即永久重定向 # 重点
302 暂时移动 请求网页以暂时移动到新位置,即暂时重定向 # 重点
400系列:
400 错误请求 服务器无法解析该请求 # 重点
401 未授权 请求没有进行身份验证或验证为通过
403 禁止访问 服务器拒接此请求 # 重点
404 未找到 服务器找不到请求的网页
500系列:
500 服务器内部错误 服务器遇到错误无法完成请求 # 重点
501 未实现 服务器不具备完成请求的功能
502 错误网关 服务器作为网关或代理,从上游服务器收到无效想应
504 网关超时 服务器作为网关或代理,没有及时从上游服务器接收请求
505 Http版本不支持 服务器不支持请求中所用的http协议版本
# 注意:状态码不能完全代表响应状态,部分网站状态码是自定义的,一切以响应数据为准
响应头:响应头包含了服务器对请求的应答信息
Date:标识响应产生的时间
Content-Encoding:指定响应内容的编码
Server:包含服务器的信息,比如 名称 版本号 等
Content-Type:文档类型,指定返回的数据类型是什么,如text/html代表返回html文档
application/x-javascript:代表返回JavaScript文件,image/jpeg则代表返回图片
set-cookie:设置cookies,响应头中set-cookie告诉浏览器需要将此内容放在cookies中,下次携带cookies请求
Expires:指定响应的过期时间,可以代理服务器将加载的内容更新到缓存中。如果再次访问时,就可以直接从缓存中加载,降低服务器负载,缩短加载时间
响应体:
最重要的当属响应体的内容了。响应的正文数据都在响应体中,比如请求网页时,他的响应体就是网页的html代码,请求一张图片时,它的响应体就是图片的二进制数据。我们爬虫请求网页后,要解析的内容就是响应体。
1.4 网页基础
网页的组成:
网页可以分为三部分:HTML ---> CSS ---> JavaScript
HTML:其全称为Hyper Text Markup Language,即超文本标记语言。 # 定义网页的骨架
CSS:其全称为Cascading Style Sheete,即层叠样式表。 # 定义了网页样式
JavaScript:其简称JS,是一种脚本语言。 # 定义了网页与用户的交互行为,如下载进度条,提示框,轮插图
2. 第一个请求
2.1 爬虫工作流程
1.确定url,向服务器发送请求并获得响应:requrdts,urlllib,aiohttp
2.在响应中提取目标数据,即数据解析:xpath,bs4,正则,PyPuery
3.数据持久化:文件,关系型数据库,非关系型数据库
2.2 抓包技能
# 巧妙的使用浏览器
总结
1.网络请求
2.请求过程:客户端 ---> 服务端 ---> 客户端
请求:请求方式,请求头(accept,referer,cookie,useragent),请求体(get没有,post有)