请求
1. 请求目标(URL)
URL又叫作统一资源定位符,是用于完整地描述Internet上网页和其他资源的地址的一种方法。类似于windows的文件路径。
网址的组成:
- http://:这个是协议,也就是HTTP超文本传输协议,也就是网页在网上传输的协议。
- mail:这个是服务器名,代表着是一个邮箱服务器,所以是mail。
- 163.com:这个是域名,是用来定位网站的独一无二的名字。
- mail.163.com:这个是网站名,由服务器名+域名组成。
- /:这个是根目录,也就是说,通过网站名找到服务器,然后在服务器存放网页的根目录。
- index.html:这个是根目录下的网页。
- http://mail.163.com/index.html:这个叫做URL,统一资源定位符,全球性地址,用于定位网上的资源。
2. 请求体(response)
就像打电话一样,HTTP到底和服务器说了什么,才能让服务器返回正确的消息的,其实客户端的请求告诉了服务器这些内容:请求行、请求头部、空行、请求数据
3. 请求方法(Method)
HTTP请求可以使用多种请求方法,但是爬虫最主要就两种方法:GET和POST方法。
- get请求:一般情况下,只从服务器获取数据下来,并不会对服务器资源产生任何影响的时候会使用get请求。
- post请求:向服务器发送数据(登录)、上传文件等,会对服务器资源产生影响的时候会使用 post请求。
以上是在网站开发中常用的两种方法。并且一般情况下都会遵循使用的原则。但是有的网站和服务器为了做反爬虫机制,也经常会不按常理出牌,有可能一个应该使用get方法的请求就一定要改成post请求,这个要视情况而定。
GET与POST方法的区别:
- GET是从服务器上获取数据,POST是向服务器传送数据
- GET请求参数都显示在浏览器网址上,即Get"请求的参数是URL的一部分。例如:
http://www.baidu.com/s?wd=Chinese - POST请求参数在请求体当中,消息长度没有限制而且以隐式的方式进行发送,通常用来向HTTP服务器提交量比较大的数据。请求的参数类型包含在"Content-Type"消息头里,指明发送请求时要提交的数据格式。
注意:
网站制作者一般不会使用Get方式提交表单,因为有可能会导致安全问题。比如说在登陆表单中用Get方式,用户输入的用户名和密码将在地址栏中暴露无遗。并且浏览器会记录历史信息,导致账号不安全的因素存在。
4. 常用的请求报头
请求头描述了客户端向服务器发送请求时所使用的编码,以及发送内容的长度,告诉服务器自己有没有登陆,采用的什么浏览器访问的等等。
-
Accept:浏览器告诉服务器自己接受什么数据类型,文字,图片等。
-
Accept-charset:浏览器申明自己接收的字符集。
-
Accept-Encoding:浏览器申明自己接收的编码方法,通常指定压缩方法,是否支持压缩,支持什么压缩方法(gzip,
deflate,br)。 -
Accept-Language:浏览器申明自己接收的语言。
-
Authorization:授权信息,通常出现在对服务器发送的WWW-Authenticate头的应答中。
-
content-Length表示请求消息正文的长度。
-
origin:声明请求资源的起始位置
-
connection:处理完这次请求后,是断开连接还是继续保持连接。9.Cookie:发送给WEB服务器的Cookie内容,经常用来判断是否登陆了。
-
Cookie:发送给WEB服务器的Cookie内容,经常用来判断是否登陆了。
-
Host:客户端指定自己想访问的WEB服务器的域名/IP地址和端口号。
-
If-Modified-since:客户机通过这个头告诉服务器,资源的缓存时间。只有当所请求的内容在指定的时间后又经过修改才返回它,否则返回304"Not
Modified"应答。 -
Pragma:指定"no-cache"值表示服务器必须返回一个刷新后的文档,即使它是代理服务器而且已经有了页面的本地拷贝。
-
Referer:告诉服务器该页面从哪个页面链接的。
-
From∶请求发送者的email地址,由一些特殊的Web客户程序使用,浏览器不会用到它。
-
(user-Agent:浏览器表明自己的身份(是哪种浏览器)
-
upgrade-insecure-requests∶申明浏览器支持从http请求自动升级为https请求,并且在以后发送请求的时候都使用https。
UA-Pixels,uA-Color,uA-oS,UA-CPU:由某些版本的IE浏览器所发送的非标准的请求头,表示屏幕大小、颜色深度、操作系统和CPu类型。
5. requests模块查看请求体
在我们用requests模块请求数据的时候携带上诉请求报头的字段信息,将我们的爬虫代码进行伪装。同样的伪装之后我们也可以通过代码查看请求体的字段信息,有如下几种常见的属性:
#查看请求体中的url地址
response.request.url
#查看请求体中的请求头信息
response.request.headers
#查看请求体中的请求方法
response.request.method
- 1
- 2
- 3
- 4
- 5
- 6
响应
1. HTTP响应报文
HTTP响应报文也由三部分组成:响应行、响应头、响应体
响应行
响应行一般由协议版本、状态码及其描述组成比如HTTP/1.1 200 OK
其中协议版本HTTP/1.1或者HTTP/1.0,200就是它的状态码,OK则为它的描述。
响应头
响应头用于描述服务器的基本信息,以及数据的描述,服务器通过这些数据的描述信息,可以通知客户端如何处理等一会儿它回送的数据。
设置HTTP响应头往往和状态码结合起来。例如,有好几个表示"文档位置已经改变”的状态代码都伴随着一个Location头,而401(Unauthorized)状态代码则必须伴随一个WwW-Authenticate头。然而,即使在没有设置特殊含义的状态代码时,指定应答头也是很有用的。应答头可以用来完成:设置Cookie,指定修改日期,指示浏览器按照指定的间隔刷新页面,声明文档的长度以便利用持久HTTP连接,…等等许多其他任务。
常见的响应头字段含义
- A77ow:服务器支持哪些请求方法(如GET、POST等)。
- Content-Encoding:文档的编码(Encode)方法。只有在解码之后才可以得到Content-Type头指定的内容类型。利用gzip压缩文档能够显著地减少HTML文档的下载时间。
- content-Length:表示内容长度。只有当浏览器使用持久HTTP连接时才需要这个数据。
- content- Type:表示后面的文档属于什么MIME类型。Servlet默认为text/plain,但通常需要显式地指定为text/html。由于经常要设置Content-Type,因此HttpServletResponse提供了一个专用的方法setContentType。
- Date:当前的GMT时间,例如,Date:Mon,31Dec200104:25:57GMT。Date描述的时间表示世界标准时,换算成本地时间,需要知道用户所在的时区。你可以用setDateHeader来设置这个头以避免转换时间格式的麻烦。
- Expires:告诉浏览器把回送的资源缓存多长时间,-1或O则是不缓存。
- Last-Modified:文档的最后改动时间。客户可以通过lf-Modified-Since请求头提供一个日期,该请求将被视为一个条件GET,只有改动时间迟于指定时间的文档才会返回,否则返回一个304(NotModified)状态。Last-Modified也可用setDateHeader方法来设置。
- Location:这个头配合302状态码使用,用于重定向接收者到一个新url地址。表示客户应当到哪里去提取文档。Location通常不是直接设置的,而是通过HttpServletResponse的sendRedirect方法,该方法同时设置状态代码为302。
- Refresh:告诉浏览器隔多久刷新一次,以秒计。
- server:服务器通过这个头告诉浏览器服务器的类型。Server响应头包含处理请求的原始服务器的软件信息。此域能包含多个产品标识和注释,产品标识一般按照重要性排序。Servlet一般不设置这个值,而是由Web服务器自己设置。
- set-Cookie:设置和页面关联的Cookie。Servlet不应使用response.setHeader(“Set-Cookie”,…),而是应使用HttpServletResponse提供的专用方法addCookie。
- Transfer-Encoding:告诉浏览器数据的传送格式。
- www-Authenticate:客户应该在Authorization头中提供什么类型的授权信息?在包401(Unauthorized)状态行的应答中这个头是必需的。
- setcontentType:设置Content-Type头。大多数Servlet都要用到这个方法。
- setContentLength:设置Content-Length头。对于支持持久HTTP连接的浏览器来说,这个函数是很有用的。
- addcookie:设置一个Cookie(ServletAPI中没有setCookie方法,因为应答往往包含多个Set-Cookie头)。
响应体
响应体就是响应的消息体,如果是纯数据就是返回纯数据,如果请求的是HTML页面,那么返回的就是HTML代码,如果是JS就是JS代码,如此之类。
响应内容
看到的html、css、js、图片、视频、音频等返回的数据
2. 常见的响应方法
#获取响应体文本数据
response.text
#获取响应体二进制数据
response.content
#获取响应体json数据
response.json()
#获取响应体响应头信息
response. headers
#设置响应体的编码
response.encoding
#自动识别响应体的编码
response.apparent_encoding
#获取响应体的cookies信息,获取到的是cookiejar对象
response.cookies
#获取响应体的ur1地址
response.url
#获取响应体的状态码
response.status_code
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
3. 状态码
响应状态码可以很方便的查看我们的响应状态,我们可以检测响应状态码:
- 200:请求正常,服务器正常的返回数据。
- 301:永久重定向。比如在访问www.jingdong .com的时候会重定向到www.jd.com 。
- 302:临时重定向。比如在访问一个需要登录的页面的时候,而此时没有登录,那么就会重定向到登录页面。
- 400:请求的ur1在服务器上找不到。换句话说就是请求ur1错误。
- 403:服务器拒绝访问,权限不够。
- 500:服务器内部错误。可能是服务器出现bug了。