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。