scrapy中添加ip池的方法
我使用的是scrapy2.2
setting 中写下ip池
IPPOOL = [{'ipaddr':'221.230.72.165:80'},
{'ipaddr':'175.154.50.162:8118'},
{'ipaddr':'111.155.116.212:8123'},]
在在中间件midllewares添加代码
from mypython.settings import IPPOOLfrom scrapy import signals
from scrapy.downloadermiddlewares.httpproxy import HttpProxyMiddleware
# useful for handling different item types with a single interface
from itemadapter import is_item, ItemAdapter
import randomclass Ip_proxy(HttpProxyMiddleware):def __init__(self, ip=''):self.ip = ipdef process_request(self, request, spider):newip = random.choice(IPPOOL)print('ip为:'+ newip["ipaddr"])request.meta["proxy"] = "http://" + newip["ipaddr"]
random函数是随机获取ip池的ip
创建Ip_proxy类名字随意
在setting设置DOWNLOADER_MIDDLEWARES
类的名字没错就行
DOWNLOADER_MIDDLEWARES = {# 'youx.middlewares.MyCustomDownloaderMiddleware': 543,'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware':None,'mypython.middlewares.Ip_proxy': 125,}
mypython是创建scrapy的项目名(scrapy startproject mypython),大家根据自己的项目名修改。
setting 中写下ip池 IPPOOL=[]
也可以改为直接在中间件中间添加。
运行的结果
。。。
。。。
如果要写自动更新IP池 就要抓取ip,再导入中间件中,代理ip一般免费的都用不了,或者响应慢等一系列问题,一般都是买代理ip,一般都提供API接口。