有时候无聊,会去下txt小说看看,打发时间,很多小说站会提供整本书的txt下载,非常方便,很多看书软件和APP都能自动爬取章节信息,按我多年PHP经验,也弄个章节提取试试,效果如下:
一个6.5M的文本文件,从爬取到显示,花了不到一秒,看来还需要优化,但是基本能用了。
话不多说,上代码:
<!DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>{$webtitle} - {$webname} </title>
</head>
<body>
<?php
$start_time=microtime(true);
function show($d){print_r($d);}
//获取大文件章节
function get_sections($fname,$tag="\r\n"){
$section=[];
$i=0;
if ($file = fopen($fname,"r")) {
while(!feof($file)) {
$line = fgets($file);
$i+=1;
//echo "{$i}:{$line}<br>";
//if($i>1000)break;
if(strlen($line)<3)continue;
$rt=preg_match_all("/([第]?[\d一二三四五六七八九零十百千]+[章节])([^\r\n]+)/u",$line,$arr);
if(!$rt)continue;
$section[$i]=['num'=>$arr[1][0],'title'=>$arr[2][0],'line'=>$i];
}
fclose($file);
}
return $section;
}
$section=get_sections('1.txt');
foreach($section as $k=>$v){
echo "<div class='pd'>{$v['line']}行: {$v['num']} {$v['title']}</div>";
}
$ent_time=microtime(true);
$time=$ent_time-$start_time;
echo "<br />当前页面执行时间为:{$time} 秒";
当然,如果要适合更多的章节格式,还得修改正则, 不过先凑合着用吧,思路在就行。