PHP code example of xixizizixixi / fatgoose
1. Go to this page and download the library: Download xixizizixixi/fatgoose library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
xixizizixixi / fatgoose example snippets
//创建FatGoose对象
$fg=new FatGoose();
//设置抓取回调函数数组
$fg->setCallbacksArr();
//注册一个回调函数,自动传入自定义信息数组的引用,此回调函数在创建每个curl资源的时候都会调用
//这个回调函数可以(1)用返回值设置额外的或覆盖已存在的curl选项(2)往自定义信息数组里面注入额外信息
/*此回调函数大致结构如下,特别要注意参数是引用传递
function(&$customInfoArr)
{
...
$customInfoArr['sum']=10000; 注入了额外信息
...
return [CURLOPT_PROXYTYPE=>CURLPROXY_HTTP,CURLOPT_PROXY=>'127.0.0.1:1080']; 设置额外的curl选项
}
*/
$fg->registerFuncExtraCurlOpt();
//添加初始抓取任务,要注意添加任务的顺序,先添加,先抓取。
//初始抓取任务只需添加一次,随后可注释掉
$fg->addTask();
//开始抓取
$fg->run();
//创建FatGoose对象
$fg=new FatGoose();
//设置监视回调函数数组
$fg->setMonitorCallbacksArr();
//开始监视
$fg->monitor();
$config=[
//创建布隆过滤器时使用的预估条目数(确保添加到布隆过滤器中的条目数小于这个值)
'item_num'=>1000000,
//创建布隆过滤器时使用的误判几率
'probability'=>0.0001,
//无视布隆过滤器,开启时添加任务到任务表不会受到布隆过滤器的阻止
'ignore_bf'=>false,
//是否使用布隆过滤器缓存文件
'use_bf_cache_file'=>false,
//布隆过滤器缓存文件的路径
'bf_cache_file_path'=>'/home/data_bf',
//是否启用tor代理,必须保证当前环境已经创建了若干tor代理进程
'use_tor'=>false,
//tor代理进程的端口号和pid的映射数组 key是端口号 value是进程id
//形如 [20001=>1234,20002=>1235,20003=>1236,......]
'tor_ports_pids'=>[],
//爬取失败重试次数
'retry'=>1,
//线程数
'thread_num'=>15,
//是否开启守护模式,周期性从抓取任务表中取任务进行抓取
'daemon'=>false,
//开启守护模式后间隔多少秒尝试进行一次爬取
'daemon_interval'=>86400,
//监视器时间间隔
'monitor_interval'=>43200,
//是否随机用户代理字符串
'random_user_agent'=>false,
//预定义的一系列用户代理字符串
'user_agent'=>
[ ],
//curl默认选项
'curl_opt'=>
[
CURLOPT_RETURNTRANSFER => true, //抓取结果作为字符串返回,不输出到页面
CURLOPT_CONNECTTIMEOUT => 60, //连接60秒超时
CURLOPT_TIMEOUT => 120, //函数执行120秒超时
CURLOPT_FOLLOWLOCATION => true, //跟踪重定向
//设置Accept-Encoding请求头。同时能对压缩的响应内容解码
CURLOPT_ENCODING => 'gzip, deflate',
//设置用户代理字符串
//百度蜘蛛 Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)
//谷歌机器人 Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
CURLOPT_USERAGENT => 'Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)',
CURLOPT_HEADEROPT => CURLHEADER_UNIFIED, //向目标服务器和代理服务器的请求都使用CURLOPT_HTTPHEADER定义的请求头
//构建更加真实的请求头
CURLOPT_HTTPHEADER=> [
'Connection: close',
'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
'Upgrade-Insecure-Requests: 1',
'Accept-Language: en-US,en;q=0.9,de;q=0.8,ja;q=0.7,ru;q=0.6,zh-CN;q=0.5,zh;q=0.4',
'Cache-Control: no-cache',
],
/*设置代理*/
//CURLOPT_PROXYTYPE=>CURLPROXY_HTTP,//设置代理类型CURLPROXY_HTTP或CURLPROXY_SOCKS5
//CURLOPT_PROXY=>'127.0.0.1:1080',//设置代理的ip地址和端口号
/*抓取https页面必要*/
//CURLOPT_SSL_VERIFYPEER=>true,
//CURLOPT_CAINFO=>'/home/cacert.pem',
//CURLOPT_SSL_VERIFYHOST=>2,
],
//默认数据库配置
'database'=>
[
//服务器地址
'host'=>'',
//用户名
'username'=>'',
//密码
'password'=>'',
//端口
'port'=>3306,
]
]
/*
[
['0级抓取成功的回调函数','0级抓取成功但状态码有问题的回调函数','0级抓取失败的回调函数'],//0级任务回调函数
['1级抓取成功的回调函数','1级抓取成功但状态码有问题的回调函数','1级抓取失败的回调函数'],//1级任务回调函数
......
...... 以此类推可以无限级
]
*/
/*
[0级监视任务成功的回调函数,1级监视任务成功的回调函数,2级监视任务成功的回调函数......]
*/
/*
[ [[url,extraInfo],level],[[url,extraInfo],level],...... ]
或
[ [url,level],[url,level],...... ] 样的形式则默认extraInfo为null
*/
/*
function(&$customInfoArr)
{
...
$customInfoArr['sum']=10000; 注入了额外信息
...
return [CURLOPT_PROXYTYPE=>CURLPROXY_HTTP,CURLOPT_PROXY=>'127.0.0.1:1080']; 设置额外的curl选项
}
*/