• 爬虫初步了解


     一、爬虫的概念:

        口语版:也叫网络蜘蛛,它是批量下载网络资源的程序
    专业版:网络爬虫是伪装成客户端与服务端进行数据交互的程序
    二、爬虫的应用:
    1. 数据采集 例:收集数据,大数据
    2. 搜索引擎 例:百度,谷歌搜索引擎都属于爬虫技术
    3. 模拟操作 例:模拟用户操作,测试机器人,灌水机器人
    三、爬虫的请求过程:
                               发送请求(请求获取网页中HTML文件等数据)
    应用程序(如浏览器) ----------------------------------------------> 应用程序(如网站后台)服务器
    应用程序(如浏览器) <---------------------------------------------- 应用程序(如网站后台)服务器
    获得响应(根据请求返回网页HTML文件等数据,进行加载和渲染后显示出页面给我们)
    四、爬虫需要了解的一些常识:
      1.url指定了一个固定网络资源(统一资源定位符)是用来标识某一处资源的地址,也就是我们常说的网址.
      2.爬虫需要考虑到效率,但更重要的是需要考虑到被爬取网站的承受能力,即你必须考虑到你的爬虫不会对网站造成严重的影响,你的请求次数绝对不可以超过网站可以同一时间的最大响应次数
      3.如果一个网站有robots.txt,那么robots.txt文本文档规定了哪些爬虫可以来获取我的资源,哪些爬虫不可以来获取我的资源,例如,百度可以通过https://www.baidu.com/robots.txt来查看该文档
      4.HTTPS协议的默认端口是443
      5.http协议是基于tcp/ip协议的,而https是在http协议的基础之上,在加了一层SSL/TLS协议,数据在传输过程中是加密的
      6.提供http服务的服务器会默认监听80端口
      7.如果我们想要查看一个网页的源代码,可以通过右键网页查看元素或右键网页查看网页源代码
      8.需要注意的是,我们查看元素(即在Elements中的html代码)和我们查看网页源代码的html可能是不同的,因为element中的代码是经过js和css来加载和渲染后执行完毕的代码(属于动态数据),而我们右键点击查看的网页源代码使我们请求后的html数据,未经任何渲染和加载(属于静态数据)。
      9.网站的反爬技术即让我们只能爬到未经过渲染之前的数据,通过渲染后的数据不让我们获得到.
      10.http协议:是超文本传输协议的缩写,是用于从万维网服务器传输超文本到本地浏览器的传送协议,即网上信息交流需要遵循的协议规定.
      11.请求后获得响应的状态码:(分为5种)
          1** 以1为开头的状态码,信息,服务器首都请求,需要请求者继续执行操作
          2** 以2位开头的状态码,一般为200,代表请求数据成功
          3** 以3位开头的状态码,重定向,需要进一步操作以完成请求
          4** 以4为开头的状态码,客户端错误,请求包含语法错误或无法完成请求,例如我们调试网页时出现的404,403错误
          5** 以5位开头的状态码,服务器错误,服务器在处理请求的过程中发生了错误
    五、爬虫的请求报文:
      包括以下部分:请求行,请求头,空行,和报文主体
      请求报文第一行:请求行: GET / HTTP/1.1 # 其中GET 是请求的方式(包括GET和POST两种,get方法请求数据会将参数在url上显示出来,Post就不会)
                           / 是指该请求的网站的域名后面只有一个/ 例如: https://www.baidu.com/ ,如果说你请求的网站是这样的:http://588ku.com/?h=bd&sem=1 那么你的这个位置就应该写成 /?h=bd&sem=1
                                  HTTP/1.1 是指使用的http协议的版本,大部分网站都是1.1版本的,但是现在2.0版本也出了,部分网站用的是2.0版本的
                                 需要注意的是: 在你的请求方式的后面和http协议版本的前面均要有一个空格,这使它符合http协议的规定,不然你的请求可能会出错
              请求的域名: HOST: www.baidu.com # HOST 是固定的名称,代表这一行是发送的我们请求的域名,域名一般在http://之后或者https://之后和出现的第一个/之前
                                   www.baidu.com 是我们所请求的域名,例如:https://www.baidu.com/的域名就是www.baidu.com
              发送请求的客户端版本身份:
                     User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0
                                  # User-Agent 是固定的名称,代表这一行是发送请求的客服端的版本(即客户端的请求身份,如果是我们写的python程序访问,我们该行不修改或不写,它将自动补充成python的版本,而不是浏览器的版本)

                                   Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0 这个是我发送请求的客户端是火狐浏览器
              注意:请求头的每一行的末尾都要加上          # 是window中的换行, 是mac的换行, 是linux中的换行
                 而且在请求头的末尾应该再加上一个 ,即整个请求头应该以 来进行结尾。
    header = b'GET /?h=bdsem=1 HTTP/1.1
    Host: 588ku.com
    User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0
    
    '
    print(header)   # 打印出我们的写的一个简单的请求头

    打印结果如下:

     六、爬虫中请求报文的需要注意的:

      1. 如果我们的域名后的数据过长,那么为了美观我们难免要换行,这个时候就需要注意了,如果是以下这种三引号的方式(错误)来进行换行:

    http_req = b'''GET /photos2/2019/0416/5cb5e9950e25a.jpeg?watermark/1/image
    /aHR0cDovL3Jlcy5nYWdhLm1lL3dhdGVybWFyay9wYWl4aW4xLnBuZz9pbWFnZVZpZXcyLzIvdy80MDAvaC80MDA=
    /dissolve/50/gravity/Center/ws/1 HTTP/1.1
    
    Host: images.gaga.me
    
    User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0
    
    
    '''
    print(http_req)

       打印结果为:

       很明显我们可以看到,我们自己写的报文被打印出来每个 的后面都多个个 ,这会导致我们的请求头报文错误,因为我们在三引号中的换行,系统都自动给我们补全了一个 ,那么如何处理呢,我们可以在每一行的后面多加一个,来达到我们仅仅是书写的板式的换行,而内容并没换行的效果。(正确)代码如下:

    http_req = b'''GET /photos2/2019/0416/5cb5e9950e25a.jpeg?watermark/1/image
    /aHR0cDovL3Jlcy5nYWdhLm1lL3dhdGVybWFyay9wYWl4aW4xLnBuZz9pbWFnZVZpZXcyLzIvdy80MDAvaC80MDA=
    /dissolve/50/gravity/Center/ws/1 HTTP/1.1
    
    Host: images.gaga.me
    
    User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0
    
    
    '''
    print(http_req)   #打印我们的请求报文

       打印结果为:

       这样的话我们的报文内容就没有被修改了。

    ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    本文仅为个人学习笔记,如有侵权或者相关的python问题想要与我联系或指正,可发送至1730797947@qq.com邮箱,我会及时删除文章或回复消息



        
  • 相关阅读:
    微服务 面试
    SpringMVC工作原理
    win7系统不能用telnet命令的两种解决方法
    Java NIO框架Netty教程(一) – Hello Netty
    基于JT/T808协议的车辆监控平台架构方案
    分布式高并发物联网(车联网-JT808协议)平台架构方案
    Linux CGroup
    Linux top、VIRT、RES、SHR、SWAP(S)、DATA Memory Parameters Detailed
    UEFI BIOS Rootkit Analysis
    Kademlia、DHT、KRPC、BitTorrent 协议、DHT Sniffer
  • 原文地址:https://www.cnblogs.com/wangyusu/p/10905432.html
Copyright © 2020-2023  润新知