基于PHP的网络数据采集

2018-03-24 09:14王小洁
山西电子技术 2018年6期
关键词:网址代码标签

王小洁

(山西职业技术学院,山西 太原 030006)

PHP提供了多种数据采集方法,如使用snoopy、simple_html_dom、socket等,为人们采集网络数据提供了极大便利,文章阐述本人在实践中常用的几种方法[1]。

1 使用file_get_contents()函数采集数据

使用file_get_contents()函数进行数据采集首先需要确定要采集的网址,然后使用该函数对网页进行采集,接着对采集结果使用正则表达式对需要采集的数据进行精确匹配,最后输出采集结果。以抓取某网站的图片为例,代码框架如下:

$url="http://www.***.com";

$data=file_get_contents($url);

echo "

";

print_r($arr);

上述代码描述中“***”是根据实际情况确定的网址及源代码中的类名等,后续代码中含义相同。

2 使用curl函数采集数据

curl函数功能比较强大,可以模拟get请求、post请求、文件上传等,是较好的数据采集工具。使用file_get_contents()函数进行数据采集前需要开启curl扩展。通过实践,得出比较完整的采集过程需要六个步骤,第一步初始化curl,即创建一个新的curl资源,第二步设置请求参数,如设置需要抓取的网址、数据以文件流的方式返回等,第三步发送请求,第四步结合正则表达式进行精确数据抓取,第五步输出抓取结果,第六步关闭请求,代码框架如下:

$ch=curl_init();

curl_setopt($ch, CURLOPT_URL, "http://www.***.com");

curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE);

$data=curl_exec($ch);

preg_match_all('***',$data,$arr);

var_dump($arr);

curl_close($ch);

3 使用QueryList工具采集数据

目前QueryList 最新版本仅支持php7.0 以上,且仅支持composer安装。实际使用建议采用QueryList 3版本。安装QueryList前建议先下载composer,然后通过执行composer命令安装QueryList。

使用querylist方法进行数据采集,需要导入自动加载文件、导入QueryList类、制定采集规则、抓取数据、输出结果等步骤,以获取某网站title为例,代码可以参照下列代码框架进行编写:

include "***/autoload.php";

use QLQueryList;

$url="http://www.***.com";

$reg=array(

"title"=>array("title", 'text'),

);

$data=QueryList::Query($url,$reg)->data;

echo "

";

print_r($data);

如想抓取网站某条新闻的标题、图片、描述信息等,只需更改规则,如做如下更改:

$reg=array(

"title"=>array("此处为某条信息标题的所在的类名、标签名",'html'),

"img"=>array("此处为新闻图片所在的类名、标签名",'src'),

"description"=>array("此处为新闻的描述信息所在的类名、标签名",'html'),

);

4 使用curl与 QueryList,二者结合起来采集数据

在此,以抓取某网站图片为例,阐述思路及代码框架,编程步骤如下:。

1)确定网址

$url="http://www.***.com/";

2)制定抓取规则

$reg=array(

"img"=>array("*** img",'src','','checkurl'),

);

此处checkurl为回调函数,目的是拼接完整域名。函数如下:

function checkurl($a){

return "http://www.***.com".$a;

}

3)采集数据

$data=Querylist::Query($url,$reg)->data;

4)下载图片

在执行程序之前,应在当前目录中建立imgdown文件夹,以保存下载的图片。

foreach($data as $key=>$value){

$file= $value['img'];

$newFile="./imgdown/".basename($file);

downImg($file,$newFile);

}

downImg为下载函数,该函数的功能使用curl函数来实现,通过创建资源、设置请求参数、发送请求、数据抓取,输出抓取结果、关闭请求等步骤实现了图片的下载功能,代码如下:

function downImg($file,$newFile){

$ch=curl_init();

curl_setopt($ch, CURLOPT_URL, $file);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$tmp=curl_exec($ch);

curl_close($ch);

file_put_contents($newFile, $tmp);

}

运行程序,可以在imgdown文件夹中看到下载的图片。

5 结语

上述三种数据采集方法各有特点,也因地制宜应用于不同的采集需求。一般来说,CURL 效率比file_get_contents 要高很多;CURL 支持的方式比较多,如支持get、post、文件上传等,而file_get_contents只支持get请求;CURL 的复杂程度高于file_get_contents。QueryList采用CSS选择器做采集,不需要复杂的正则表达式,能很容易就可以获取所需的内容,使代码易懂易维护,并且提供了丰富的多线程、图片下载等功能插件[2],还具备强大的DOM操作能力,是简洁高效的PHP数据采集工具。在实际采集过程中,三者可以结合使用,更好地达到采集目的。

猜你喜欢
网址代码标签
本刊网址变更通知
火眼金睛快速显示链接的网址
创世代码
创世代码
创世代码
创世代码
无惧标签 Alfa Romeo Giulia 200HP
不害怕撕掉标签的人,都活出了真正的漂亮
标签化伤害了谁
科学家的标签