在學習scrapy爬蟲框架中,確定會涉及到IP代理池和User-Agent池的設定,規避網站的反爬。html
這兩天在看一個關於搜狗微信文章爬取的視頻,裏面有講到ip代理池和用戶代理池,在此結合自身的所瞭解的知識,作一下總結筆記,方便之後借鑑。python
一.反爬蟲機制處理思路:git
二.散點知識:github
相關代碼已經調試成功----2017-4-4ajax
目標網址:http://weixin.sogou.com/weixin?type=2&query=python&ie=utf8瀏覽器
實現:關於python文章的抓取,抓取標題、標題連接、描述。以下圖所示。微信
數據:數據我就沒有保存,此實戰主要是爲了學習IP和用戶代理池的設定,推薦一個開源項目關於搜狗微信公衆號:基於搜狗微信的公衆號文章爬蟲python爬蟲
圖1框架
在這裏貼出設置IP和用戶代理池的代碼,完整代碼請移步個人github:https://github.com/pujinxiao/weixindom
1.middlewares.py主要代碼
1 # -*- coding: utf-8 -*- 2 import random 3 from scrapy.downloadermiddlewares.httpproxy import HttpProxyMiddleware #代理ip,這是固定的導入 4 from scrapy.downloadermiddlewares.useragent import UserAgentMiddleware #代理UA,固定導入 5 class IPPOOLS(HttpProxyMiddleware): 6 def __init__(self,ip=''): 7 '''初始化''' 8 self.ip=ip 9 def process_request(self, request, spider): 10 '''使用代理ip,隨機選用''' 11 ip=random.choice(self.ip_pools) #隨機選擇一個ip 12 print '當前使用的IP是'+ip['ip'] 13 try: 14 request.meta["proxy"]="http://"+ip['ip'] 15 except Exception,e: 16 print e 17 pass 18 ip_pools=[ 19 {'ip': '124.65.238.166:80'}, 20 # {'ip':''}, 21 ] 22 class UAPOOLS(UserAgentMiddleware): 23 def __init__(self,user_agent=''): 24 self.user_agent=user_agent 25 def process_request(self, request, spider): 26 '''使用代理UA,隨機選用''' 27 ua=random.choice(self.user_agent_pools) 28 print '當前使用的user-agent是'+ua 29 try: 30 request.headers.setdefault('User-Agent',ua) 31 except Exception,e: 32 print e 33 pass 34 user_agent_pools=[ 35 'Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3', 36 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3', 37 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36', 38 ]
2.setting.py主要代碼
1 DOWNLOADER_MIDDLEWARES = { 2 'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware':123, 3 'weixin.middlewares.IPPOOLS':124, 4 'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware' : 125, 5 'weixin.middlewares.UAPOOLS':126 6 }
做者:今孝
出處:http://www.cnblogs.com/jinxiao-pu/p/6665180.html本文版權歸做者和博客園共有,歡迎轉載,但未經做者贊成必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接。