scrapy的IP池搭建
时间: 2024-01-24 18:18:09 浏览: 24
Scrapy的IP池搭建可以通过代理服务器来实现。以下是一个简单的示例:
1. 安装Scrapy和requests库
```
pip install scrapy
pip install requests
```
2. 在settings.py中添加以下代码:
```
DOWNLOADER_MIDDLEWARES = {
'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 543,
'yourproject.middlewares.RandomProxyMiddleware': 544,
}
PROXY_LIST = [
'http://ip1:port1',
'http://ip2:port2',
...
]
PROXY_PROTOCOL = 'http'
```
其中,PROXY_LIST是代理列表,可以从代理提供商那里获得。PROXY_PROTOCOL是代理协议,一般为http或https。
3. 创建中间件文件yourproject/middlewares.py,添加以下代码:
```
import random
import requests
from scrapy import signals
from scrapy.exceptions import NotConfigured
class RandomProxyMiddleware(object):
def __init__(self, proxy_list, proxy_protocol):
self.proxy_list = proxy_list
self.proxy_protocol = proxy_protocol
@classmethod
def from_crawler(cls, crawler):
proxy_list = crawler.settings.getlist('PROXY_LIST')
proxy_protocol = crawler.settings.get('PROXY_PROTOCOL')
if not proxy_list:
raise NotConfigured("PROXY_LIST is not set")
return cls(proxy_list, proxy_protocol)
def process_request(self, request, spider):
proxy = random.choice(self.proxy_list)
try:
request.meta['proxy'] = self.proxy_protocol + '://' + proxy
response = requests.get('http://www.baidu.com', proxies=request.meta['proxy'], timeout=5)
if response.status_code != 200:
self.proxy_list.remove(proxy)
print('Proxy invalid:', proxy)
return self.process_request(request, spider)
except Exception:
self.proxy_list.remove(proxy)
print('Proxy invalid:', proxy)
return self.process_request(request, spider)
```
这个中间件会随机选择一个代理服务器,并在发送请求之前检查该代理服务器是否可用。如果代理服务器不可用,则从代理列表中删除该代理,并使用另一个代理服务器。
4. 运行Scrapy
现在可以启动Scrapy并使用代理服务器了。可以使用以下命令启动Scrapy:
```
scrapy crawl yourspider
```
其中,yourspider是你的爬虫名称。