Golang-Proxy

项目地址: https://github.com/storyicon/golang-proxy
Golang-Proxy – 简单高效的免费代理抓取工具通过抓取网络上公开的免费代理,来维护一个属于自己的高匿代理池,用于网络爬虫、资源下载等用途。

安装

1. 通过编译源码

# Unix
go get github.com/storyicon/golang-proxy
cd $GOPATH/src/github.com/storyicon/golang-proxy
go build -o "proxy-publisher" publisher/publisher.go
go build -o "proxy-consumer" consumer/consumer.go
go build -o "proxy-assessor" assessor/assessor.go
# ----------------------------------------------------
# Windows
go get github.com/storyicon/golang-proxy
echo %GOPATH%
# 然后进入到GOPATH中
cd src/github.com/storyicon/golang-proxy
go build -o "proxy-publisher.exe" publisher/publisher.go
go build -o "proxy-consumer.exe" consumer/consumer.go
go build -o "proxy-assessor.exe" assessor/assessor.go

分别启动编译好的 publisher、consumer、assessor 即可

2. 开箱即用版本

项目的 ./source/目录下已经默认配置好了一些源,你只需要在 ./config/local.yml 中正确配置你的数据库信息,就可以进行代理的抓取。

  1. 对于 windows 用户
    ./bin/windows 目录下的 publisher.exe, consumer.exe, assessor.exe 移动到 golang-proxy 的根目录,分别运行 publisher.exe, consumer.exe, assessor.exe 即可
  2. 对于 linux 用户
    ./bin/linux
  3. 对于 Mac 用户

你可以通过加入 sourceconfig 参数来指定 source 和 config 文件夹的目录位置,例如在 windows 下:

publisher.exe -source="D:\...\golang-proxy\source" -config="D:\...\golang-proxy\config"
consumer.exe -config="D:\...\golang-proxy\config"
assessor.exe -config="D:\...\golang-proxy\config"

注意:
想要让 golang-proxy 在你的机器上成功运行,你还需要一个 MySQL 和一个 NSQ。
NSQ 下载地址:https://nsq.io/deployment/installing.html
MySQL 下载地址:https://www.mysql.com/downloads/
安装完成后启动 NSQ 和 MySQL 服务
在配置文件 ./config/local.yml 中修改你的配置信息,在 MySQL 中相应的数据库(local.yml 中的 mysql.db)下执行如下 SQL 语句创建数据表:

CREATE TABLE `valid_proxy` (`id` int(11) NOT NULL AUTO_INCREMENT,`content` varchar(30) CHARACTER SET utf8mb4 NOT NULL DEFAULT '',`assess_times` int(11) NOT NULL DEFAULT '0',`last_assess_time` int(11) NOT NULL DEFAULT '0',`success_times` int(11) NOT NULL DEFAULT '0',`avg_response_time` float(5,3) NOT NULL DEFAULT '0.000',`continuous_failed_times` int(11) NOT NULL DEFAULT '0',`score` float(8,3) NOT NULL DEFAULT '0.000',PRIMARY KEY (`id`),UNIQUE KEY `content` (`content`)
) ENGINE=InnoDB AUTO_INCREMENT=10428 DEFAULT CHARSET=utf8;

在这些都全部完成后,你才可以正常的运行 Golang-Proxy

为什么要用 Golang-Proxy

  1. 稳定、快速。
    抓取模块,单核并发可以到达 1000 个页面/秒
  2. 高可配置性、高拓展性。
    你不需要写任何代码,花一两分钟填写一个配置文件就可以添加一个新的网站源。项目设置了local和prod两种运行环境的独立配置文件,可以根据运行环境进行独立配置。
  3. 评估功能。
    通过Assessor评估模块,周期性测试代理质量,根据代理的测试成功率、高匿性、测试次数、突变性、响应速度等独立影响因子进行综合评分,算法具有高度可配置性,可以根据项目的需要可以对因子的权重进行独立调整。

