zoukankan      html  css  js  c++  java
  • [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请求的格式:

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

    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,就会返回该状态码

    ===

  • 相关阅读:
    洛谷 P1032 子串变换
    RCTF 2017 easyre153
    SUCTF 2016 : dMd
    南邮 base64全家桶
    洛谷 P1908 逆序对
    2019中山大学程序设计竞赛 Triangle
    WhiteHat Contest 11 : re1100
    P1010 幂次方
    洛谷 P1088 火星人
    南邮 骚年来一发吗
  • 原文地址:https://www.cnblogs.com/leokale-zz/p/12810121.html
Copyright © 2011-2022 走看看