background image

PHP

教程 curl 数据采集之单页面并行采集函数 get_htmls 的使用

用第一篇的 get_html()实现简单的数据采集,由于是一个一个执行才采集数据的传输时间
就会是所有页面下载的总时长,一个页面假设 1 秒,那么 10 个页面就是 10 秒了。所幸
curl 还提供了并行处理的功能
用第一篇的 get_html()实现简单的数据采集,由于是一个一个执行才采集数据的传输时间
就会是所有页面下载的总时长,一个页面假设 1 秒,那么 10 个页面就是 10 秒了。所幸
curl 还提供了并行处理的功能。
要写一个并行采集的函数,先要了解要采集什么样的页面,对采集的页面用什么请求,
才能写出一个相对常用的函数。
 
功能需求分析:
返回什么?
当然每一个页面的 html 集合成的数组
传递什么参数?
编写 get_html()时,我们知道了可以用 options 数组来传递更多的 curl 参数,那么多页面同
时采集函数的编写这种特性也得保留下来。
什么类型的参数?
无论是请求网页 HTML,还是调用互联网 api 接口,get 和 post 传递参数总是请求同一个
页面或者接口,只是参数不同罢了。那么参数的类型是:
get_htmls(

$url

,

$options

);

$url

 是 string

$options

,是一个二维数组,每一个页面的参数为一个数组。

这样的话,貌似解决了问题。但是我找遍了 curl 的手册都没有看到 get 的参数传递在什么
地方,所以只能

$url

 是数组的形式传递并且增加一个 method 参数

 
函数的原型就定下来了 get_htmls(

$urls

,

$options

 = 

array

$method

 = ‘get');代码如下:

 

复制代码 代码如下:
 

function

 get_htmls(

$urls

$options

 = 

array

(), 

$method

 = 'get'){

$mh

 = curl_multi_init();

if

(

$method

 == 'get'){

//get

 

方式传值 最常用

foreach

(

$urls

 

as

 

$key

=>

$url

){

$ch

 = curl_init(

$url

);

$options

[CURLOPT_RETURNTRANSFER] = true;

$options

[CURLOPT_TIMEOUT] = 5;

curl_setopt_array(

$ch

,

$options

);