國内的免費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')