本文介绍的代理IP为动态转发代理(http://www.xiaozhudaili.com/buy/tunnel.html),只需要在代码中设置好固定的IP和端口号,以后的每个请求转发代理都会自动更换一个新的IP,不需要在代码中做什么操作。
动态转发代理需要有 IP:PORT,用户名,密码。(以下用户名和密码换成自己的)
IP:PORT | tunnel.xiaozhudaili.com:15678 |
用户名 | 98HM82734JLDS9AJLWERDIOJA0 |
密码 | xxxxxx |
剩下的就是在middlewares.py中设置上面的代理IP,然后在settings.py里面调用相应的类就可以了。
第一步,编辑middlewares.py,添加如下类:
import base64
import requests;
import time;
import threading;
import urllib3;
class IpProxyDownloadMiddleware(object):
'''
独享代理ip的应用方法,需要解码
'''
def process_request(self, request, spider):
#消除关闭证书验证的警告
urllib3.disable_warnings();
#设置代理
proxy = 'ip:端口'
user_password = '用户名:密码'
request.meta['proxy'] = proxy
b64_user_password = base64.b64encode(user_password.encode('utf-8'))
request.headers['Proxy-Authorization'] = 'Basic' + b64_user_password.decode('utf-8')
第二步,在settings中设置开启自定义的下载中间件:
DOWNLOADER_MIDDLEWARES = {
'scrapy.contrib.downloadermiddleware.IpProxyDownloadMiddleware': 543, # 543是权重值
}
第三步,开始采集:
import scrapy
import json
class IpSpiderSpider(scrapy.Spider):
name = 'ip_spider'
allowed_domains = ['http_bin.org']
start_urls = ['http://http_bin.org/ip']
def parse(self, response):
origin = json.loads(response.text)['origin']
print('=='*20)
print(origin)
print('=='*20)
yield scrapy.Request(self.start_urls[0],dont_filter=True)
然后启动Scrapy就可以了,打印出的结果就是已经更改的ip