爬虫
知识点:
-
整理 爬虫面试题
-
添加 爬虫的代码
-
加深 爬虫的理解
-
版本 python3.6
1. http以及https的概念和区别
HTTPS比HTTP更安全,但是性能更低
- HTTP:超文本传输协议,默认端口号是:80
- 超文本:是指超过文本,不仅限于文本;还包括图片、音频、视频等文件
- 传输协议:是指使用共用约定的固定格式来传递转换成字符串的超文本内容
- HTTPS:HTTP + SSL(安全套接字层),即带有安全套接字层的超本文传输协,默认端口号:443
- SSL对传输的内容(超文本,也就是请求体或响应体)进行加密
可以打开浏览器访问一个url,右键检查,点击net work,点选一个url,查看http协议的形式
2. 请列出常见的HTTP请求头
- Accept:告诉服务器,客户端支持的数据类型。
- Accept-Charset:告诉服务器,客户端采用的编码。
- Accept-Encoding:告诉服务器,客户机支持的数据压缩格式。
- Accept-Language:告诉服务器,客户机的语言环境。
- Host:客户机通过这个头告诉服务器,想访问的主机名。
- If-Modified-Since:客户机通过这个头告诉服务器,资源的缓存时间。
- Referer:客户机通过这个头告诉服务器,它是从哪个资源来访问服务器的。(一般用于防盗链)
- User-Agent:客户机通过这个头告诉服务器,客户机的软件环境。
- Cookie:客户机通过这个头告诉服务器,可以向服务器带数据。
- Connection:客户机通过这个头告诉服务器,请求完后是关闭还是保持链接。
- Date:客户机通过这个头告诉服务器,客户机当前请求时间。
加粗的请求头为爬虫常用请求头,在服务器被用来进行爬虫识别的频率最高,相较于其余的请求头更为重要,但是这里需要注意的是并不意味这其余的不重要,因为有的网站的运维或者开发人员可能剑走偏锋,会使用一些比较不常见的请求头来进行爬虫的甄别
3. 请列出常见的HTTP响应头
- Location:这个头配合302状态码使用,告诉用户端找谁。
- Server:服务器通过这个头,告诉浏览器服务器的类型
- Content-Encoding:服务器通过这个头,告诉浏览器数据采用的压缩格式。
- Content-Length:服务器通过这个头,告诉浏览器回送数据的长度。
- Content-Language:服务器通过这个头,告诉服务器的语言环境。
- Content-Type:服务器通过这个头,回送数据的类型
- Last-Modified:服务器通过这个头,告诉浏览器当前资源的缓存时间。
- Refresh:服务器通过这个头,告诉浏览器隔多长时间刷新一次。
- ETag:与缓存相关的头。
- Expires:服务器通过这个头,告诉浏览器把回送的数据缓存多长时间。-1或0不缓存。
- Cache-Control和Pragma:服务器通过这个头,也可以控制浏览器不缓存数据。
- Connection:服务器通过这个头,响应完是保持链接还是关闭链接。
- Date:告诉客户机,返回响应的时间。
加粗的请求头为爬虫常用请求头,在服务器被用来进行爬虫识别的频率最高,相较于其余的请求头更为重要,但是这里需要注意的是并不意味这其余的不重要,因为有的网站的运维或者开发人员可能剑走偏锋,会使用一些比较不常见的请求头来进行爬虫的甄别
4. 常见的响应状态码
- 200:成功
- 302:跳转,新的url在响应的Location头中给出
- 303:浏览器对于POST的响应进行重定向至新的url
- 307:浏览器对于GET的响应重定向至新的url
- 403:资源不可用;服务器理解客户的请求,但拒绝处理它(没有权限)
- 404:找不到该页面
- 500:服务器内部错误
- 503:服务器由于维护或者负载过重未能应答,在响应中可能可能会携带Retry-After响应头;有可能是因为爬虫频繁访问url,使服务器忽视爬虫的请求,最终返回503响应状态码
大体分为200成功,300重定向,400请求错误,500服务器错误
5. 简述一次完整的HTTP的通信过程
- 建立TCP连接
- 在HTTP工作开始之前,Web浏览器首先要通过网络与Web服务器建立连接,该连接是通过TCP来完成的,该协议与IP协议共同构建Internet,即著名的TCP/IP协议族,因此Internet又被称作是TCP/IP网络。HTTP是比TCP更高层次的应用层协议,根据规则,只有低层协议建立之后才能进行更高层协议的连接,因此,首先要建立TCP连接,一般TCP连接的端口号是80。
- Web浏览器向Web服务器发送请求命令
- 一旦建立了TCP连接,Web浏览器就会向Web服务器发送请求命令。例如:GET/sample/hello.jsp HTTP/1.1。
- Web浏览器发送请求头信息l
- 浏览器发送其请求命令之后,还要以头信息的形式向Web服务器发送一些别的信息,之后浏览器发送了一空白行来通知服务器,它已经结束了该头信息的发送。
- Web服务器应答
- 客户机向服务器发出请求后,服务器会客户机回送应答, HTTP/1.1 200 OK ,应答的第一部分是协议的版本号和应答状态码。
- Web服务器发送应答头信息
- 正如客户端会随同请求发送关于自身的信息一样,服务器也会随同应答向用户发送关于它自己的数据及被请求的文档。
- Web服务器向浏览器发送数据
- Web服务器向浏览器发送头信息后,它会发送一个空白行来表示头信息的发送到此为结束,接着,它就以Content-Type应答头信息所描述的格式发送用户所请求的实际数据。
- Web服务器关闭TCP连接
- 般情况下,一旦Web服务器向浏览器发送了请求数据,它就要关闭TCP连接,然后如果浏览器或者服务器在其头信息加入了这行代码:Connection:keep-alive,TCP连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带宽。
http的无状态性是指协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。即我们给服务器发送 HTTP 请求之后,服务器根据请求,会给我们发送数据过来,但是,发送完,不会记录任何信息。
6. HTTP请求方法都有什么?
- GET:请求指定的页面信息,并返回实体主体。
- HEAD:类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头
- POST:向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
- PUT:从客户端向服务器传送的数据取代指定的文档的内容。
- DELETE:请求服务器删除指定的页面。
- CONNECT:HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
- OPTIONS:允许客户端查看服务器的性能。
- TRACE:回显服务器收到的请求,主要用于测试或诊断。