Comme mentionné dans Les programmeurs lisent également des romans avec des publicités, de nombreux nouveaux sites Web contiennent des publicités très ennuyeuses, soit ils ajoutent des liens vers le div global, et si vous les touchez accidentellement, ils accéderont à certains sites Web. Même dans une boucle infinie, certaines applications mobiles contiennent également de nombreuses publicités. Cet article l'appliquera au framework Laravel. Il est préférable de d'abord comprendre l'article précédent, puis de le déployer vous-même.
1. Introduisez des classes tierces dans Laravel
1 Créez un nouveau dossier dans le répertoire de l'application sous le répertoire racine du projet et nommez-le Lib (. nom personnalisé)
2. Si vous introduisez de nombreuses bibliothèques tierces, vous pouvez créer plusieurs nouvelles catégories de répertoires sous Lib. Puisqu'une seule classe est introduite, il n'y a pas de nouveau dossier ici. (Défini par vous-même en fonction du nombre de classes importées)
Copiez simple_html_dom.php dans Lib
3 Recherchez le fichier composer.json dans le répertoire racine du projet et écrivez le chemin du troisième. -party class Entrez le classmap sous autoload, afin que
puisse être chargé automatiquement "autoload": {
"classmap": [
"database/seeds",
. "database/factories" ,
"app/Lib/simple_html_dom.php"
]
},
4. Basculez vers le répertoire racine du projet dans la console cmd et exécutez la commande :
composer dumpautoload
5. Utilisez cette classe dans le contrôleur
use simple_html_dom;
$html = new simple_html_dom(); 🎜>
2. Créer un itinéraire
Route::get('/novel_list','index\Spnovel@index');
3. Créer un contrôleur Spnovel.php
<?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; } }
Explication de le code ci-dessus : Tout d'abord, vous devez comprendre le framework laravel et la classe php
Après avoir accédé à la route ci-dessus, la méthode d'index dans le contrôleur Spnovel.php est exécutée. un chapitre d'un certain roman. L'adresse de la liste, utilisez-la comme paramètre pour exécuter la méthode getcurl dans la classe personnalisée mySpClass et renvoyez la chaîne du document html de cette page. Exécutez la méthode getList dans cette classe, le paramètre est la chaîne HTML qui doit être analysée. Privatisez cette méthode, utilisez l'analyse simple_html_dom et configurez des règles régulières pour extraire l'adresse URL et le nom de chapitre de chaque chapitre. Et renvoyez ce tableau, via return view('index.spnovel.index',$data); ouvrira index/spnovel/index.blade.php, veuillez consulter index.blade.phpfour , Créer une vue index.blade.php
<!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="Utiliser simple_html_dom pour explorer et afficher l'intégralité du roman dans Laravel" > <div id="lists"> <ul> @foreach($List as $item) <li> <a href="/novel_con{{$item[1]}}">{{$item[0]}}</a> </li> @endforeach </ul> </div> </body> </html>
Explication du code ci-dessus : Le css est simplement écrit ici, et img est utilisé comme image de fond. Dans la boucle li dans ul, {{$item[1]}} est le paramètre d'adresse obtenu et {{$item[0]}} est le nom de chapitre obtenu. Jetez un œil au tableau et à l'effet final.
5. Courir
Ce qui suit est le contenu de chaque chapitre
Premier coup d'oeil à l'itinéraire :
Route::get('/novel_con/{a}/{b}/{c}','index\Spnovel@get_nContent');Cela correspond aux paramètres url de chaque chapitre. Par exemple, les paramètres d'un certain chapitre sont : roman_con/85/85445/27248645. .html
Écrire méthode 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>.*?<\/p>)|(<div .*?>.*?<\/div>)/"; $artic['content'] = preg_replace($pattern,'',$content); return $artic; }
Explication : $req->a, $ req- >b, $req->c, sont respectivement trois paramètres, puis les fusionnent en une adresse complète pour demander un certain chapitre, puis obtenez la chaîne html d'un certain chapitre via mySpClass :: getCurl. Utilisez ensuite getContent dans cette classe pour analyser cette page. Commencez par examiner la méthode d'analyse, analysez le titre et le contenu du chapitre avec l'article précédent, écrivez-le dans le tableau et supprimez la partie publicitaire textuelle redondante. $next est l'adresse du chapitre suivant stocké, qui est utilisée pour accéder à la page de détails du chapitre.
Voir ncontent.blade.php
<!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="Utiliser simple_html_dom pour explorer et afficher l'intégralité du roman dans Laravel" > <h2>{{$artic['title']}}</h2> <a href="{{$artic['next']}}" class="next">下一章</a> <div> {!!$artic['content']!!} </div> </body> </html>
Explication : Parce qu'il n'y a que l'article actuel, il n'y a pas besoin de boucler, { {$artic['title']}} est le titre et peut également être écrit dans le titre. La façon dont {!!$artic['content']!!} est écrit est qu'il n'est pas nécessaire d'échapper au contenu de l'article, sinon il y aura de nombreux autres caractères, tels que
, etc. L'adresse du bouton du chapitre suivant peut être transmise directement position:fixed fixe le bouton de positionnement, et vous pouvez passer au chapitre suivant à tout moment.
Exécuter :
Résumé : La partie la plus importante de cet article est l'introduction de troisièmes- classes de fête qui peuvent être appliquées Lui, ainsi que les bases de Laravel, sont plus habitués à utiliser la vue contrôleur. Si vous utilisez le modèle, veuillez rédiger votre propre vérification.
C'est suffisant pour un roman. Bien sûr, nous pouvons l'étendre et rédiger la liste des romans de l'ensemble du site. Elle sera encore plus parfaite si nous continuons à passer les paramètres appropriés.Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!