爬虫初步了解

 一、爬虫的概念:

    口语版:也叫网络蜘蛛,它是批量下载网络资源的程序
专业版:网络爬虫是伪装成客户端与服务端进行数据交互的程序
二、爬虫的应用:
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 这个是我发送请求的客户端是火狐浏览器
          注意:请求头的每一行的末尾都要加上\r\n          # \r\n 是window中的换行, \r 是mac的换行, \n 是linux中的换行
             而且在请求头的末尾应该再加上一个\r\n,即整个请求头应该以\r\n\r\n来进行结尾。
header = b'GET /?h=bdsem=1 HTTP/1.1\r\nHost: 588ku.com\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0\r\n\r\n'
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\r\n
Host: images.gaga.me\r\n
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0\r\n\r\n
'''
print(http_req)

   打印结果为:

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

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

   打印结果为:

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

 

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

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

 

 

 

 

 

 

 



    
posted @ 2019-05-22 13:40  安晓苏阳  阅读(329)  评论(0编辑  收藏  举报