Inhaltsverzeichnis
{{$artic['title']}}
Heim PHP-Framework Laravel Verwenden Sie simple_html_dom, um den gesamten Roman in Laravel zu crawlen und anzuzeigen

Verwenden Sie simple_html_dom, um den gesamten Roman in Laravel zu crawlen und anzuzeigen

May 07, 2020 pm 02:14 PM
laravel

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');
Nach dem Login kopieren

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[&#39;List&#39;] = self::getList($list_html);
		return view(&#39;index.spnovel.index&#39;,$data);
	}
	private static function getList($list_html){
		$html = new simple_html_dom();
		@$html->load($list_html);
		$list = $html->find(&#39;#list dd a&#39;);
		foreach ($list as $k=>$v) {
			$arr1=$arr2=[];
			$p1 = &#39;/<a .*?>(.*?)<\/a>/i&#39;;
			$p2 = &#39;/<a .*? href="(.*?)">.*?<\/a>/i&#39;;
			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 = [
			&#39;User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0&#39;
			]; 
			curl_setopt($ch,CURLOPT_HTTPHEADER,$_head);
		}
		// 3.执行
		$res = curl_exec($ch);
		// 4.关闭
		curl_close($ch);
		return $res;
	}
}
Nach dem Login kopieren

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.php

vier , 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/imghw/default1.png"  data-src="/static/img/index/novelbg.jpg"  class="lazy"   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>
Nach dem Login kopieren

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.

Verwenden Sie simple_html_dom, um den gesamten Roman in Laravel zu crawlen und anzuzeigen

5. Ausführen

Verwenden Sie simple_html_dom, um den gesamten Roman in Laravel zu crawlen und anzuzeigen

Das Folgende ist der Inhalt jedes Kapitels

Erster Blick auf die Route:

Route::get(&#39;/novel_con/{a}/{b}/{c}&#39;,&#39;index\Spnovel@get_nContent&#39;);
Nach dem Login kopieren

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

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[&#39;title&#39;]}}</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/imghw/default1.png"  data-src="/static/img/index/novelbg.jpg"  class="lazy"   alt="Verwenden Sie simple_html_dom, um den gesamten Roman in Laravel zu crawlen und anzuzeigen" >
	<h2 id="artic-title">{{$artic[&#39;title&#39;]}}</h2>
	<a href="{{$artic[&#39;next&#39;]}}" class="next">下一章</a>
	<div>
		{!!$artic[&#39;content&#39;]!!}
	</div>
</body>
</html>
Nach dem Login kopieren

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 :

Verwenden Sie simple_html_dom, um den gesamten Roman in Laravel zu crawlen und anzuzeigen

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!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Wie verwende ich objektrelationales Mapping (ORM) in PHP, um Datenbankoperationen zu vereinfachen? Wie verwende ich objektrelationales Mapping (ORM) in PHP, um Datenbankoperationen zu vereinfachen? May 07, 2024 am 08:39 AM

Datenbankoperationen in PHP werden durch ORM vereinfacht, das Objekte in relationalen Datenbanken abbildet. EloquentORM in Laravel ermöglicht Ihnen die Interaktion mit der Datenbank mithilfe einer objektorientierten Syntax. Sie können ORM verwenden, indem Sie Modellklassen definieren, Eloquent-Methoden verwenden oder in der Praxis ein Blog-System erstellen.

Vergleich der neuesten Versionen von Laravel und CodeIgniter Vergleich der neuesten Versionen von Laravel und CodeIgniter Jun 05, 2024 pm 05:29 PM

Die neuesten Versionen von Laravel 9 und CodeIgniter 4 bieten aktualisierte Funktionen und Verbesserungen. Laravel9 übernimmt die MVC-Architektur und bietet Funktionen wie Datenbankmigration, Authentifizierung und Template-Engine. CodeIgniter4 nutzt die HMVC-Architektur, um Routing, ORM und Caching bereitzustellen. In Bezug auf die Leistung sorgen das auf Dienstanbietern basierende Designmuster von Laravel9 und das leichte Framework von CodeIgniter4 für eine hervorragende Leistung. In praktischen Anwendungen eignet sich Laravel9 für komplexe Projekte, die Flexibilität und leistungsstarke Funktionen erfordern, während CodeIgniter4 für schnelle Entwicklung und kleine Anwendungen geeignet ist.

Laravel – Handwerkerbefehle Laravel – Handwerkerbefehle Aug 27, 2024 am 10:51 AM

Laravel – Artisan Commands – Laravel 5.7 bietet eine neue Möglichkeit, neue Befehle zu behandeln und zu testen. Es enthält eine neue Funktion zum Testen von Handwerkerbefehlen und die Demonstration wird unten erwähnt?

Wie vergleichen sich die Datenverarbeitungsfunktionen in Laravel und CodeIgniter? Wie vergleichen sich die Datenverarbeitungsfunktionen in Laravel und CodeIgniter? Jun 01, 2024 pm 01:34 PM

Vergleichen Sie die Datenverarbeitungsfunktionen von Laravel und CodeIgniter: ORM: Laravel verwendet EloquentORM, das eine relationale Klassen-Objekt-Zuordnung bereitstellt, während CodeIgniter ActiveRecord verwendet, um das Datenbankmodell als Unterklasse von PHP-Klassen darzustellen. Abfrage-Builder: Laravel verfügt über eine flexible verkettete Abfrage-API, während der Abfrage-Builder von CodeIgniter einfacher und Array-basiert ist. Datenvalidierung: Laravel bietet eine Validator-Klasse, die benutzerdefinierte Validierungsregeln unterstützt, während CodeIgniter über weniger integrierte Validierungsfunktionen verfügt und eine manuelle Codierung benutzerdefinierter Regeln erfordert. Praxisfall: Beispiel einer Benutzerregistrierung zeigt Lar

Was ist einsteigerfreundlicher: Laravel oder CodeIgniter? Was ist einsteigerfreundlicher: Laravel oder CodeIgniter? Jun 05, 2024 pm 07:50 PM

Für Anfänger bietet CodeIgniter eine sanftere Lernkurve und weniger Funktionen, deckt aber die Grundbedürfnisse ab. Laravel bietet einen größeren Funktionsumfang, weist jedoch eine etwas steilere Lernkurve auf. In Bezug auf die Leistung schneiden sowohl Laravel als auch CodeIgniter gut ab. Laravel verfügt über eine umfangreichere Dokumentation und aktive Community-Unterstützung, während CodeIgniter einfacher und leichtgewichtiger ist und über starke Sicherheitsfunktionen verfügt. Im praktischen Fall der Erstellung einer Blogging-Anwendung vereinfacht EloquentORM von Laravel die Datenmanipulation, während CodeIgniter mehr manuelle Konfiguration erfordert.

Laravel vs CodeIgniter: Welches Framework ist besser für große Projekte? Laravel vs CodeIgniter: Welches Framework ist besser für große Projekte? Jun 04, 2024 am 09:09 AM

Bei der Auswahl eines Frameworks für große Projekte haben Laravel und CodeIgniter jeweils ihre eigenen Vorteile. Laravel ist für Anwendungen auf Unternehmensebene konzipiert und bietet modularen Aufbau, Abhängigkeitsinjektion und einen leistungsstarken Funktionsumfang. CodeIgniter ist ein leichtes Framework, das sich eher für kleine bis mittelgroße Projekte eignet und Wert auf Geschwindigkeit und Benutzerfreundlichkeit legt. Für große Projekte mit komplexen Anforderungen und einer großen Anzahl von Benutzern sind die Leistung und Skalierbarkeit von Laravel besser geeignet. Für einfache Projekte oder Situationen mit begrenzten Ressourcen sind die leichten und schnellen Entwicklungsfunktionen von CodeIgniter idealer.

PHP-Code-Unit-Tests und Integrationstests PHP-Code-Unit-Tests und Integrationstests May 07, 2024 am 08:00 AM

Leitfaden zum Testen von PHP-Einheiten und -Integrationen Unit-Tests: Konzentrieren Sie sich auf eine einzelne Code- oder Funktionseinheit und verwenden Sie PHPUnit, um Testfallklassen zur Überprüfung zu erstellen. Integrationstests: Achten Sie darauf, wie mehrere Codeeinheiten zusammenarbeiten, und verwenden Sie die Methoden setUp() und TearDown() von PHPUnit, um die Testumgebung einzurichten und zu bereinigen. Praktischer Fall: Verwenden Sie PHPUnit, um Unit- und Integrationstests in Laravel-Anwendungen durchzuführen, einschließlich der Erstellung von Datenbanken, dem Starten von Servern und dem Schreiben von Testcode.

Laravel vs CodeIgniter: Welches Framework ist besser für kleine Projekte? Laravel vs CodeIgniter: Welches Framework ist besser für kleine Projekte? Jun 04, 2024 pm 05:29 PM

Für kleine Projekte eignet sich Laravel, für größere Projekte, die starke Funktionalität und Sicherheit erfordern. CodeIgniter eignet sich für sehr kleine Projekte, die geringes Gewicht und Benutzerfreundlichkeit erfordern.

See all articles