python爬虫urllib模块反爬虫机制UA详解

  

<强>方法:使用urlencode函数

  

urllib.request.urlopen ()         进口urllib.request   进口urllib.parse   url=' https://www.sogou.com/web& # 63;   #将会请求中url携带的参数封装至字典中   param={   “查询”:“周杰伦”   }   #对url中的非ascii进行编码   param=urllib.parse.urlencode(参数)   #将编码后的数据值拼接回url中   url +=参数   响应=urllib.request.urlopen (url=url)   data=https://www.yisu.com/zixun/response.read ()   张开(’。/周杰伦html 1.”,“世界银行”)作为外交政策:   fp.write(数据)   打印(“写入文件完毕”)      

开发者工具浏览器按F12或者右键按检查,有个抓包工具网络,刷新页面,可以看到网页资源,可以看到请求头信息,UA

  

在抓包工具点击任意请求,可以看到所有请求信息,向应信息,

  

主要用到标题,响应,响应头存放响应头信息,请求头存放请求信息

  

 python爬虫urllib模块反爬虫机制UA详解

  

 python爬虫urllib模块反爬虫机制UA详解

  

反爬出机制:网站会检查请求的UA,如果发现UA是爬虫程序,会拒绝提供网站页面数据。

  

如果网站检查发现请求UA是基于某一款浏览器标识(浏览器发起的请求),网站会认为请求是正常请求,会把页面数据响应信息给客户端

  

用户代理(UA):请求载体的身份标识

  

<强>反反爬虫机制:
  

  

伪造爬虫程序的请求的UA,把爬虫程序的请求UA伪造成谷歌标识,火狐标识

  

<强>通过自定义请求对象,用于伪装爬虫程序请求的身份。
  

  

user - agent参数,简称为UA,该参数的作用是用于表明本次请求载体的身份标识。如果我们通过浏览器发起的请求,则该请求的载体为当前浏览器,则UA参数的值表明的是当前浏览器的身份标识表示的一串数据。

  

如果我们使用爬虫程序发起的一个请求,则该请求的载体为爬虫程序,那么该请求的UA为爬虫程序的身份标识表示的一串数据。

  

有些网站会通过辨别请求的UA来判别该请求的载体是否为爬虫程序,如果为爬虫程序,则不会给该请求返回响应,那么我们的爬虫程序则也无法通过请求爬取到该网站中的数据值,这也是反爬虫的一种初级技术手段。那么为了防止该问题的出现,则我们可以给爬虫程序的UA进行伪装,伪装成某款浏览器的身份标识。

  

上述案例中,我们是通过请求模块中的urlopen发起的请求,该请求对象为urllib中内置的默认请求对象,我们无法对其进行UA进行更改操作.urllib还为我们提供了一种自定义请求对象的方式,我们可以通过自定义请求对象的方式,给该请求对象中的UA进行伪装(更改)操作。

  

<>强自定义请求头信息字典可以添加谷歌浏览器的UA标识,自定义请求对象来伪装成谷歌UA
  

  

1。封装自定义的请求头信息的字典,
  

  

2。注意:在头字典中可以封装任意的请求头信息
  

  

3。将浏览器的UA数据获取,封装到一个字典中。该UA值可以通过抓包工具或者浏览器自带的开发者工具中获取某请求,
  从中获取UA的值

        进口urllib.request   进口urllib.parse   url=' https://www.sogou.com/web& # 63;查询='   # url的特性:url不可以存在非ASCII编码字符数据   词=urllib.parse.quote(“周杰伦”)   #将编码后的数据值拼接回url中   url=url +词#有效的url   #发请求之前对请求的UA进行伪造,伪造完再对请求网址发起请求   # UA伪造   # 1子制定一个请求对象,标题是请求头信息,字典形式   #封装自定义的请求头信息的字典,   #注意:在头字典中可以封装任意的请求头信息   头={   #存储任意的请求头信息   “用户代理”:“Mozilla/5.0(麦金塔电脑;Intel Mac OS X 10 _12_0) AppleWebKit/537.36 (KHTML,像壁虎)Chrome/68.0.3440.106 Safari/537.36”   }   #该请求对象的UA进行了成功的伪装=urllib.request请求。请求(url=url,标题=头)   # 2。针对自定义请求对象发起请求   响应=urllib.request.urlopen(请求)   # 3。获取响应对象中的页面数据:读函数可以获取响应对象中存储的页面数据(字节类型的数据值)   page_text=response.read ()   # 4。持久化存储:将爬取的页面数据写入文件进行保存   张开(“周杰伦. html”,“世界银行”)f:   f.write (page_text)   打印(“写入数据成功”)

python爬虫urllib模块反爬虫机制UA详解