#File name is rotate_useragent
# -*- coding: UTF-8 -*-
import random
import urllib2
import redis
from scrapy.contrib.downloadermiddleware.useragent import UserAgentMiddleware
from CrawlerTools.ScrapyFileSystem.config import *
class RotateUserAgentMiddleware(UserAgentMiddleware):
    
    def __inti__(self,user_agent=""):
        self.user_agent=user_agent

def process_request(self,request,spider):
        user_agent_list=["Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 "  
                    "(KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1",  
                    "Mozilla/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit/536.11 "  
                    "(KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11",  
                    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 "  
                    "(KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6",  
                    "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 "  
                    "(KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6",  
                    "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.1 "  
                    "(KHTML, like Gecko) Chrome/19.77.34.5 Safari/537.1",  
                    "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 "  
                    "(KHTML, like Gecko) Chrome/19.0.1084.9 Safari/536.5",  
                    "Mozilla/5.0 (Windows NT 6.0) AppleWebKit/536.5 "  
                    "(KHTML, like Gecko) Chrome/19.0.1084.36 Safari/536.5",  
                    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 "  
                    "(KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",  
                    "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.3 "  
                    "(KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",
                    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_0) AppleWebKit/536.3 "  
                    "(KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",  
                    "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 "  
                    "(KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3",  
                    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 "  
                    "(KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3",  
                    "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 "  
                    "(KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",  
                    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 "  
                    "(KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",  
                    "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.3 "  
                    "(KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",  
                    "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 "  
                    "(KHTML, like Gecko) Chrome/19.0.1061.0 Safari/536.3",  
                    "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.24 "  
                    "(KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24",  
                    "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/535.24 "  
                    "(KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24"  ]
        ua=random.choice(user_agent_list)
        if ua:
            request.headers.setdefault("User-Agent",ua)

#Get  ip
        cfg=config("Redis")
        redisId=redis.Redis(cfg["host"],cfg["port"],1,cfg["pwd"])
        res=redisId.srandmember("ipPool",1)[0].strip()
        urls=res.split(":")
        request.meta['proxy'] ="http://"+str(urls[0])+":"+str(urls[1])
        # Use the following lines if your proxy requires authentication

#Configuration profile
DOWNLOADER_MIDDLEWARES = {
        'scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware' : None,  
    'CrawlerTools.rotate_useragent.RotateUserAgentMiddleware' :400  
}

scrapy_ip_agent的更多相关文章

随机推荐

  1. AppDelegate 、UIApplication 的用法

    转载自  http://blog.chinaunix.net/uid-26768267-id-3300042.html //AppDelegate.h 头文件 #import <UIKit/UI ...

  2. c语言 while (~scanf("%d%d",&n,&m)) 在这里这个符号“~”是什么意思

    按位取反,简单地说就是二进制1变0,0变1 由于scanf是有返回值的,且返回值为int型 特别的此处用法导致只有scanf返回-1,循环才会结束,也就是要返回EOF while (~scanf(&q ...

  3. js正则验证手机号

    var regp = /^(\+86|86|)1[3458][0-9]{9}$/; if(str==""){ var flag = checkstatus(obj,"&q ...

  4. [PoC]某B2B网站的一个反射型XSS漏洞

    Author: Charlie 个人微博:http://YinYongYou.com 转载请注明出处. 工作过程纯粹手贱,测试了一下.然后发现了这么一个东西.有心利用能造成大范围影响.如可以自由修改用 ...

  5. struts2文件下载 出现Can not find a java.io.InputStream with the name的错误

    成功代码: 前台界面jsp: <a style="text-decoration:none;" href="<%=path %>/main/frontN ...

  6. 利用AssetsManager实现在线更新脚本文件lua、js、图片等资源(免去平台审核周期)

    转自:http://www.himigame.com/iphone-cocos2dx/1354.html 首先说明一个问题: 为什么要在线更新资源和脚本文件!? 对于此问题,那要说的太多了,简单概括, ...

  7. PostgreSQL的 initdb 源代码分析之二十四

    继续分析: make_template0(); 展开: 无需再作解释,就是创建template0数据库 /* * copy template1 to template0 */ static void ...

  8. android 表情,软键盘冲突解决方案(仿微博等SNS应用)

    之前总想搞一下这个模块,可是由于忙碌总是推迟,现在就把这块好好的弥补过来,下面是我实现的思路.本人才疏学浅,还望大家不要见笑. 首先我们还是先看写示例:            上面应用应该不用我过多介 ...

  9. 利用text插件和css插件优化web应用

    JavaScript的模块化开发到如今,已经相当成熟了,当然,一个应用包含的不仅仅有js,还有html模板和css文件. 那么,如何将html和css也一起打包,来减少没必要的HTTP请求数呢? 本文 ...

  10. c++中的强制转换static_cast、dynamic_cast、reinterpret_cast的不同用法儿

    c++中的强制转换static_cast.dynamic_cast.reinterpret_cast的不同用法儿   虽然const_cast是用来去除变量的const限定,但是static_cast ...