Skip to content

Latest commit

 

History

History
176 lines (147 loc) · 6.12 KB

china.md

File metadata and controls

176 lines (147 loc) · 6.12 KB

中文介绍

Golang全自动亚马逊全网分布式爬虫(美国,日本,德国和英国)

架设八台代理服务器和三台爬虫服务器(美国机房),构建代理IP服务池模块和多爬虫切换模块,配合redis和mysql进行分布式高并发抓取日本/英国/美国/德国亚马逊商品数据,实现IP重蹈,爬虫监控,数据库主从到阿里云(读写分离)等功能,还配套Dashboard后台,方便筛选商品、下载excel和查看商品历史排名/价格等轨迹。爬虫crontab定时夜间开爬,代理IP自动循环导入。爬虫高度自动化,运维成本较低,每天有几百万数据产生。核心爬虫库抽离并开源!

爬虫包升级,亚马逊爬虫仍然能跑!!!依赖https://www.github.com/hunterhug/GoSpider

环境配置,代理服务器配置,裸Centos7配置,查看:http://www.lenggirl.com/tool/centos7.html

亚马逊爬虫支持

  1. 列表页和详情页可选择代理方式
  2. 多浏览器保存cookie机制
  3. 机器人检测达到阈值自动换代理
  4. 检测日期过期自动停止程序
  5. IP池扫描周期填充代理IP
  6. 支持分布式跨平台抓取
  7. 高并发进程设置抓取
  8. 默认网页爬取去重
  9. 日志记录功能
  10. 配套可视化网站,支持多角度查看数据,小类数据,大类数据,Asin数据和类目数据,支持查看每件Asin商品的历史记录,如排名,价格,打分,reviews变化。部分数据支持导出,且网站支持RBAC权限,可分配每部分数据的查看和使用权限。
  11. 网络端监控爬虫,可查看爬虫当前时段数据抓取状态,爬取的进度,IP的消耗程度。 可支持网络端启动和停止爬虫,彻底成为Saas(待做)
  12. 可自定义填入IP,如塞入其他代理IP网站API获取的IP
  13. 可选择HTML文件保存本地

分布式,高并发,跨平台,多站点,多种自定义配置,极强的容错能力是这个爬虫的特点。机器数量和IP代理足够情况下,每天每个站点可满足抓取几百万的商品数据。

2016.12.15

  1. 数据库初始化脚本优化
  2. IP配置文件优化
  3. 网络WEB端自定义IP

可以修改GOPATH,即后缀为?_config.json的配置(默认不需要改,下面注释说明需要删除)

