zoukankan      html  css  js  c++  java
  • scrapy的useragent与代理ip

    scrapy中的useragent与代理ip

    方法一:

    user-agent我们可以直接在settings.py中更改,如下图,这样修改比较简单,但是并不推荐,更推荐的方法是修改使用scrapy的中间件middlewares.py

    推荐方案:

    scrapy的中间件可以支持我们在对爬虫的请求进行定制化修改,例如我们为了躲避掉一些反爬虫措施,需要使用随机的useragent以及代理ip。

    user-agent中间件的编写:

    在middlewares.py文件中编写一个useragent中间件类

    class UserAgentDownloadMiddlerware(object):
        # 所有的request请求在交给下载器之前,都会经过这个方法
        def process_request(self,request,spider):
            import random
            user_agent_list=[
            "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36",
              "Dalvik/1.6.0 (Linux; U; Android 4.2.1; 2013022 MIUI/JHACNBL30.0)",
              "Mozilla/5.0 (Linux; U; Android 4.4.2; zh-cn; HUAWEI MT7-TL00 Build/HuaweiMT7-TL00) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",
              "AndroidDownloadManager",
              "Apache-HttpClient/UNAVAILABLE (java 1.4)",
              "Dalvik/1.6.0 (Linux; U; Android 4.3; SM-N7508V Build/JLS36C)",
              "Android50-AndroidPhone-8000-76-0-Statistics-wifi",
              "Dalvik/1.6.0 (Linux; U; Android 4.4.4; MI 3 MIUI/V7.2.1.0.KXCCNDA)",
              "Dalvik/1.6.0 (Linux; U; Android 4.4.2; Lenovo A3800-d Build/LenovoA3800-d)",
              "Lite 1.0 ( http://litesuits.com )",
              "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727)",
              "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 SE 2.X MetaSr 1.0",
              "Mozilla/5.0 (Linux; U; Android 4.1.1; zh-cn; HTC T528t Build/JRO03H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30; 360browser(securitypay,securityinstalled); 360(android,uppayplugin); 360 Aphone Browser (2.0.4)",
            ]
            random_ua = random.choice(user_agent_list)
            request.headers['User-Agent'] = random_ua

    然后在settings.py文件中开启下载器中间件并修改为自己的中间件

    DOWNLOADER_MIDDLEWARES = {
       'cnblog_dangdang.middlewares.UserAgentDownloadMiddlerware': 543,
    }

    如图:

    进行测试,看看是否为随机的useragent,测试结果如下:

    可以看出我们的随机useragent已经成功。

     

    代理ip中间件的编写:

    与useragent中间件相似,代理ip中间件的使用也是先编写自己的ip中间件然后去settings.py中编写使用

    在middlewares.py文件中编写一个proxy中间件类

    class ProxyDownloadMiddlerware(object):
        # 所有的request请求在交给下载器之前,都会经过这个方法
        def process_request(self,request,spider):
            import random
            ip_list = [
                "http://27.220.52.237:43289","http://119.176.199.90:9999",
            ]
            random_ip = random.choice(ip_list)
            request.meta['proxy'] = random_ip

    然后在settings.py文件中开启下载器中间件并修改为自己的中间件

    DOWNLOADER_MIDDLEWARES = {
       'cnblog_dangdang.middlewares.UserAgentDownloadMiddlerware': 543,
       'cnblog_dangdang.middlewares.ProxyDownloadMiddlerware': 543,
    }

    进行测试,看看是否为随机的代理ip,测试结果如下:

     可以看出来我们的中间件已经都起作用了每次都会换新的随机useragent与代理ip。

  • 相关阅读:
    【JavaScript】出现即使设置了ID也获取不到的可能原因与window.onload
    雄踞AppStore榜首的游戏<别踩到白块儿>源码分析和下载(一)
    WordPress公布新文章Email通知注冊用户
    BZOJ 1861 ZJOI2006 Book 书架 Splay
    Oracle Outline总结
    Matplot中文乱码完美解决方式
    Linux 在一个命令行上执行多个命令
    tophat
    echo输出到stderr
    随机森林
  • 原文地址:https://www.cnblogs.com/CYHISTW/p/12377664.html
Copyright © 2011-2022 走看看