Heim > Artikel > PHP-Framework > Verwenden Sie simple_html_dom, um den gesamten Roman in Laravel zu crawlen und anzuzeigen
Wie in Programmierer lesen auch Romane mit Werbung erwähnt, haben viele Roman-Websites im Grunde sehr nervige Werbung. Fügen Sie entweder Links zur Gesamtabteilung hinzu, und wenn Sie sie versehentlich berühren, werden sie zu einigen Websites weitergeleitet. Selbst in einer Endlosschleife gibt es in einigen mobilen Apps viele Anzeigen. In diesem Artikel wird es am besten zuerst den vorherigen Artikel verstehen und ihn dann selbst bereitstellen.
1. Führen Sie Klassen von Drittanbietern in Laravel ein
1. Erstellen Sie einen neuen Ordner im App-Verzeichnis unter dem Projektstammverzeichnis und nennen Sie ihn Lib ( benutzerdefinierter Name)
2. Wenn Sie viele Bibliotheken von Drittanbietern einführen, können Sie unter Lib mehrere neue Verzeichniskategorien erstellen. Da nur eine Klasse eingeführt wird, gibt es hier keinen neuen Ordner. (Von Ihnen entsprechend der Anzahl der importierten Klassen definiert)
Kopieren Sie simple_html_dom.php nach Lib
3. Suchen Sie die Datei „composer.json“ im Stammverzeichnis des Projekts und schreiben Sie den Pfad der dritten -party class Geben Sie die Klassenzuordnung unter Autoload ein, damit
automatisch geladen werden kann: {
"classmap": [
"database/seeds",
„database/factories“ ,
„app/Lib/simple_html_dom.php“
]
},
4. Wechseln Sie in das Projektstammverzeichnis in der cmd-Konsole und führen Sie es aus der Befehl:
composer dumpautoload
5. Verwenden Sie diese Klasse im Controller
use simple_html_dom;
$html = new simple_html_dom(); 🎜>
2. Route erstellen
Route::get('/novel_list','index\Spnovel@index');
3. Controller Spnovel.php erstellen
<?php namespace App\Http\Controllers\index; use simple_html_dom; use Illuminate\Http\Request; use App\Http\Controllers\Controller; class Spnovel extends Controller { public function index(){ $url = "https://www.7kzw.com/85/85445/"; $list_html = mySpClass::getCurl($url); $data['List'] = self::getList($list_html); return view('index.spnovel.index',$data); } private static function getList($list_html){ $html = new simple_html_dom(); @$html->load($list_html); $list = $html->find('#list dd a'); foreach ($list as $k=>$v) { $arr1=$arr2=[]; $p1 = '/<a .*?>(.*?)<\/a>/i'; $p2 = '/<a .*? href="(.*?)">.*?<\/a>/i'; preg_match($p1,$v->outertext,$arr1); preg_match($p2,$v->outertext,$arr2); $content[$k][0]=$arr1[1]; $content[$k][1]=$arr2[1]; } array_splice($content,0,12); return $content; } } class mySpClass{ // 向服务器发送最简单的get请求 public static function getCurl($url,$header=null){ // 1.初始化 $ch = curl_init($url); //请求的地址 // 2.设置选项 curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);//获取的信息以字符串返回,而不是直接输出(必须) curl_setopt($ch,CURLOPT_TIMEOUT,10);//超时时间(必须) curl_setopt($ch, CURLOPT_HEADER,0);// 启用时会将头文件的信息作为数据流输出。 //参数为1表示输出信息头,为0表示不输出 curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false); //不验证证书 curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false); //不验证证书 if(!empty($header)){ curl_setopt($ch,CURLOPT_HTTPHEADER,$header);//设置头信息 }else{ $_head = [ 'User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0' ]; curl_setopt($ch,CURLOPT_HTTPHEADER,$_head); } // 3.执行 $res = curl_exec($ch); // 4.关闭 curl_close($ch); return $res; } }
Erklärung von der obige Code: Zunächst müssen Sie das Laravel-Framework und die PHP-Klasse verstehen
Nach dem Zugriff auf die obige Route wird die Indexmethode im Spnovel.php-Controller ausgeführt Ein Kapitel eines bestimmten Romans. Verwenden Sie sie als Parameter, um die getcurl-Methode in der benutzerdefinierten Klasse mySpClass auszuführen und die HTML-Dokumentzeichenfolge dieser Seite zurückzugeben. Führen Sie die getList-Methode in dieser Klasse aus. Der Parameter ist die HTML-Zeichenfolge, die analysiert werden muss. Privatisieren Sie diese Methode, verwenden Sie die Analyse von simple_html_dom und konfigurieren Sie regelmäßige Regeln, um die URL-Adresse und den Kapitelnamen jedes Kapitels zu extrahieren. Und geben Sie dieses Array über return view('index.spnovel.index',$data) zurück, um index/spnovel/index.blade.php zu öffnen, siehe index.blade.phpvier , Ansicht index.blade.php erstellen
<!DOCTYPE html> <html> <head> <title>爬取的小说列表</title> <style type="text/css"> body{padding:0px;margin:0px;} #lists{width:100%;padding:30px 50px;box-sizing:border-box;} ul{margin:0;padding: 0;overflow:hidden;} ul li{list-style:none;display:inline-block;float:left;width:25%;color:#444;} ul li:hover{color:#777;cursor: pointer;} img {z-index:-1;width:100%;height:100%;position:fixed;} </style> </head> <body> <img src="/static/img/index/novelbg.jpg" alt="Verwenden Sie simple_html_dom, um den gesamten Roman in Laravel zu crawlen und anzuzeigen" > <div id="lists"> <ul> @foreach($List as $item) <li> <a href="/novel_con{{$item[1]}}">{{$item[0]}}</a> </li> @endforeach </ul> </div> </body> </html>
Erklärung des obigen Codes: Das CSS wird hier einfach geschrieben und img wird als Hintergrundbild verwendet. In der Schleife li in ul ist {{$item[1]}} der erhaltene Adressparameter und {{$item[0]}} der erhaltene Kapitelname. Schauen Sie sich das Array und den Endeffekt an.
5. Ausführen
Das Folgende ist der Inhalt jedes Kapitels
Erster Blick auf die Route:
Route::get('/novel_con/{a}/{b}/{c}','index\Spnovel@get_nContent');Dies entspricht den URL-Parametern jedes Kapitels. Die Parameter eines bestimmten Kapitels sind beispielsweise: Novel_con/85/85445/27248645 .html
Schreiben Sie get_nContent-Methode:
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>.*?<\/p>)|(<div .*?>.*?<\/div>)/"; $artic['content'] = preg_replace($pattern,'',$content); return $artic; }
Erläuterung: $req->a, $ req- >b, $req->c sind jeweils drei Parameter, die dann zu einer vollständigen Adresse zusammengeführt werden, um ein bestimmtes Kapitel anzufordern, und dann die HTML-Zeichenfolge eines bestimmten Kapitels über mySpClass::getCurl abzurufen. Verwenden Sie dann getContent in dieser Klasse, um diese Seite zu analysieren. Schauen Sie sich zunächst die Analysemethode an, analysieren Sie den Titel und den Inhalt des Kapitels mit dem vorherigen Artikel, schreiben Sie ihn in das Array und entfernen Sie den überflüssigen Textanzeigenteil. $next ist die Adresse des nächsten gespeicherten Kapitels, die zum Springen zur Kapiteldetailseite verwendet wird.
Ncontent.blade.php anzeigen
<!DOCTYPE html> <html> <head> <title>{{$artic['title']}}</title> <style type="text/css"> h2{text-align:center;padding-top:30px;} div{margin:20px 50px;font-size:20px;} img {z-index:-1;width:100%;height:100%;position:fixed;} .next {position:fixed;right:10px;bottom:20px;background:coral;border-radius:3px;padding:4px;} .next:hover{color:#fff;} </style> </head> <body> <img src="/static/img/index/novelbg.jpg" alt="Verwenden Sie simple_html_dom, um den gesamten Roman in Laravel zu crawlen und anzuzeigen" > <h2>{{$artic['title']}}</h2> <a href="{{$artic['next']}}" class="next">下一章</a> <div> {!!$artic['content']!!} </div> </body> </html>
Erklärung: Da es nur den aktuellen Artikel gibt, gibt es keinen muss eine Schleife durchlaufen, { {$artic['title']}} ist der Titel und kann auch in den Titel geschrieben werden. Die Art und Weise, wie {!!$artic['content']!!} geschrieben wird, besteht darin, den Inhalt des Artikels nicht zu maskieren, da sonst viele andere Zeichen wie
usw. vorhanden sind. Die Adresse der Schaltfläche für das nächste Kapitel kann direkt übergeben werden: position:fixed fixiert die Positionierungsschaltfläche und Sie können jederzeit zum nächsten Kapitel wechseln.
Lauf :
Zusammenfassung: Der wichtigste Teil dieses Artikels ist die Einführung von Dritt- Party-Klassen, die angewendet werden können, und auch die Grundlagen von Laravel, sind eher an die Verwendung der Controller-Ansicht gewöhnt. Wenn Sie das Modell verwenden, schreiben Sie bitte Ihre eigene Bestätigung.
Das reicht natürlich für einen Roman, wir können ihn erweitern und die Romanliste der gesamten Seite ausschreiben. Es wird noch perfekter, wenn wir weiterhin die entsprechenden Parameter übergeben.Das obige ist der detaillierte Inhalt vonVerwenden Sie simple_html_dom, um den gesamten Roman in Laravel zu crawlen und anzuzeigen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!