1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > php 正则抓取页面内容_php使用curl和正则表达式抓取网页数据示例

php 正则抓取页面内容_php使用curl和正则表达式抓取网页数据示例

时间:2023-10-17 02:59:35

相关推荐

php 正则抓取页面内容_php使用curl和正则表达式抓取网页数据示例

session_start();

//封装成类 开启这些自动抓取文章

#header("Refresh:30;:8080");

class SpiderTools{

//

/*传入文章ID 解析出文章标题*/

//

public function getBookNameById($aid){

//初始化curl

$ch= curl_init();

//url

$url='/book/'.$aid;

if(is_numeric($aid)){

//正则表达式匹配

$ru="/

\s*(.*)\s*\s*/";

}

else{

//

丧尸爆发之全家求生路_第一章 丧尸爆发 为吾友爱乐儿更新~_磨铁

$ru="/

(.*)/";

}

//设置选项,包括URL

curl_setopt($ch, CURLOPT_URL, $url);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//不自动输出内容

curl_setopt($ch, CURLOPT_HEADER, 0);//不返回头部信息

curl_setopt($ch, CURLOPT_CONNECTTIMEOUT_MS, 0);

//执行curl

$output = curl_exec($ch);

//错误提示

if(curl_exec($ch) === false){

die(curl_error($ch));

}

// 检查是否有错误发生

if(curl_errno($ch)){

echo 'Curl error: ' . curl_error($ch);

}

//释放curl句柄

curl_close($ch);

$arr=array();

preg_match_all($ru,$output,$arr);

return $arr[1][0];

}

//

/*传入文章ID 解析文章内容*/

//

public function getBookContextById($aid){

//开始解析文章

$ids=array();

$ids=explode("_",$aid);

$titleId=trim($ids[0]);

$aticleId=trim($ids[1]);

$ch= curl_init();

$ru="/

[\s\S]*

[\s\S]*(.*)/ui";

$url='/book/'.$aid;

//正则表达式匹配

//设置选项,包括URL

curl_setopt($ch, CURLOPT_URL, $url);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//不自动输出内容

curl_setopt($ch, CURLOPT_HEADER, 0);//不返回头部信息

curl_setopt($ch, CURLOPT_CONNECTTIMEOUT_MS, 0);

//执行curl

$output = curl_exec($ch);

//错误提示

if(curl_exec($ch) === false){

die(curl_error($ch));

}

// 检查是否有错误发生

if(curl_errno($ch)){

echo 'Curl error: ' . curl_error($ch);

}

$arr=array();

$arr2=array();

preg_match_all($ru,$output,$arr);

curl_close($ch);

#var_dump($arr);

$s=$arr[0][0];

$s=substr($s,180);

$arr2=explode("

return trim($arr2[0]);

}

//

/*静态方法 @生成小说文件 可以直接调用 */

//

public static function createBookById($id){

if(!is_numeric($id)){

echo "

INIT BEGIN START WRITE!";

$st=new self();

$cons=$st->getBookContextById($id);

$title=$st->getBookNameById($id);

$cons=trim($cons);

$t=explode(" ",$title);

//构造目录

$dir=array();

$dir=explode("_",$t[0]);

$wzdir=$dir[0];//书名称 作为目录名称

$wzchapter=$dir[1]; //第几章

//创建目录

$wzdir2=iconv("UTF-8", "GBK", $wzdir);//目录编码 注意这里保留对$wzdir字符串的引用,用来构造文件名,不能用此处,防止二次编码

if(!file_exists($wzdir2)){

mkdir($wzdir2); //创建目录

}

//构造文件名

$wztitle="./".$wzdir."/"."$t[0]".".txt";

//保证保存的文件名称不是乱码

$wztitle=iconv("UTF-8", "GBK", $wztitle);

$f=fopen($wztitle,"w+");

fwrite($f,$cons);

echo "$wzdir ".$wzchapter."写入成功";

fclose($f);

}

else{

$ids=self::getBookIdsById($id);

//这里服务器可能会掉线,所以最好用session记录循环

#for($i=$_SESSION["$id"."_fid"];$i<=count($ids);$_SESSION["$id"."_fid"]++,$i++){

#self::createBookById($id."_".$ids[$_SESSION["$id"."_fid"]++]);//构造id

#}

for($i=$_SESSION["$id"."_fid"];$i<=count($ids);$_SESSION["$id"."_fid"]++,$i++){

self::createBookById($id."_".$ids[$i]);//构造id

}

#echo "

写入工作全部完成

";

#echo $id."_".$ids[0]."

";

#var_dump($ids);

}

}

/*

获取小说的所有ID

@param $id 文章ID

@return array;

*/

public static function getBookIdsById($aid){

$ch= curl_init();

$url='/book/'.$aid."/chapter";

//注意这里的?可以获取最少匹配项

$ru='/[\s\S]*?

[\s\S]*?

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。