Heim  >  Artikel  >  Backend-Entwicklung  >  Lesen Programmierer immer noch Romane mit Werbung?

Lesen Programmierer immer noch Romane mit Werbung?

L先生
L先生Original
2020-05-06 18:41:532898Durchsuche

Manche Leute sind es gewohnt, Romane zu lesen und lesen gelegentlich ein paar Kapitel. Sie werden alle von Baidu veröffentlicht, aber im Grunde gibt es sehr nervige Anzeigen, und wenn sie versehentlich berührt werden, werden sie angezeigt Springen Sie zu einigen Websites oder sogar zu Endlosschleifen. Einige mobile Apps enthalten auch viele Anzeigen. Daher bleibt mir nichts anderes übrig, als ein kleines Programm zu schreiben, um den Ärger mit Anzeigen zu vermeiden.

Dieser Artikel verwendet php Curl, um die Seitensimple_html_dom-Analyse zu erfassen, um eine echte Werbeentfernung zu erreichen.

Suchen Sie auf jeder Roman-Website nach einem Buch, aber diese Website ist aufgrund der oben genannten Probleme auf Mobiltelefonen besonders schwierig:

Lesen Programmierer immer noch Romane mit Werbung?

Nehmen Sie einfach diesen Roman werde die Operation durchführen. (Haftungsausschluss: Hierbei handelt es sich definitiv nicht um Werbung, Rechtsverletzung oder Löschung)

1. Verstehen Sie die Get-Methode von Curl

Curl ist ein Befehlszeilentool, das Uploads oder Downloads durchführt die angegebenen URL-Daten und zeigt die Daten an. Das c in Curl bedeutet Client und URL ist die URL.

Mit cURL in PHP können Get- und Post-Anfragemethoden implementiert werden

Einfaches Grabbing von Romanen erfordert nur die Get-Methode.

Der folgende Beispielcode ist ein Beispiel für den Erhalt des HTML-Codes der Romanseite des ersten Kapitels über eine Get-Anfrage. Sie müssen nur die URL-Parameter ändern.

Initialisierung, Einstellungsoptionen, Zertifikatsüberprüfung, Ausführung, Herunterfahren

<?php
header("Content-Type:text/html;charset=utf-8");
$url="https://www.7kzw.com/85/85445/27248636.html";
$ch = curl_init($url);   //初始化
//设置选项
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); //不验证证书
// 3.执行
$res = curl_exec($ch);
// 4.关闭
curl_close($ch);
print_r($res);
?>

Befolgen Sie die Schritte zum Senden einer Curl-Get-Anfrage Post-Anfrage, dann müssen Sie eine zusätzliche Einstellung hinzufügen, um die Post-Option festzulegen, Parameter zu übergeben und schließlich die erhaltenen Informationen auszugeben. Die laufenden Ergebnisse sind wie folgt, und es gibt kein CSS-Rendering.

Lesen Programmierer immer noch Romane mit Werbung?

2. Analysieren Sie die Seite

Die Ausgabeseite enthält viele unnötige Inhalte, die extrahiert werden müssen Aus dem gesamten Inhalt Um den Inhalt zu erhalten, den wir benötigen, z. B. den Titel und den Inhalt jedes Kapitels, müssen wir die Seite analysieren.

Es gibt viele Möglichkeiten, eine Seite zu analysieren. Hier müssen Sie die Klasse simple_html_dom.php und das Instanzobjekt herunterladen und darauf verweisen. Informationen zu bestimmten Methoden finden Sie auf der offiziellen Website oder in anderen Dokumenten auf der chinesischen Website.

Analysieren Sie zunächst den Quellcode dieser Romanseite und sehen Sie sich die Elemente an, die dem Titel und Inhalt dieses Kapitels entsprechen.

Das erste ist der Titel: unter h1 unter dem Klassenbuchnamen

Lesen Programmierer immer noch Romane mit Werbung?

Dann der Inhalt: Unter dem Div mit der ID des Inhalts kann

Lesen Programmierer immer noch Romane mit Werbung?

simple_html_dom das verwenden find-Methode, ähnlich wie jquery. Der Selektor findet das positionierte Element. Zum Beispiel:

find('.bookname h1'); //Suchen Sie das h1-Titelelement unter der Klasse bookname

find('#content'); Finden Sie den Kapitelinhalt mit der ID des Inhalts

Der Code wird basierend auf dem oben Gesagten hinzugefügt:

include "simple_html_dom.php";
$html = new simple_html_dom();
@$html->load($res);
$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);
echo $artic[&#39;title&#39;].&#39;<br>&#39;;
echo $artic[&#39;content&#39;];

Der durch die obige Analysemethode erhaltene Inhalt ist Verwenden Sie in einem Array foreach, um den Inhalt des Arrays zu erhalten. Durch regelmäßiges Ersetzen werden die Textanzeigen im Text entfernt und der Titel und der Inhalt des Romans in das Array eingefügt. Der einfachste Weg, es zu schreiben, ist fertig. Die laufenden Ergebnisse lauten wie folgt:

Lesen Programmierer immer noch Romane mit Werbung?

Natürlich sieht diese Schreibweise unbequem aus, Sie können die Funktionsklasse selbst kapseln. Das Folgende ist ein Codebeispiel, das ich selbst geschrieben habe. Natürlich gibt es definitiv Mängel, aber es kann als Referenz für die Erweiterung verwendet werden.

<?php 
include "simple_html_dom.php";
include "mySpClass.php";
header("Content-Type:text/html;charset=utf-8");
$get_html = get_html($_GET[&#39;n&#39;]);
$artic = getContent($get_html);
echo $artic[&#39;title&#39;].&#39;<br>&#39;;
echo $artic[&#39;content&#39;];
/**
* 获取www.7kzw.com 获取每一章的页面html
* @param type $num 第几章,从第一开始(int)
* @return 返回字符串  
*/
function get_html($num){
	$start = 27248636;
	$real_num = $num+$start-1;
	$url = &#39;https://www.7kzw.com/85/85445/&#39;.$real_num.&#39;.html&#39;;
	$header = [
	&#39;User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0&#39;
	]; 
	return mySpClass()->getCurl($url,$header);
}
/**
* 获取www.7kzw.com小说标题数组
* @param type $get_html 得到的每一章的页面html
* @return 返回$artic数组,[&#39;title&#39;=>&#39;&#39;,&#39;content&#39;=>&#39;&#39;]
*/
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;
}
?>
rrree

Das Endergebnis des obigen Beispielcodes: Geben Sie die Nummer im Kapitel ein und übergeben Sie die Parameter über $_GET['n']

Lesen Programmierer immer noch Romane mit Werbung?

Zusammenfassung:

Wissenspunkte: Curl (Tipps: Curl-Modul sammelt jede PHP-Klasse für Webseiten ), reguläres Parsing-Tool simple_html_dom

Obwohl Die Schreibmethode wurde zunächst verbessert, aber es ist am besten, einen eigenen Server bereitzustellen, um die besten Ergebnisse zu erzielen. Andernfalls können Sie es nur auf einem Computer ansehen, was nicht sehr praktisch ist. Sie sind möglicherweise eher bereit, Werbung zu tolerieren.

Im Folgenden finden Sie Einzelheiten zur Verwendung von PHP Curl zum Sammeln von Seiten und zur Verwendung von Simple_HTML_DOM zum Parsen. Weitere Informationen finden Sie in anderen verwandten Artikeln auf der chinesischen PHP-Website.

Das obige ist der detaillierte Inhalt vonLesen Programmierer immer noch Romane mit Werbung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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