scrapy proxy and user_agent

本文介绍如何在Scrapy爬虫项目中设置随机UserAgent和代理IP池,通过自定义中间件实现每次请求更换不同的UserAgent和代理地址,有效避免被目标网站封禁。

1.在settings.py同级目录下新建文件useragent.py

Java代码  收藏代码
  1. # -*-coding:utf-8-*-  
  2. from scrapy import log  
  3. import logging  
  4.   
  5. import random  
  6. from scrapy.downloadermiddlewares.useragent import UserAgentMiddleware  
  7. class UserAgent(UserAgentMiddleware):  
  8.   
  9.     def __init__(self, user_agent=''):  
  10.         self.user_agent = user_agent  
  11.   
  12.     def process_request(self, request, spider):  
  13.         ua = random.choice(self.user_agent_list)  
  14.         if ua:  
  15.             #显示当前使用的useragent  
  16.             #print "********Current UserAgent:%s************" %ua  
  17.             #记录  
  18.             log.msg('Current UserAgent: '+ua, level=logging.DEBUG)  
  19.             request.headers.setdefault('User-Agent', ua)  
  20.   
  21.     #the default user_agent_list composes chrome,I E,firefox,Mozilla,opera,netscape  
  22.     #for more user agent strings,you can find it in http://www.useragentstring.com/pages/useragentstring.php  
  23.     user_agent_list = [\  
  24.         "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 "  
  25.         "(KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1",  
  26.         "Mozilla/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit/536.11 "  
  27.         "(KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11",  
  28.         "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 "  
  29.         "(KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6",  
  30.         "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 "  
  31.         "(KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6",  
  32.         "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.1 "  
  33.         "(KHTML, like Gecko) Chrome/19.77.34.5 Safari/537.1",  
  34.         "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 "  
  35.         "(KHTML, like Gecko) Chrome/19.0.1084.9 Safari/536.5",  
  36.         "Mozilla/5.0 (Windows NT 6.0) AppleWebKit/536.5 "  
  37.         "(KHTML, like Gecko) Chrome/19.0.1084.36 Safari/536.5",  
  38.         "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 "  
  39.         "(KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",  
  40.         "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.3 "  
  41.         "(KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",  
  42.         "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_0) AppleWebKit/536.3 "  
  43.         "(KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",  
  44.         "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 "  
  45.         "(KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3",  
  46.         "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 "  
  47.         "(KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3",  
  48.         "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 "  
  49.         "(KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",  
  50.         "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 "  
  51.         "(KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",  
  52.         "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.3 "  
  53.         "(KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",  
  54.         "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 "  
  55.         "(KHTML, like Gecko) Chrome/19.0.1061.0 Safari/536.3",  
  56.         "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.24 "  
  57.         "(KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24",  
  58.         "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/535.24 "  
  59.         "(KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24"  
  60.        ]  

 

2.在settings.py同级目录新建文件proxymiddlewares.py

Java代码  收藏代码
  1. # -*- coding: utf-8 -*-  
  2. import random, base64  
  3.   
  4.   
  5. class ProxyMiddleware(object):  
  6.   
  7.     proxyList = [ \  
  8.         '121.193.143.249:80','112.126.65.193:80','122.96.59.104:82','115.29.98.139:9999','117.131.216.214:80','116.226.243.166:8118','101.81.22.21:8118','122.96.59.107:843'      
  9.         ]  
  10.   
  11.     def process_request(self, request, spider):  
  12.         # Set the location of the proxy  
  13.         pro_adr = random.choice(self.proxyList)  
  14.         print("USE PROXY -> " + pro_adr)  
  15.         request.meta['proxy'] = "http://" + pro_adr  

 

3.修改settings.py (注意DOWNLOADER_MIDDLEWARES)

Java代码  收藏代码
  1. # -*- coding: utf-8 -*-  
  2.   
  3. BOT_NAME = 'ip_proxy_pool'  
  4.   
  5. SPIDER_MODULES = ['ip_proxy_pool.spiders']  
  6. NEWSPIDER_MODULE = 'ip_proxy_pool.spiders'  
  7.   
  8. # Obey robots.txt rules  
  9. ROBOTSTXT_OBEY = False  
  10.   
  11. ITEM_PIPELINES = {  
  12.    'ip_proxy_pool.pipelines.IpProxyPoolPipeline': 300,  
  13. }  
  14.   
  15. #爬取间隔  
  16. DOWNLOAD_DELAY = 1  
  17.   
  18. # 禁用cookie  
  19. COOKIES_ENABLED = False  
  20.   
  21.   
  22. # 重写默认请求头  
  23. DEFAULT_REQUEST_HEADERS = {  
  24.   'Accept': 'text/html, application/xhtml+xml, application/xml',  
  25.   'Accept-Language': 'zh-CN,zh;q=0.8',  
  26.   'Host':'ip84.com',  
  27.   'Referer':'http://ip84.com/',  
  28.   'X-XHR-Referer':'http://ip84.com/'  
  29. }  
  30.   
  31. #激活自定义UserAgent和代理IP  
  32. # See http://scrapy.readthedocs.org/en/latest/topics/downloader-middleware.html  
  33. DOWNLOADER_MIDDLEWARES = {  
  34.    'ip_proxy_pool.useragent.UserAgent': 1,  
  35.    'ip_proxy_pool.proxymiddlewares.ProxyMiddleware':100,  
  36.    'scrapy.downloadermiddleware.useragent.UserAgentMiddleware' : None,  
  37. }  

 

转载于:https://www.cnblogs.com/rabbittail/p/7836705.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值