特色

  1. 高拓展性
      引入了 的概念,可以把一个源理解为一个待抓取的网站,有很多这样的网站,比如“kuaidaili.com”,“xiaohexia.cn”,他们都是源。优质的源越多,你可以抓取到的免费代理就越多,抓取效率也就越高。
      使用 Golang-Proxy,添加一个新的网站源,不需要写任何代码,也不需要重新编译程序,一两分钟你就可以完成一个源的添加。
  2. 模块化
    Golang-Proxy 将代理的收集流程分为了三个模块:
      * Publisher 用于抓取代理;
      * Consumer 负责从队列中读取抓到的代理,并进行有效性检测,有效则插入数据库;
      * Assessor 用于对数据库中的代理进行价值评估;
      为了提高某个模块的效率,你可以启动多个进程,比如你认为抓取速度太慢了,你甚至可以再启动一个 Publisher。
  3. 简单配置
      ./config 目录下,你可以快捷地对 MySQL 和 NSQ 的参数进行配置。
    项目分为测试环境和线上环境,你可以通过设置环境变量GOLANG_PROXY_ENVlocalprod,来控制程序是使用 local.yml 还是 prod.yml 作为配置文件,默认是读取 local.yml。当然,如果你只是在本地运行,那只需要修改 local.yml 的配置即可。
      你可以简单的通过在 ./source 目录下添加 yml 格式的源,Golang-Proxy 的 publisher 在启动时,将自动读取并载入。

配置项

1. Config 配置项

./config/ 下的local.ymlprod.yml分别用于配置本机测试线上运行的数据库参数,运行前需要先行配置。

2. Source 配置项:

./source/下的所有 yml 格式的文件都是,你可以通过新建来增加一个源,也可以通过在文件名前加上一个 . 来告诉 publisher 不要读取这个源,当然你也可以直接删除,来让一个源永远的消失,下面进行 Source 参数介绍:

#Page配置项
page:entry: "https://xxx/1.html"template: "https://xxx/{page}.html"from: 2to: 10
#publisher将会首先抓取entry,即 https://xxx/1.html
#然后根据 template、from 和 to 依次抓取
#  https://xxx/2.html
#  https://xxx/3.html
#  https://xxx/4.html
#  ...
#  https://xxx/10.html
#Selector配置项
selector:iterator: ".table tbody tr"ip: "td:nth-child(1)"port: "td:nth-child(2)"protocal: "td:nth-child(3)"proxytype: ""filter: ""
# 以上配置用于抓取下面这种 HTML 结构
# <table class="table">
#     <tbody>
#         <tr>
#             <td>187.3.0.1</td>
#             <td>8080</td>
#             <td>HTTP</td>
#         <tr>
#         <tr>
#             <td>164.23.1.2</td>
#             <td>80</td>
#             <td>HTTPS</td>
#         <tr>
#         <tr>
#             <td>131.9.2.3</td>
#             <td>8080</td>
#             <td>HTTP</td>
#         <tr>
#     <tbody>
# <table>
# 选择器为通用的JQuery选择器,iterator为循环对象,比如表格里的行,每行一条代理,那这个行的选择器就是iterator,而ip、port、protocal则是在iterator选择器的基础上进行子元素的查找。至于proxytype和filter忽略即可,这两个参数是为将来的功能拓展预留的项目。
#protocal为空,或protocal对应的元素无法找到,则默认是HTTP类型
category:# 并行数parallelnumber: 1# 对于这个源,每抓取一个页面# 将会随机等待5~20s再抓下一个页面delayRange: [5, 20]# 间隔多长时间启用一次这个源# @every 10s , @every 10h...interval: "@every 10m"
debug: true

3. 策略配置项:

你可以在 ./library/const.go 中进行配置

const (NSQTopic                       = "proxy"# 在Publisher每抓到一个代理,将会发送给Consumer进行PreAssess预检测,预检测程序将使用这个代理会访问httpbin.org,通过的才会插入到数据库,ProxyPreAssessTimes定义了访问时允许的trytimes次数ProxyPreAssessTimes            = 1# 定义了Consumer和Assessor在进行代理的测试时,能忍受的延迟ProxyAssessTimeOut             = 3# 定义了Assessor每隔多少秒对数据里的代理进行一次评估ProxyAssessInterval            = 60# 定义了当一条代理通过了Consumer的预检测,在插入数据库时给予的初始分数ProxyInitScore                 = 1# 定义了代理评估程序Assessor内存中允许暂存的代理数量ProxyAssessQueueMin            = 1000# 定义了能够忍受的代理测试的最小成功率,如果这个值设置为0.5,那么对于数据库里的每条代理,从概率上可以保证每使用两次,有一次可以成功。如果是0.8,则保证数据库中的每条代理都有80%的使用成功率AllowProxyAssessSuccessRateMin = 0.5
)

