基于scrapy框架的爬虫代理IP设置

找到免费或者消费的代理网站,拿到获取IP的API,在Middlewares中添加ProxyMiddleware组件,同时在settings.py中使能。
具体代码如下:

import re
import urllib.request
import random

class ProxyMiddleware(object):

    logger = logging.getLogger(__name__)

    def get_random_ip(self):
        # order是订单号或者序列号
        order = "xxxxxxxxxxxxxxxxxxx"
        APIurl = "http://xxxxxxxxxxxxxxxxxxxx" + order + ".html"
        res = urllib.request.urlopen(APIurl).read().decode("utf-8")
        IPs = res.split("\n")
        proxyip = random.choices(IPs)        
        # print(proxyip)
        return 'http://' + proxyip

    def process_request(self, request, spider):
        ip = self.get_random_ip()
        print("Current IP:Port is %s" % ip)
        request.meta['proxy'] = ip

    def process_response(self, request, response, spider):
        return response

settings中的设置如下:

DOWNLOADER_MIDDLEWARES = {
    "example.middlewares.RotateUserAgentMiddleware": 100,
    # 下面对应我们自己编写的ProxyMiddleware, 其后数字越小表示优先级越高,越先执行
    "example.middlewares.ProxyMiddleware": 110,
    'example.middlewares.ExampleDownloaderMiddleware': 543,
    'scrapy.downloadermiddlewares.retry.RetryMiddleware': None,
    'scrapy.downloadermiddlewares.redirect.RedirectMiddleware': None,
}

具体如何使用代理ip还要根据调用接口的频率来定,一般的API会限制每分钟提取的ip个数,这就涉及到更加具体的编程,结合自己的爬取需求和经济能力。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容