scrapy中的useragent与代理ip

方法一:

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

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

scrapy的useragent与代理ip Python 第1张

 

 

推荐方案:

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,
}

如图:

scrapy的useragent与代理ip Python 第2张

 

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

scrapy的useragent与代理ip Python 第3张

 

可以看出我们的随机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,
}

scrapy的useragent与代理ip Python 第4张

 

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

scrapy的useragent与代理ip Python 第5张

 

 

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

 

 

 

 

 

 

 

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