当前位置: 首页 > article >正文

【爬虫基础】第二部分 爬虫基础理论 P2/3

上节内容回顾:【爬虫基础】第一部分 网络通讯 P1/3-CSDN博客

                         【爬虫基础】第一部分 网络通讯-Socket套接字 P2/3-CSDN博客

                         【爬虫基础】第一部分 网络通讯-编程 P3/3-CSDN博客 

                         【爬虫基础】第二部分 爬虫基础理论 P1/3-CSDN博客

爬虫相关文档,希望互相学习,共同进步

风123456789~-CSDN博客


前言

 1.知识点碎片化:每个网站实现的技术相似但是有区别,要求我们根据不同的网站使用不同的应对手段。主要是常用的一些网站爬取技术。

2.学习难度:入门比web简单,但后期难度要比web难,在于爬虫工程师与网站开发及运维人员的对抗。比如你写了爬虫但是被网站运维人员发现后添加反爬,那么就要解决反爬。即平台更新换代,爬虫策略需要实时更新。

3.学习特点:以摸个网站爬虫为讲解对象,即一个技术点的案例。

4.后续发展:要求掌握的东西多,工作中根据工作需要涉及到更多没有接触的知识。

5.法律层面:爬虫相关工作属于灰色地带,目前国内现行法律对于爬虫相关评判还没有明确制度。

6.建议:好记性不如烂笔头,建议多找网站进行爬取联系,同时做好笔记。

1.概述

爬虫通常会遵循一定的规则和算法,以确保能够高效地遍历互联网并收集到所需的数据。

 本节章节:
    第一节  爬虫理论原理
    第二节  http协议(本文)
    第三节  chrome浏览器抓包说明

第一节 爬虫理论原理 见:【爬虫基础】第二部分 爬虫基础理论 P1/3-CSDN博客 

2. http协议

知识点:
    1.网址url的构成
    2.http协议介绍
    3.浏览器访问服务器过程原理
    4.http请求报文
        GET请求
        POST请求
    5.http响应报文
    6.http状态码
    7.面试要点
    8.爬虫robots协议

2.1 网络url 的构成

      网址又称为URL(Uniform Resource Locator) ,全称为统一资源定位符即网络资源地址。

      如:https://www.baidu.com

网络url的构成:

https://index.baidu.com/v2/main/index.html#/trend/python?words=python

1.协议部分:用于指定如何访问资源,例如HTTP、HTTPS、FTP等。它告诉浏览器使用哪种协议来获取资源。

2.域名部分:用于标识资源所在的服务器或计算机的名称。它可以是域名或IP地址,帮助浏览器在网络中找到正确的服务器。如:www.baidu.com

3.路径资源部分:它可以是一个目录的路径,也可以是一个具体的文件名称。                        /v2/main/index.html#/trend/python

4.请求参数部分:用于传递额外的信息给资源,锚点用于指向页面内的特定位置。

    如GET请求,从?开始    words=python 查询参数

这些组成部分共同确保了URL能够准确地定位和访问网络上的资源。

2.2 http 协议的介绍

       协议实际上是提前制定好的一套规范,大家都按照这个规范来,这样可以沟通无障碍。

       http协议(超文本传输协议 Hypertext Transfer Protocol,HTTP):不仅能够传输文本数据,还可以传输 txt,mp3,mp4,img, zip等非文本数据。非文本数据通过链接加载的方式进行展示。也就是常说的网络数据。

重点:HTTP协议格式的数据是基于TCP传输协议的
      http协议的使用离不开tcp

      TCP传输协议 是用来保证网络中传输的数据的安全性的,HTTP协议 是用来规定这些数据的具体格式的。

2.3 浏览器访问服务器过程原理

      当我们使用浏览器访问一个网站时,其实是基于 HTTP 协议,浏览器作为客户端向服务器端发送一次请求,而服务器端在接收到这次请求后,给浏览器反馈一个响应。

过程:请求--> dns解析---> 建立连接 -->访问资源--> 响应展示

1)在网址输入请求:https://www.baidu.com

      dns解析服务:将域名解析成对应的 IP 地址+端口
2)发起请求:经过解析之后,浏览器会发起一个 TCP 的连接请求
3)建立连接:服务器接受请求后,通过三次握手建立连接
4)访问资源:根据查询参数访问服务器的资源
                        若没有查询参数,则访问这个IP+port的资源,首页资源

      客户端在确认建立连接成功后,向服务端发送 HTTP 请求格式的数据包
      服务器端解析 HTTP 数据包,执行用户的这次请求并生成一个 HTTP 响应格式的数据包,发送给客户端
5)网页展示:浏览器收到服务器端的数据包后进行解析,再通过 HTML 格式呈现给用户
6)释放连接:客户端再通过四次握手释放连接

注意:基于TCP的三次握手

2.4 http 请求报文

