zoukankan      html  css  js  c++  java
  • 爬虫初步了解

     一、爬虫的概念:

        口语版:也叫网络蜘蛛,它是批量下载网络资源的程序
    专业版:网络爬虫是伪装成客户端与服务端进行数据交互的程序
    二、爬虫的应用:
    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邮箱,我会及时删除文章或回复消息



        
  • 相关阅读:
    Software Solutions CACHE COHERENCE AND THE MESI PROTOCOL
    CACHE COHERENCE AND THE MESI PROTOCOL
    Multiprocessor Operating System Design Considerations SYMMETRIC MULTIPROCESSORS
    Organization SYMMETRIC MULTIPROCESSORS
    PARALLEL PROCESSING
    1分钟内发送差评邮件
    Secure Digital
    SYMMETRIC MULTIPROCESSORS
    A Taxonomy of Parallel Processor Architectures
    parallelism
  • 原文地址:https://www.cnblogs.com/wangyusu/p/10905432.html
Copyright © 2011-2022 走看看