這里用到 QueryList這個第三方插件,安裝要求
php>=7.1
composer 安裝
composer require jaeger/querylist
或者直接下載
開箱即用:https://pan.baidu.com/s/1QPMUalL5HcVJ4L7zUY0LMg
require_once app()->getRootPath()."extend/queryList/autoload.php";// 引入插件
$QueryList=new \QL\QueryList();
$url ='xxxxxxxxxxxxxxxxxxx';//需要獲取小說的鏈接
$rt = [];
//根據頁面獲取書籍信息
$rules = [
'title' => ['.t>a','text'], // 獲取小說名稱
'link' => ['.n>a','href'], // 獲取小說的鏈接
'author' => ['.author>a','text'], //獲取小說的作者
'status' => ['.abover>span','text'], //獲取小說的狀態
];
$range = '.ul_m_list li'; // 切片選擇器
//encoding('UTF-8','GB2312') 轉碼
$rt = $QueryList->get($url)->rules($rules)->range($range)->removeHead()->encoding('UTF-8','GB2312')->query()->getData();
dump($rt->all());exit;
根據網站的機構去獲取書籍內容,比如這個網站

書名是在class .t>a 下面的 ,鏈接是在class .n>a 下面的
range :切片選擇工具 就是書籍循環的外包結構 可以將書籍分割成一個一個的數組
remove:可以將內容中的部分內容過濾掉
$html =<<<STR
<div id="content">
<span class="tt">作者:xxx</span>
這是正文內容段落1.....
<span>這是正文內容段落2</span>
<p>這是正文內容段落3......</p>
<span>這是廣告</span>
<p>這是版權聲明!</p>
</div>
STR;
$rules = [
'content' => ['#content','html']
];
$rt = QueryList::rules($rules)
->html($html)
->query()
->getData(function($item){
$ql = QueryList::html($item['content']);
$ql->find('.tt,span:last,p:last')->remove();
$item['content'] = $ql->find('')->html();
return $item;
});
Array
(
[0] => Array
(
[content] => 這是正文內容段落1.....
<span>這是正文內容段落2</span>
<p>這是正文內容段落3......</p>
)
)
print_r($rt->all());
$rt->find('.tt,span:last,p:last')->remove();
encoding:作用于內容的轉碼,原來的網站'GB2312' 獲取的內容會出現亂碼,需要將他轉換成‘utf-8‘。

$html =<<<STR
<div>
<p>這是內容</p>
</div>
STR;
$rule = [
'content' => ['div>p:last','text']
];
$data = QueryList::html($html)->rules($rule)
->encoding('UTF-8','GB2312')->query()->getData();
設置輸入輸出編碼,并移除html頭部
如果設置輸入輸出參數仍然無法解決亂碼,那就使用 removeHead()方法移除html頭部
removeHead:過濾掉頭部
這樣我們就將這個頁面的書籍列表都獲取下來


讓后通過循環去獲取分頁的數據,根據書籍鏈接獲取書籍的章節,封面等其他數據,最后通過章節鏈接獲取到小說內容。