{
  "Type": "USA",     //美国站类型,有四种usa,jp,uk,de
  "Datadir": "/data/db/usa",   // 文件保存位置,可选择保存,/代表在本盘下
  "Proxymaxtrytimes": 40,     // 机器人错误最大次数,超过换IP
  "Rank": 80000,               // 只保存排名在这个数字之前的商品
  "Listtasknum": 30,        // 抓列表页进程数,建议不要太大,并发最多设置50
  "Asintasknum": 30,      // 抓详情页进程数,建议不要太大,并发最多设置50
  "Localtasknum": 150,  // 本地文件处理进程数,建议不要太大,并发最多设置50,可不管
  "Proxypool": "USAIPPOOL",   // Redis IP代理池名字
  "Proxyhashpool": "USAIPPOLLHASH",  // Redis IP已用池名字
  "Proxyloophours": 24,        // 重导IP时间(小时,Redis IP池用完)
  "Proxyasin": true,         // 详情页使用代理?
  "Proxycategory": false,    //列表页使用代理?
  "Proxyinit": false,   // IP池程序每次启动是否追加,可不管
  "Urlpool": "USAURLPOOL",  //列表页待抓池名字
  "Urldealpool": "USAURLDEALPOOL", //列表页处理中池
  "Urlhashpool": "USAURLHASHPOOL",  //列表页已抓池
  "Asinpool": "USAAsinPOOL",       // 同理
  "Asindealpool": "USAAsinDEALPOOL",
  "Asinhashpool": "USAAsinHASHPOOL",
  "Otherhashpool": "USAOtherHashPOOL",  // 小类数据额外redis池,方便填充大类数据,开关在ExtraFromRedis,如果关,大类数据填充查找小类数据库,大数据下会导致慢
  "Asinautopool": true,   //列表页抓取数据后自动把Asin数据塞在Asinpool,如果设置为false,需要手动运行asinpool.exe
  "ExtraFromRedis": true,  //搭配Otherhashpool
  "Asinlocalkeep": false,   //保存详情页在Datadir
  "Categorylocalkeep": false, //保存列表页在Datadir
  "Urlsql": "SELECT distinct url,id,bigpid ,name,bigpname,page FROM smart_category where isvalid=1 order by bigpid limit 100000",  //抓取那些列表页,可改
  "Asinsql": "SELECT distinct asin as id FROM `{?}` order by bigname limit 1000000", //抓取哪些Asin,{?}是程序预带占位符,被今天日期替代,可去掉
  "Spidersleeptime": 3, // 无用
  "Spidertimeout": 35,  //链接抓取超时时间
  "Spiderloglevel": "DEBUG",  //爬虫日志记录,可不管,建议设置为ERROR,注意!!!
  "Redisconfig": {  // redis配置
    "Host": "14.215.177.40:6379",  //主机
    "Password": "smart2016",   //密码
    "DB": 0
  },
  "Redispoolsize": 100,  // redis程序库连接池最大数量,应该比Listtasknum和Asintasknum都大
  "Basicdb": {   // 基础数据库配置
    "Ip": "14.215.177.38",
    "Port": "3306",
    "Username": "root",
    "Password": "smart2016",
    "Dbname": "smart_base"
  },
  "Hashdb": {   //历史数据库配置
    "Ip": "14.215.177.38",
    "Port": "3306",
    "Username": "root",
    "Password": "smart2016",
    "Dbname": "smart_hash"
  },
  "Hashnum": 500,   //历史数据库按hashcode分表,分表数量
  "Datadb": {     // 日期数据库,按天分表
    "Ip": "14.215.177.38",
    "Port": "3306",
    "Username": "root",
    "Password": "smart2016",
    "Dbname": "smartdb"
  },
  "Ipuse": {   //要用的IP组
    "d": {    //端口和密码,密码可留空,组名所在的IP在下面
      "Port": "808",
      "Secret": "smart:smart2016"
    },
    "e": {
      "Port": "808",
      "Secret": "smart:smart2016"
    },
    "f": {
      "Port": "808",
      "Secret": "smart:smart2016"
    },
    "h": {
      "Port": "808",
      "Secret": "smart:smart2016"
    }
  },
  "Ips": {
    "d": [   //组名为d的IP们
      "146.148.149.203-254",   // 连续Ip,也可以不连续,如146.148.149.203
    ]
  }
}

运行程序

Windows方式:

在spiders文件夹下,进去各个站点,运行go build *.go会得到exe文件

  1. 点击initsql.exe初始化数据库
  2. SQL文件导入数据库,列表URL
  3. 点击ippool.exe填充代理IP
  4. 点击urlpool.exe填充类目URL
  5. 点击listmain.exe抓取列表页
  6. 点击asinmain.exe抓取详情页
  7. 如果配置中Asinautopool设置为false,那么需要自己导Asin进入Redis,运行asinpool.exe

MYSQL主从

http://blog.csdn.net/faye0412/article/details/6280761

Master主服务器

1.vim /etc/my.cnf

[mysqld]
log-bin=mysql-bin
server-id=1
binlog-ignore-db=information_schema
binlog-ignore-db=beauty
binlog-ignore-db=mysql

2.service mysqld restart

3.grant all privileges on *.* to 'smart'@'%' identified by '123456';

4.flush tables with read lock;

5.show master status;

 mysql-bin.000001 |     6503 |              | information_schema,beauty,mysql |

6.unlock tables;

Slave阿里云从服务器

1.vim /etc/my.cnf
[mysqld]
server-id=2

2.stop slave ;
3.change master to master_host='192.168.2.119',master_user='smart',master_password='123456',master_log_file='mysql-bin.000001', master_log_pos=6503;
4.start slave ;
5.show slave status