HTTP 请求报文分类:

     get 请求:获取web服务器的数据
     post请求:提交本地数据给服务器

     get 请求没有请求体只有请求头。get请求的请求参数放在URL后加上一个"?"的后面,参数以key=value的形式传递,参数与参数之间使用"&"进行连接。

(1) get请求报文分析

三部分:
# 请求行       get请求方式,请求资源路径 http协议版本
# 请求头                     

                     服务器的主机地址和端口号,默认80

                     和服务端保持长连接

                     可接受的数据类型

                     可接受的压缩格式

                     登录用户的身份标识

# 空行

    get 请求体    如:


    GET /signin?next=%2F HTTP/2\r\n
    Host: www.zhihu.com\r\n
    User-Agent: Mozilla/5.0\r\n
    Accept: */*\r\n
    Accept-Language: zh-CN\r\n
    Accept-Encoding: gzip, deflate\r\n
    Connection: keep-alive\r\n
    Upgrade-Insecure-Requests: 1\r\n
    Cache-Control: max-age=0\r\n
    TE: trailers\r\n
    \r\n


    说明:

    1. 请求头中每项数据之间使用 "\r\n"结尾;

    2. 第一行是状态行,分别是请求方法(GET)、请求路径(/signin?next=%2F)、协议版本(HTTP/2);

    3. 其余所有行均以XXX: XXXX的格式表示;

    4. 最后需要一个"\r\n"的空行作为请求头结束的标志。

     

    (2) post请求报文

    四部分:

    # 请求行       post请求方式,请求资源路径 http协议版本
    # 请求头       

                         服务器的主机地址和端口号,默认80

                         和服务端保持长连接

                         告诉服务器请求的数据类型

                         客户端的名称
    # 空行
    # 请求体        请求参数,提交本地的数据部分

    post 请求体,如:


    POST /login HTTP/1.1\r\n
    Host: 127.0.0.1:8888\r\n
    User-Agent: Mozilla/5.0\r\n
    Accept: */*\r\n
    Accept-Language: zh-CN\r\n
    Accept-Encoding: gzip, deflate\r\n
    Content-Type: application/x-www-form-urlencoded\r\n
    Content-Length: 29\r\n
    Connection: keep-alive\r\n
    \r\n
    username=root&password=123456 


    说明:

    1.请求头中每一行的后面都要加"\r\n"结尾;
    2.第一行是状态行,分别是请求方法(POST)、请求路径(/login)、协议版本(HTTP/1.1);
    3.请求头内的剩余内容均以XXX: XXXX的格式表示;
    4.请求头最后需要一个"\r\n"的空行作为结束的标志;
    5.放在请求体内的请求参数以key=value的形式传递,参数与参数之间使用"&"进行连接。

    参考文章:解析HTTP请求报文(GET、POST)_get请求格式-CSDN博客

    2.5 http 响应报文

    四部分:
    # 响应行    描述响应状态(响应状态码)

                      http协议版本   状态码  状态描述
    # 响应头    服务器名称、内容类型

                      服务器的相应时间
    # 空行
    # 响应体    响应给客户端的数据

     参考文章:http协议、URL、GET/POST请求报文及响应报文 - 长白山 - 博客园 

    2.6 http 状态码 

    状态码:

     200:请求成功
     302:重定向
               重定向:访问a网站:正常情况下,获取a网站的响应
                             自动去对b网站发送请求,获取b网站的响应
     400:请求错误,请求地址或参数有误

               (检查请求的地址,检查请求参数,检查请求头)
     404:请求资源服务器不存在

                (请求有问题)
     500:服务器错误,服务器内部源代码出现错误

                (存在bug)

    2.7 爬虫 robots 协议

     (1)  概述

            爬虫robots协议:君子协议。告诉爬虫哪些信息可以采集,哪些信息不可以采集。

          在编写网络爬虫时,遵守robots.txt协议是非常重要的,这是为了尊重网站所有者的意愿,避免对网站造成不必要的负担或损害。

           robots.txt是一个文本文件,通常位于网站根目录下。

           robots协议并不是一个规范,robots.txt不是命令,也不是防火墙,它是约定俗成的,如果将网站视为酒店里的一个房间,robots.txt就是主人在房间门口悬挂的“请勿打扰”或“欢迎打扫”的提示牌,这如同守门人无法阻止窃贼等恶意闯入者,所以并不能保证网站的隐私。

           当一个搜索蜘蛛访问一个站点时,它会首先检查该站点根目录下是否存在robots.txt,如果存在,搜索机器人就会按照该文件中的内容来确定访问的范围;如果该文件不存在,所有的搜索蜘蛛将能够访问网站上所有没有被口令保护的页面。百度官方建议,仅当您的网站包含不希望被搜索引擎收录的内容时,才需要使用robots.txt文件。如果您希望搜索引擎收录网站上所有内容,请勿建立robots.txt文件。

    (2)位置

    例如 百度的robots.txt:      https://baidu.com/robots.txt

    User-agent: *
    Disallow: /private/
    Allow: /public/

    说明:User-agent: *表示这条规则适用于所有的爬虫,

        Disallow: /private/意味着所有的爬虫都不能抓取/private/目录下的内容

        Allow:   /public/ 允许抓取/public/目录下的内容。



    (3)注意事项

    1.确保在抓取数据前检查robots.txt。

    2.尊重网站的抓取频率限制。例如,某些网站可能规定每天只能抓取一定数量的页面。

    3.避免对网站造成过大的负担,合理设置你的爬虫的爬取速度和频率。

    3. 面试要点

    (1)简述一个请求的生命周期

    见《浏览器访问服务器过程原理》

    事件顺序:
    (1)浏览器获取输入的域名 www.baidu.com
    (2)浏览器向DNS请求解析 www.baidu.com的IP地址
    (3)域名系统DNS解析出百度服务器的IP地址
    (4)浏览器与该服务器建立TCP连捷(默认端口号80)
    (5)浏览器发出HTTP请求,请求百度首页
    (6)服务器通过HTTP响应把首页文件发送给浏览器
    (7)TCP连接释放
    (8)浏览器将首页文件进行解析,并将web页显示给用户

    涉及到的协议:
    (1)应用层:HTTP(www访问协议),DNS(域名解析服务)
            DNS解析域名为目的IP,通过IP找到服务器路径,客户端的服务器发起HTTP会话,然后通过传输层TCP协议封装数据包,在TCP协议基础上进行传输。
    (2)传输层:TCP(为HTTP理供可靠的数据传输),UDP(DNS使用UDP传输)
    (3)网络层:IP    为数据包选择路由,IP协议进行主要工作
    (4)数据链路层:ICNP(提供网络传输过程中的差错监测),

                              ARP(将本机的默认网关IP地址映射成物理MAC地址)

    注意:法律和道德问题

    在使用爬虫时,需要遵守一定的法律和道德准则,尊重网站的隐私政策和使用条款,确保合法和负责任地使用爬虫技术。

    今天先到这里吧~~

    预知后事如何,且听下回分解~ ok


    项目管理--相关知识   

    项目管理-项目绩效域1/2-CSDN博客

    项目管理-项目绩效域1/2_八大绩效域和十大管理有什么联系-CSDN博客

    项目管理-项目绩效域2/2_绩效域 团不策划-CSDN博客

    高项-案例分析万能答案(作业分享)-CSDN博客

    项目管理-计算题公式【复习】_项目管理进度计算题公式:乐观-CSDN博客

    项目管理-配置管理与变更-CSDN博客

    项目管理-项目管理科学基础-CSDN博客

    项目管理-高级项目管理-CSDN博客

    项目管理-相关知识(组织通用治理、组织通用管理、法律法规与标准规范)-CSDN博客


    Oracle其他文档,希望互相学习,共同进步

    Oracle-找回误删的表数据(LogMiner 挖掘日志)_oracle日志挖掘恢复数据-CSDN博客

    oracle 跟踪文件--审计日志_oracle审计日志-CSDN博客

    ORA-12899报错,遇到数据表某字段长度奇怪现象:“Oracle字符型,长度50”但length查却没有50_varchar(50) oracle 超出截断-CSDN博客

    EXP-00091: Exporting questionable statistics.解决方案-CSDN博客

    Oracle 更换监听端口-CSDN博客


    http://www.kler.cn/a/569541.html

    相关文章:

  1. 【开源-线程池(Thread Pool)项目对比】
  2. 01.01 QT信号和槽
  3. FastExcel vs EasyExcel vs Apache POI:三者的全面对比分析
  4. Kali Linux 2024.4版本全局代理(wide Proxy)配置,适用于浏览器、命令行
  5. 初阶数据结构(C语言实现)——3顺序表和链表(2)
  6. React+Antd-Mobile遇到的问题记录
  7. 主题爬虫(Focused Crawler)
  8. 内网渗透测试-Vulnerable Docker靶场
  9. 【开源免费】基于SpringBoot+Vue.JS医院药品管理系统(JAVA毕业设计)
  10. 如何在Spring Boot项目中集成JWT实现安全认证?
  11. nio多线程版本
  12. 大夏龙雀科技4G Cat1 CT511-AT0 MQTT联网实战教程
  13. C++格式讲解
  14. PhyloSuite v1.2.3安装与使用-生信工具049
  15. 大模型学习笔记-基于《Deep Dive into LLMs like ChatGPT》
  16. 第1章 基础网络和安全工具(网络安全防御实战--蓝军武器库)
  17. 谈谈 Node.js 中的模块系统,CommonJS 和 ES Modules 的区别是什么?
  18. 不要升级,Flutter Debug 在 iOS 18.4 beta 无法运行,提示 mprotect failed: Permission denied
  19. ubuntu:桌面版磁盘合并扩容
  20. Stapler: 1靶场渗透测试