国内的免费IP代理网站参考:
http://www.xicidaili.com/wt
https://www.kuaidaili.com/free/
http://www.youdaili.net/Daili/guonei/
http://ip.zdaye.com/FreeIPlist.html
一 丶 通过中间件添加代理池
在中间件 middlewares.py 中 添加一个 代理 类
import random
from proxy1.settings import IPPOOL
class ProxychiMiddleware(object):
# 定义一个请求之前的方法
def process_request(self, request, spider):
# 如果是 私密代理
# request.meta['proxy'] = 'https://用户名and密码114.212.12.4:3128'
# 随即获取一个代理
this_ip = random.choice(IPPOOL)
request.meta['proxy'] = 'HTTP://'+this_ip
return None
在 setting.py 中 启用 middlewares.py 中的 代理类
(代理池中的IP地址, 应该已经不能用了, 各位小伙伴们 可以去一下IP代理网站中找新的 )
DOWNLOADER_MIDDLEWARES = {
# 启用的类名 要和 中间件中的类名一致
'movie.middlewares.ProxychiMiddleware': 543,
}
# 定义一个代理池
IPPOOL=[
{"ipaddr":"123.55.1.75:30325"},
{"ipaddr":"220.184.213.12:6666"},
{"ipaddr":"171.38.85.82:8123"},
{"ipaddr":"111.121.193.214:3128"},
{"ipaddr":"58.48.193.180:3128"},
{"ipaddr":"171.37.29.26:9797"},
{"ipaddr":"119.188.162.165:8081"}
]
二 , 重写 start_requests方法 :
import scrapy
import random
# 设置一个代理池
proxy_pool = [{'HTTP':'111.155.116.215:8123'}]
class ProxydemoSpider(scrapy.Spider):
name = 'proxydemo'
allowed_domains = ['www.baidu.com']
start_urls = ['http://www.baidu.com/']
def start_requests(self):
for url in self.start_urls:
proxy_addr = random.choice(proxy_pool) # 随机选一个
yield scrapy.Request(url=url, callback=self.parse, meta={'proxy': proxy_addr}) # 通过meta参数添加代理
def parse(self, response):
print('proxy simida')