Python scrapy设置代理ip

应用scrapy爬虫的时候,经常遇到ip被封的问题,直接导致无法获取数据,所以要使用代理ip。

在网上有很多大神写的案例,我选择了一个进行使用,不知道是ip的原因还是我写的有问题,还是会报错,但是思路总是有的,先记下来再熟悉一遍慢慢就会了。

首先第一步是在settings文件里设置好proxy_list

PROXIES_LIST = {
    'http://112.85.168.96:9999',
    'http://1.197.203.234:9999',
    'http://120.83.106.228:9999'
    'https://223.241.78.23:808',
    'https://112.85.171.126:9999'
   ]

第二步是在下载器中间件中加入代理IP,在把中间的类名加入setting中。

什么是下载器中间件。

参考scrapy官方文档可以看到。

下载器中间件是 Scrapy 请求/响应处理的钩子框架。这是一个轻量级的低级系统,用于全局更改 Scrapy 的请求和响应。

也就是说,下载器中间件可以全局修改Scrapy request和response,那就可以在这里设置代理ip来请求网页。

下载器中间件在middlewares文件里.

在middlewares文件里设置process_request类和 import PROXIES_LIST

from douban.settings import PROXIES_LIST
import random

class process_request(object):
    def process_request(self, request, spider):
        request.meta['proxy'] = random.choice(PROXIES_LIST)

在settings文件里开启 donwloader_middlewares 中间件:

DOWNLOADER_MIDDLEWARES = {
   # 'douban.middlewares.DoubanDownloaderMiddleware': 543,
   'douban.middlewares.process_request': 541
   }

这只是一个简单的思路,怕自己忘了,还要不断重复尝试。

哦对了,我用的代理网站是:高匿ip非国外免费代理服务器提供,非国外免费ip代理服务器地址列表 - 第1页 - 西拉免费代理IP

  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Scrapy可以通过设置中间件来实现代理IP的更换。以下是一个示例: 1. 创建一个代理中间件 ```python import random from scrapy import signals from scrapy.downloadermiddlewares.retry import RetryMiddleware from scrapy.utils.response import response_status_message from scrapy.exceptions import NotConfigured from urllib.parse import urlparse class ProxyMiddleware(object): def __init__(self, settings): self.proxies = settings.getlist('PROXIES') if not self.proxies: raise NotConfigured @classmethod def from_crawler(cls, crawler): return cls(crawler.settings) def process_request(self, request, spider): parsed_url = urlparse(request.url) proxy = random.choice(self.proxies) request.meta['proxy'] = proxy request.meta['download_timeout'] = 30 request.headers['User-Agent'] = 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0' def process_response(self, request, response, spider): if response.status != 200: reason = response_status_message(response.status) return self._retry(request, reason, spider) or response return response def process_exception(self, request, exception, spider): return self._retry(request, str(exception), spider) def _retry(self, request, reason, spider): if 'proxy' in request.meta: self.proxies.remove(request.meta['proxy']) if self.proxies: proxy = random.choice(self.proxies) request.meta['proxy'] = proxy spider.logger.debug('Using proxy <%s>, %d proxies left' % ( proxy, len(self.proxies))) return request.copy() ``` 2. 在settings.py中启用代理中间件 ```python DOWNLOADER_MIDDLEWARES = { 'myproject.middlewares.ProxyMiddleware': 543, } ``` 3. 在settings.py中设置代理IP列表 ```python PROXIES = [ 'http://127.0.0.1:8888', 'http://127.0.0.1:8889', 'http://127.0.0.1:8890', ] ``` 其中,`PROXIES`是一个代理IP列表,Scrapy在每次请求时会随机选择一个代理IP。如果请求失败,中间件会自动更换代理IP并重试。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值