在laravel使用simple_html_dom爬取顯示整本小說

L先生
發布: 2020-05-07 14:51:57
原創
2602 人瀏覽過

如在程式設計師還看帶廣告的小說中所述,很多小說網站基本上都有特別煩人的廣告,要么在整體div添加鏈接,誤觸就會跳到一些網站甚至是死循環,某些手機app也是廣告很多,本文就將其應用到laravel框架,最好先了解上一篇,隨後自行部署就可以了。

一、在laravel引入第三方類別

#1.在專案根目錄下app目錄中新建一個資料夾命名為Lib(自訂名稱)

2.如果引入第三方庫多的話可以在Lib下再新建幾個目錄分類,由於只引入了一個類,這裡沒有新建資料夾。 (根據引入類別的多少自己定義)

將simple_html_dom.php複製到Lib下

3.找到專案根目錄下的composer.json文件,將第三方類別的路勁寫入autoload下的classmap中,這樣才能自動載入

"autoload": {
"classmap": [
"data ,
"app/Lib/simple_html_dom.php"
]
},

4.在cm中執行指令##composer dumpautoload

5.在控制器中use這個類別即可

use simple_html_dom;

$html = new simple_html_dom(); 使用

二、建立路由

Route::get('/novel_list','index\Spnovel@index');
登入後複製
三、建立控制器Spnovel.php


#以上程式碼的解釋

:首先要對laravel框架了解,對php類別要有所了解

訪問了以上路由,運行的是Spnovel.php控制器中的index方法,$url是某一本小說的章節清單的位址,將其作為參數運行自訂類別mySpClass中的getcurl方法,傳回這個頁面的html文檔字串。運行此類中的getList方法,參數是需要解析的html字串。將這個方法私有化,使用simple_html_dom解析,配置正規提取出每章的url位址和章節名稱。並且回傳這個數組,透過return view('index.spnovel.index',$data);將開啟index/spnovel/index.blade.php,請看index.blade.php

四、建立視圖index.blade.php

以上程式碼的解釋

:css就簡單的寫到這裡,img是作為背景圖片的。 ul裡面循環li,{{$item[1]}}是獲得的位址參數,{{$item[0]}}是獲得的章節名稱。看一下數組和最後的效果。

在laravel使用simple_html_dom爬取顯示整本小說五、運行

#接下來就是每一章節的內容了在laravel使用simple_html_dom爬取顯示整本小說

先看路由

Route::get('/novel_con/{a}/{b}/{c}','index\Spnovel@get_nContent');
登入後複製
這與每一章的url參數相對應,例如某一章的參數為:novel_con/85/85445/27248645.html

寫入

get_nContent方法

public function get_nContent(Request $req){ $url1 = $req->a.'/'.$req->b.'/'.$req->c; $url = "https://www.7kzw.com/".$url1; $res = mySpClass::getCurl($url);//获得 // 开始解析 $data['artic']= self::getContent($res); $next = (int)$req->c; $next = $next+1; $data['artic']['next']="/novel_con/".$req->a.'/'.$req->b.'/'.$next.'.html'; return view('index.spnovel.ncontent',$data); } private static function getContent($get_html){ $html = new simple_html_dom(); @$html->load($get_html); $h1 = $html->find('.bookname h1'); foreach ($h1 as $k=>$v) { $artic['title'] = $v->innertext; } // 查找小说的具体内容 $divs = $html->find('#content'); foreach ($divs as $k=>$v) { $content = $v->innertext; } // 正则替换去除多余部分 $pattern = "/(

.*?<\/p>)|(

.*?<\/div>)/"; $artic['content'] = preg_replace($pattern,'',$content); return $artic; }
登入後複製

解釋:

$req->a,$req- >b,$req->c,分別是三個參數,然後將其合併為一個完整的請求某一章的位址,然後還是透過mySpClass::getCurl取得某一章的html字串。然後使用本類別中的getContent解析這個頁面,先看解析方法,和上篇文章一章解析出章節的標題和內容,寫到數組中,並且去掉了多餘的文字廣告部分。 $next則是存放的下一章的地址,用於在章節詳情頁面跳轉。


視圖ncontent.blade.php

   {{$artic['title']}}  
在laravel使用simple_html_dom爬取顯示整本小說

{{$artic['title']}}

{!!$artic['content']!!}
登入後複製

解釋

:因為只有目前一篇所以不需要循環,{ {$artic['title']}}就是標題,也可以寫到title中。 {!!$artic['content']!!}的寫法就是不需要轉義文章的內容,否則就會有很多其他字元了,如
等。下一章的按鈕的位址直接就用傳遞過來的即可,position:fixed固定定位按鈕,隨時可以下一章。

運行

在laravel使用simple_html_dom爬取顯示整本小說#總結:

本文最重要的環節就是引入第三方類,能夠應用他,還有就是laravel的基礎,比較習慣使用控制器視圖這種方式,帶模型的方式還請自行寫驗證。

就對一本小說來說這就足夠了,當然我們可以擴充,將整站的小說列表寫出來,繼續傳合適的參數就更加完美了。

以上是在laravel使用simple_html_dom爬取顯示整本小說的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!