PHP爬虫框架Beanbun

来源:互联网 发布:渔夫淘宝秒杀神器2.0 编辑:程序博客网 时间:2024/05/17 11:59

Beanbun 是用 PHP 编写的多进程网络爬虫框架,具有良好的开放性、高可扩展性。

手册文档:http://beanbun.org/

支持守护进程与普通两种模式,守护模式在Linux环境命令运行,普通可以直接访问运行

如:普通模式直接访问,创建一个文件 start.php,包含以下内容

<?phprequire_once(__DIR__ . '/vendor/autoload.php');use Beanbun\Beanbun;$beanbun = new Beanbun;$beanbun->seed = [    'http://www.950d.com/',    'http://www.950d.com/list-1.html',    'http://www.950d.com/list-2.html',];$beanbun->afterDownloadPage = function($beanbun) {    file_put_contents(__DIR__ . '/' . md5($beanbun->url), $beanbun->page);};$beanbun->start();



访问显示3个网站爬从成功,把爬从数据以文件形式存了起来


重点介绍多进程模式,支持多进程,可以让爬虫一直执行


普通模式下不依赖队列,而守护进程模式需要另外开启队列(内存队列、Redis 队列等),但拥有更多的功能,如可以自动发现页面中的链接加入队列,循环爬取。

首先建立一个队列文件 queue.php,写入下列内容

<?phprequire_once(__DIR__ . '/vendor/autoload.php');// 启动队列\Beanbun\Queue\MemoryQueue::server();

启动 start.php 之前,先命令行启动queue.php,即 先启动队列进程,再启动爬虫。

$ php queue.php start$ php start.php start

这次爬虫以我csnd博客为例子,爬虫抓取所有博客标题

start.php 文件如下:

<?phpuse Beanbun\Beanbun;use Beanbun\Lib\Helper;require_once(__DIR__ . '/vendor/autoload.php');$beanbun = new Beanbun;$beanbun->name = 'blog';     //爬虫名称$beanbun->count = 5;//爬虫进程数$beanbun->seed = 'http://blog.csdn.net/a519395243';  //爬虫地址$beanbun->max = 20;//最大抓取网页数量$beanbun->logFile = __DIR__ . '/qiubai_access.log';  //爬虫日志文件路径$beanbun->afterDownloadPage = function($beanbun) {      //爬取网页后执行此回调。    $aa=$beanbun->page;   $pa = '%<span class="link_title"><a href="/a519395243/article/details/.*?>(.*?)<\/a>\s+</span>%si';  preg_match_all($pa,$aa,$match);  //简单正则处理,选出文章标题    print_r($match[1]);  //打印在日志上};$beanbun->start();


linux 命令行先启动 内存队列 再 启动爬虫



执行成功后,查看日记 ,成功爬虫抓取到自己的所有文章标题



关闭爬虫

$ php queue.php stop$ php start.php stop

还可以设置 header 或者ua头,模拟人真实访问

$beanbun->userAgent = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36';
或者直接设置header头,浏览器F12开发工具 ,直接搞个header头过来就行


$beanbun->options['headers'] = ['Accept'=>'image/webp,image/*,*/*;q=0.8','Accept-Encoding'=>'gzip, deflate, sdch, br','Accept-Language'=>'zh-CN,zh;q=0.8','Connection'=>'keep-alive','Host':'hm.baidu.com','Referer':'http://blog.csdn.net/a519395243''User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36']

抓取csdn博客不需要登录,如碰见需要登录的,可加上Cookie,模拟登录爬从


抓取网页后,可转化为JSON备用

$beanbun->afterDownloadPage = function($beanbun) {    $beanbun->page = json_decode($beanbun->page, true);}

或者存进数据库

use Beanbun\Lib\Db;Db::$config = [    'zhihu' => [        'server' => '127.0.0.1',        'port' => '3306',        'username' => 'blog',        'password' => 'xxxxxx',        'database_name' => 'blog',        'database_type' => 'mysql',        'charset' => 'utf8',    ]];
//插入数据库 ,其他请看手册Db::instance('blog')->insert("account", [    "user_name" => "D丶",    "email" => "XXX",    "title" => "XXXX"]);  


Beanbun还有很多扩展,详细看手册

原创粉丝点击