关闭

Scrapy的Ip代理的配置(未完成)

标签: XX-NetGoagentscrapyIP代理
4102人阅读 评论(0) 收藏 举报
分类:

1、编写代理中间件

这是最直接的方式,也是能够比较快速实现的。前提是你需要拥有可用的代理ip。网上有一些免费的代理ip资源可以使用,但是往往都不稳定。如果有条件可以买一些IP代理来使用。

代理中间件的代码如下所示:

import random
class ProxyMiddleware(object):
    # overwrite process request
    def process_request(self, request, spider):
        # Set the location of the proxy
        proxy_ip = random.choice(self.user_agent_ip_list)
        request.meta['proxy'] = proxy_ip
        print '+'*8, 'the Current ip address is', proxy_ip, '+'*8

    # ip from http://pachong.org/
    user_agent_ip_list = [\
        "http://122.96.59.102:81",
        "http://14.18.238.177:4040",
        "http://144.112.91.97:90",
        "http://124.202.169.54:8118"
       ]

代理中间件代码编写完成后,还要修改一下配置文件,如下所示:

DOWNLOADER_MIDDLEWARES = {
    'scrapy.contrib.downloadermiddleware.httpproxy.HttpProxyMiddleware': 110,
    'weiboscrapy.rotate_ipagent.ProxyMiddleware': 100,
    }


在没有计划购买代理ip,免费代理ip又不能满足需求的情况下,可以考虑曲线救国的策略。我主要参考了如下几种方式:


2、Scrapy+Goagent策略

Goagent是google的代理项目,使用它你可以通过google的服务器去访问目的站点,也就实现了ip代理的功能。但是Goagent项目特别注明了,他的ip不是匿名的,所以这个策略能起到的效果还是很有限的。

使用这个策略只需要将1中代理中间件中的代理ip设置为Goagent代理ip即可。

proxy_ip = “https://127.0.0.1:8087”
前提是你在自己的电脑上安装了Goagent或者XX-Net(内部集成了Goagent)。

备注:如果你想抓取国外被XX的网站,这也是一个不错的选择。

3、Scrapy+Crawlera策略

Crawlera是Scrapinghub公司提供的一个下载的中间件,其提供了很多服务器和ip,scrapy可以通过Crawlera向目标站点发起请求。

该文章对scrapy使用Crawlera做了比较好的介绍,可以参考。

详细信息可以参考官方文档: http://doc.scrapinghub.com/crawlera.html

最重要的是需要在配置文件里,配置开启Crawlera中间件。如下所示:

DOWNLOADER_MIDDLEWARES = {
    # ********CRAWLERA SETTING********
    'scrapy_crawlera.CrawleraMiddleware': 600
    }
然后要添加以下配置信息:

# ********CRAWLERA SETTING********
CRAWLERA_ENABLED = True
CRAWLERA_USER = '3401ccde103a4e3099c1420dee5aeb0b'
CRAWLERA_PASS = ''
CRAWLERA_PRESERVE_DELAY = True
其中CRAWLERA_USER是注册crawlera之后申请到的API Key;是
CRAWLERA_PASS<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">则代表crawlera的password,关于是否填写password,参考官网上的一句话,如下图所示。</span>

我因为这个错误,浪费了好长时间,一般默认是不填写的,空白即可。


在配置完成后,使用crawlera中间件访问“http://www.weibo.com”出现如下错误:

[<twisted.python.failure<class 'twisted.internet.error.ConnectionLost'>>]


搞了半天没搞明白,后来尝试访问别的url地址,结果就没有这个错误了:


不知道是怎么搞的。主要是对Twisted模块也不是很熟,这个问题暂时没有解决。

4、Scrapy+Tor(高度匿名的免费代理)

XX-Net在Github首页上指明其本身不是匿名的,向用户推荐了Tor这个工具。暂时还没有实现,待验证。

http://pkmishra.github.io/blog/2013/03/18/how-to-run-scrapy-with-TOR-and-multiple-browser-agents-part-1-mac/

未完待续...

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:42211次
    • 积分:643
    • 等级:
    • 排名:千里之外
    • 原创:20篇
    • 转载:18篇
    • 译文:0篇
    • 评论:7条
    最新评论