zoukankan      html  css  js  c++  java
  • colly 分布式抓取 ##6

    分布式抓取

    根据抓取任务的需求,可以以不同的方式实现分布式抓取。大多数情况下,扩展网络通信层就足够了,使用代理和Colly的代理切换器可以很容易地实现这一点

    代理转换器

    当HTTP请求分布在多个代理之间时,使用代理切换器进行抓取仍然是集中的。Colly通过其' SetProxyFunc()成员支持代理切换。任何自定义函数都可以通过func(*http.Request) (*url.URL, error)。

    注意:SSH服务器可以用作带有-D标志的socks5代理。

    Colly有一个内置的代理切换器,它可以根据每个请求旋转代理列表。

    使用

    package main
    
    import (
    	"github.com/gocolly/colly"
    	"github.com/gocolly/colly/proxy"
    )
    
    func main() {
    	c := colly.NewCollector()
    
    	if p, err := proxy.RoundRobinProxySwitcher(
    		"socks5://127.0.0.1:1337",
    		"socks5://127.0.0.1:1338",
    		"http://127.0.0.1:8080",
    	); err == nil {
    		c.SetProxyFunc(p)
    	}
    	// ...
    }
    

    实现自定义代理切换器:

    var proxies []*url.URL = []*url.URL{
    	&url.URL{Host: "127.0.0.1:8080"},
    	&url.URL{Host: "127.0.0.1:8081"},
    }
    
    func randomProxySwitcher(_ *http.Request) (*url.URL, error) {
    	return proxies[random.Intn(len(proxies))], nil
    }
    
    // ...
    c.SetProxyFunc(randomProxySwitcher)
    

     

    分布式抓取

    要管理独立的和分布式的scraper,您所能做的最好的事情就是将scraper包装到服务器中。服务器可以是任何类型的服务,如HTTP、TCP服务器或谷歌应用程序引擎。使用自定义存储实现集中持久的cookie和访问url处理。

    注意:Colly有内置的谷歌应用程序引擎支持。如果您在App Engine标准环境中使用Colly,不要忘记调用Collector.Appengine(*http.Request)。

    这里可以找到一个示例实现。

    分布式存储

    默认情况下,已访问的URL和cookie数据存储在内存中。这是方便的短期抓取工作,但它可能是一个严重的限制,当处理大规模或长期运行的爬行作业。

    Colly能够用实现Colly /storage的任何存储后端替换默认的内存存储。存储接口。查看现有的存储

  • 相关阅读:
    【JavaScript知识点一】JavaScript 数据类型
    grunt操作之Gruntfile.js
    js重定向后跳转到当前页面锚点
    Java-变量和方法
    Java-运算符
    Java-类型转化
    Java-数组
    Java-循环结构(for,while)
    Java-选择结构(if-else)
    Java-数据类型(引用类型)
  • 原文地址:https://www.cnblogs.com/liujie-php/p/11571048.html
Copyright © 2011-2022 走看看