Scrapy 通过代理(Proxy)爬取外部网站

Scrapy 通过代理(Proxy)爬取外部网站

通常我们不需要特殊处理就能直接的访问WWW。但当你处于内部网络通过代理访问外部的时候,或者一些特殊的情况下,你会需要这个技能。

默认你已经会用Scrapy制作蜘蛛了。你可以参考我的另一个介绍页面,或者其他更详尽的教程。

最简单直接的办法

就是在蜘蛛的开头设置系统环境变量像这样:

import os
# 设置相应的代理用户名密码,主机和端口号
os.environ["http_proxy"] = "http://user:[email protected]:8080"
class YourCrawlSpider(CrawlSpider):

统一的解决方案

如果你蜘蛛很多,想用统一的办法,那么你往下看。

  • 第一步需要创建一个中间插件,安插到每个Request发出去之前,补充上Proxy的信息,像这样:
class ProxyMiddleware(object): 
    # overwrite process request 
    def process_request(self, request, spider): 
        # 设置代理的主机和端口号
        request.meta['proxy'] = "http://proxy.internal.server.com:8080"

        # 设置代理的认证用户名和密码
        proxy_user_pass = "user:password"
        encoded_user_pass = base64.encodestring(proxy_user_pass)

        # 设置代理
        request.headers['Proxy-Authorization'] = 'Basic ' + encoded_user_pass
  • 然后到setting里面启用这个插件
DOWNLOADER_MIDDLEWARES = { 
    'middlewares.ProxyMiddleware': 90,
}

这样之后,所有的蜘蛛都可以通过代理出去遨游啦。

你可能感兴趣的:(python,python-scrapy,爬虫-python)