zoukankan      html  css  js  c++  java
  • 吴裕雄--天生自然PYTHON爬虫:爬虫攻防战

     

     

     我们在开发者模式下不仅可以找到URL、Form Data,还可以在Request headers 中构造浏览器的请求头,封装自己。服务器识别浏览器访问的方法就是判断keywor是否为Request headers下的User-Agent,因此我们只需要构造这个请求头的参数。创建请求头部信息即可。

    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36'
    }
    response = requests.get(url,headers=headers)

    写到这里,或许许多人认为修改User-Agent很简单,也确实是简单,但是正常人1秒看一张图片,而如果是代码爬虫的话1秒就可以抓取好多张图,比如1秒就抓取了一百张图片,那么服务器的压力必然会增大。也就是说如果在一个IP下批量访问下载图片,这个行为不符合正常人类的行为,这个访问IP肯定要被封的。其原理也很简单,就是统计每个IP的访问率,该频率超过了阈值,就会返回一个验证码,如果真的是用户访问的话,用户就会填写,然后继续访问,如果是代码访问的话,就会封IP。

    这个问题的解决方案有两个,第一个就是常用的增设延时,每三秒抓取一次,代码如下:

    import time

    time.sleep(3)

    不管如何访问,服务器的目的就是要查出哪些访问是代码访问,然后封IP,解决避免被封IP,在数据采集时经常会使用代理。当然,requests也有相应的proxies属性。首先,构建自己的代理IP池,将其以字典的形式赋值给proxies,然后传输给requests,代码如下:

    proxies = {
    'http':'http://10.10.1.10:3128',
    'https':'http://10.10.1.10:1080'
    }
    response = requests.get(url,proxies=proxies)

  • 相关阅读:
    Nginx 本地建立负载均衡(Windows环境)
    Nginx 代理本地文件夹(Windows环境)
    PostGIS 使用Mysql_fdw同步ArcGIS填坑记录
    PostGIS mysql_fdw操作日志(留观)
    PostGIS mysql_fdw使用(Linux)
    PostGIS mysql_fdw安装(Linux)
    PostGIS 安装教程(Linux)(二)
    PostGIS 安装教程(Linux)(一)
    Linux 命令记录
    PostGIS 查看表属性(字段、类型、是否为空)
  • 原文地址:https://www.cnblogs.com/tszr/p/12186313.html
Copyright © 2011-2022 走看看