golang-proxy 具有性能评估功能的高性能免费高匿代理抓取相关推荐

  1. go proxy 快捷的高匿代理抓取工具

    golang-proxy v2.0 Golang-Proxy – 简单高效的免费代理抓取工具通过抓取网络上公开的免费代理,来维护一个属于自己的高匿代理池,用于网络爬虫.资源下载等用途. Version ...

  2. 支付宝回应网商银行暂停转入功能;美国上诉法院裁决Web抓取合法;W3C发布WebAssembly 2.0初版草案|极客头条

    「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧. 整理 | 梦依丹 出品 | CSDN(ID:CSDNnews ...

  3. Golang实现web api接口调用及web数据抓取[get post模式]

    前沿: 继续扩展我的golang服务端,这边有些数据库是没有权限的,对方给了我webservices的接口,针对异常的数据,我要去抓数据,再次分析,golang貌似没有python那么多的模拟浏览器访 ...

  4. terminal看服务器性能,终端服务服务器性能评估优化问题

    终端服务服务器性能评估优化计算问题terminal server performance:现有50客户端需要访问总部ERP,财务等资源,这些都是在一台服务器上.线路已经准备好,4M光纤. 但对于终端服 ...

  5. 系统性能评价---性能评估

    性能评估 性能评估是对一个系统进行各项检测,并形成一份直观的文档,因此性能评估是通过各项测试来完成的.评估的一个目的是为性能的优化提供参考,而性能优化涉及的面很广,也很复杂,而且永无止境.对于不同的应 ...

  6. TVM性能评估分析(三)

    TVM性能评估分析(三) Figure 1. TVM's WebGPU backend close to native GPU performance when deploying models to ...

  7. Machine Learning | (6) Scikit-learn的分类器算法-性能评估

    Machine Learning | 机器学习简介 Machine Learning | (1) Scikit-learn与特征工程 Machine Learning | (2) sklearn数据集 ...

  8. 负载均衡服务器性能,服务器负载均衡:确保应用服务的高性能与高可用

    随着互联网的快速发展和业务量的不断提升,基于网络的数据访问流量迅速增长,特别数据中心.大型企业及门户网站,日益丰富的内容和信息输出大大加速了服务器的资源消耗.加上大部分网站都需要提供24小时不间断服务 ...

  9. zanePerfor 一款完整,高性能,高可用的前端性能监控系统,不要错过

    HI!,你好,我是zane,zanePerfor是一款最近我开发的一个前端性能监控平台,现在支持web浏览器端和微信小程序段. 我定义为一款完整,高性能,高可用的前端性能监控系统,这是未来会达到的目的 ...

最新文章

  1. Calc3: Vector Fields
  2. Juniper静态路由之no-advertise和qualified-next-hop
  3. 产品需求文档中容易被忽视的10个细节
  4. protel PCB布线精华文章
  5. uwp连接mysql数据库_在 UWP 应用中使用 SQLite 数据库
  6. 做人力资源需要掌握python_9种人力资源分析工具,高效打造数字化HR全流程
  7. mastercam加工报表生成_2020北京加工中心编程培训工厂教学行业
  8. bio-linux_Bio-Linux:稳定,可移植的科学研究Linux发行版
  9. 专属设计师的专业领域导航网站
  10. 随想录(matlab学习)
  11. 编译或者运行找不到库解决
  12. 【Win 10应用开发】分阶段进行数据绑定
  13. 第六次全国人口普查数据分析
  14. COMSOL光学仿真专题案例展示
  15. 淘气的小丁-Ajax
  16. JBoss 中间件漏洞
  17. Android超强大的粒子动画库,流星雨,爆炸,满屏飞花,等粒子特效快速实现
  18. CentOS7 mysql8.0 国内镜像源安装
  19. 施耐德m340设置ip后忘记ip,怎么恢复ip
  20. C语言中memcpy()和memcpy_s()的区别

热门文章

  1. 分享一个抓取网易云不同分类下歌曲热评的python爬虫,并且不怕被封ip(非使用代理)
  2. JavaEE进阶 - Spring 核心 与 设计思想 - 细节狂魔
  3. 21英里法则_解决连续交付的最后一英里问题
  4. python——猜字游戏代码
  5. BL0942电参数采集模块操作说明及疑问解答
  6. 软件测试模糊搜索用例,模糊测试中测试用例生成方法.pdf
  7. pgAdmin的介绍 及使用
  8. 我们是如何听见声音的
  9. zeros什么意思_Matlab中 函数zeroS(1,8) 代表什么意思??
  10. Grafana,监控神器!(免费用)