[Python自学] 爬虫(1)爬虫基础概念

一、爬虫流程图

二、WEB的一些概念

1.页面数据

我们在浏览器F12(检查)页面中看到的Elements对应的是当前我们看到的页面。

Elements中的内容和URL响应的内容是不同的,他们的关系如下:

Elements内容 = 当前URL响应 + 其他URL响应(图片、JS、CSS等)+JS生成数据

从这里我们就知道,页面上的数据在哪里:

  • 当前URL的响应(即爬虫的目标URL)
  • 其他URL的响应(图片、AJAX重新请求的内容等)
  • JS生成的
    • 部分数据由JS生成
    • 全部数据由JS生成

2.URL的形式

例子:https://item.jd.com:80/11936238.html?id=123#product-detail

其中:

http:协议,例如http、https、ftp等

item.jd.com:服务器的IP地址或域名

80:服务器端口

11936238.html:访问资源的路径

?if=123:GET请求的参数

#product-detail:锚点,定位到页面的某个位置

这里注意,一个URL地址带不带锚点,他们的请求是一样的,锚点只是告诉浏览器显示哪个部位。所以锚点不对我们获取数据造成影响,可以直接删除。

3.HTTP请求

以下是HTTP请求的格式:

 

这里要特别注意请求头与请求体之间的回车和换行符(即\r\n),服务器就是靠这个空行来区分请求头与请求体的。

HTTP请求实例:

GET / HTTP/1.1
Host: www.baidu.com
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: BIDUPSID=56D7313E29CF1F0C1DC0778DB26463CE; PSTM=1588129963; BAIDUID=56D7313E29CF1F0C66AC659196756F5D:FG=1; 

其中GET就是请求方法,"/"是我们请求的PATH(这里是根),协议版本是HTTP/1.1版本。

后面的Host、Connection、Upgrade-Insecure-Requests等,都是头部字段。

最后,在Cookie字段(最后一个字段)之后会有一个空行用于表示请求头的结束(由于这里是GET请求,所以后面没有请求体数据)。

4.响应状态码

参考博客:https://www.cnblogs.com/lyraLee/p/11588417.html

200-299成功响应:

200 OK: 请求成功

201 Created: 常用于POST,PUT 请求,表明请求已经成功,并新建了一个资源。并在响应体中返回路径。

202 Accepted: 请求已经接收到,但没有响应,稍后也不会返回一个异步请求结果。 该状态码适用于等待其他进程处理或者批处理的场景。

203 No-Authoritative Information: 表明响应返回的元信息(meta-infomation)和最初的服务器不同,而是从本地或者第三方获取的。主要用于其他资源的镜像和备份。除了前面的情况,首选还是200。

204 No Content: 请求没有数据返回,但是头信息有用。用户代理(浏览器)会更新缓存的头信息。

205 Reset Content: 告诉用户代理(浏览器)重置发送该请求的文档。

206 Partical Content: 当客户端使用Range请求头时,返回该状态码。

300-399重定向消息:

300 Multiple Choice: 返回多个响应,需要浏览器或者用户选择;

301 Moved Permanently: 请求资源的URL被永久的改变,新的URL会在响应的Location中给出。浏览器到新的URL重新请求资源,因为有些客户端会把请求方式method改成GET。所以该状态码建议GET和HEAD方法中使用。搜索引擎会更新地址到资源的链接(SEO中‘link-judge’被发送到新的URL)。

302 Found:  请求资源的URL被暂时修改到Location提供的URL。未来可能还会有新的修改。浏览器会根据新的URL重新请求资源。有些客户端会把方法method改为GET,建议在GET和HEAD方法中使用。搜索引擎不会更改URL到资源的。

  // 应用
  负载均衡
303 See Other: 服务通过返回的响应数据指导客户端通过GET方法去另一个URL获取资源。通常用于POST或者PUT的请求返回结果,重定向到信息提示页面或者进度展示页面。重定向页面的方法是GET方法。 304 Not Modified: 资源未变更。服务器根据请求头判断,需要资源未修改,只返回响应头;否则将资源一起返回。发生场景:

  1)请求方法安全(如GET,HEAD请求)

  2)条件请求并且使用了If-None-Match或者If-Modified-Since 的请求头如果想使用200状态码达到相同304效果,需要强制缓存,需要额外的请求头:Cache-Control, Expires, Vary 307 Temporary Redirect: 临时重定向。基本和302相同。唯一的区别是这个状态码严格禁止浏览器到新URL请求资源时修改原来的请求方式和请求体。就是说原来使用POST,这次还是要使用POST。如果想要用PUT方法去修改一个服务器上没有的资源,可以用303状态码如果想要把一个POST方法改为GET,请使用303。 308 Permanent Redirect: 永久重定向。基本和301相同。但是严格禁止修改请求方式和请求体。

400-499 客户端错误响应:

400 Bad Request: 请求语法有问题,服务器无法识别。没有host请求头字段,或者设置了超过一个的host请求头字段。

401 UnAuthorized: 客户端未授权该请求。缺乏有效的身份认证凭证,一般可能是未登陆。登陆后一般都解决问题。

403 Forbidden: 服务器拒绝响应。权限不足。

404 Not Found: URL无效或者URL有效但是没有资源。

405 Method Not Allowed: 请求方式Method不允许。但是GET和HEAD属于强制方式,不能返回这个状态码。

406 Not Acceptable: 资源类型不符合服务器要求。

407 Proxy Authorization Required: 需要代理授权。

408 Request Timeout:服务器将不再使用的连接关闭。响应头会有Connection: close。

426 Upgrade Required: 告诉客户端需要升级通信协议。

500-599 服务器错误响应:

500 Internal Server Error: 服务器内部错误,未捕获。

502 Bad Gateway: 服务器作为网关使用时,收到上游服务器返回的无效响应。

503 Service Unavailable: 无法服务。一般发生在因维护而停机或者服务过载。一般还会伴随着返回一个响应头Retry-After: 说明恢复服务的估计时间。

504 Gateway Timeout: 网关超时。服务器作为网关或者代理,不能及时从上游服务器获取响应返回给客户端。

505 Http Version Not Supported: 发出的请求http版本服务器不支持。如果请求通过http2发送,服务器不支持http2.0,就会返回该状态码

 

 

===

posted @ 2020-04-30 17:32  风间悠香  阅读(347)  评论(0编辑  收藏  举报