scrapy--設置user-agent和代理池

建立user-agent池:在request的headers中設置User-Agent

class RandomUserAgent(object):
    def __init__(self,user_agent):
        self.user_agent = user_agent
 
    @classmethod
    def from_crawler(cls,crawler):
        # 從settings中加載USER_AGENT的值
        return cls(
            user_agent=crawler.settings.getlist('USER_AGENT') #getlist()就是返回list類型
        )
 
    def process_request(self, request, spider):
        # 在process_request中設置User-Agent的值
        request.headers.setdefault('User-Agent',random.choice(self.user_agent))

建立IP代理池:在meta中的proxy字段改寫代理

class RandomProxy(object):
    def __init__(self,iplist):
        self.iplist = iplist
 
    @classmethod
    def from_crawler(cls,crawler):
        # 在settings中加載IPLIST的值
        return cls(
            iplist=crawler.settings.getlist('IPLIST')
        )
 
    def process_request(self, request, spider):
        # 在請求上添加代理
        proxy = random.choice(self.iplist)
        request.meta['proxy'] = proxy

在settings中設置user-agent和IP代理池:

USER_AGENT = ["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"
            ]
            
 #自定義的列表屬性,但是仍然可以通過crawler.settings.getlist()訪問
IPLIST = [
		 'https://115.28.209.249:3128',
		'https://192.99.245.228:3128',
		'https://219.223.251.173:3128',
		'https://119.28.152.208:80',
		'https://210.5.149.43:8090',
		'https://114.251.228.124:3128',
		'https://221.7.255.168:80'
		]

最後在settings中設置組件,失效的downloader用None賦值:

DOWNLOADER_MIDDLEWARES = {
    'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware':None,
    'DownloadMiddlewares.middlewares.RandomUserAgent': 400,
    'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware':None,
    'DownloadMiddlewares.middlewares.RandomProxy': 750,
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章