一个 PHP 的爬虫框架 -- QueryList
网络爬虫(又被称为网页蜘蛛,网络机器人),是一种按照一定的规则,自动地抓取网络上信息的程序或者脚本。 人人都说python强,写爬虫方便,机器学习库多。但是,我今天非要反其道而行之,用php的爬虫框架来写写爬虫。 QueryList是一个基于phpQuery的PHP通用列表采集类,得益于phpQuery,让使用QueryList几乎没有任何学习成本,只要会CSS3选择器就可以轻松使用QueryList了,它让PHP做采集像jQuery选择元素一样简单。
安装与简单的演示
安装 选择用composer来安装composer require jaeger/querylist
1.当然这个要会composer并且 PHP >= 7.0,如若没有,而且不会使用composer,请下载QueryList3.0版本 http://v3.querylist.cc ps:QueryList3支持php5.3以及手动安装。2.如果composer安装速度太慢,可以尝试执行下面命令更换国内镜像composer config -g repo.packagist composer https://packagist.phpcomposer.com
</blockquote>
</blockquote>
简单代码演示
都说程序猿都是死宅,所以我思来想去,决定爬爬A站的数据。 既然这么愉快的决定了,那我们来爬一爬我喜欢的UP主一方通行
的关注者的信息吧前置需求简易代码显示
- 获取编码格式
avatar- 获取html信息
avatar
use QL\QueryList;
//设定输出文字的字符集
header("Content-type: text/html; charset=utf-8");
//采集某页面所有的超链接和超链接文本内容
//可以先手动获取要采集的页面源码
$html = file_get_contents('http://www.acfun.cn/u/518227.aspx');
//然后可以把页面源码或者HTML片段传给QueryList
//设置采集规则
$rule = [
// 采集关注者a标签的href属性
'headerimg' => ['div#flowedlist div.contentView figure div.fl a img','src'],
// 采集关注者a标签的文本内容
'text' => ['div#flowedlist div.contentView figure div.fl a.name','text']
];
//通过封装的方法获取所有数据
$data = QueryList::html($html)->rules($rule)->query()->getData()->all();
//打印结果
print_r($data);
至此,就成功的爬取了一些数据了
avatar
任务式爬取图片的PHP实现 (自动下载到本地)
讲真,我也不废话了。直接上代码 哦对了。忘记说了,最好是php-cli模式下运行哦
require './vendor/autoload.php';
use QL\QueryList;
header("Content-type: text/html; charset=utf-8");
//采集某页面所有的超链接和超链接文本内容
//可以先手动获取要采集的页面源码
//爬取九页内容
for ($j=1; $j < 10; $j++) {
$url = 'http://pic.netbian.com';
if ($j == 1) {
$html = file_get_contents($url.'/4kdongman/index.html');
}else{
$html = file_get_contents($url.'/4kdongman/index_'.$j.'.html');
}
$rule = [
// 采集图片a标签的href属性
'a_link' => ['div#main div.slist ul.clearfix li a','href'],
];
//然后可以把页面源码或者HTML片段传给QueryList
$datas = QueryList::html($html)->rules($rule)->query()->getData()->all();
$i = 1;
foreach($datas as $key => $value){
//进入详情页抓取图片数据
$qll = QueryList::get($url.$value['a_link']);
$one_img = $qll->find('div.view>div.photo-pic>a>img')->attrs('src')->all();
$img = $url.$one_img[0];
//设定抓取下来放置图片的文件夹
$path = __DIR__.'/img/'.date("Y-m-d").'/'.$j.'/';
@mkdir($path,0777,true);
// ob_clean();
ob_start();
readfile($img);//读取图片
$img = ob_get_contents();//得到缓冲区中保存的图片
$fp = fopen($path.'test'.$i.'.jpg','w');//写入图片
if(fwrite($fp,$img)){
fclose($fp);
echo "图片保存成功";
}
ob_end_clean();//清空缓冲区
$i++;
}
}
接下来在命令行模式中找到文件运行在命令行模式下输入
- 用户需要把php加入环境变量中才可以在命令行执行
php 你的文件名.php
静静等待一段时间,等代码执行完毕。你就会发现,你的文件夹出现了一个新的
- 如图所示:
avatarimg>date>num
的文件夹,里面就是你爬下来的图片了!!!
avatar