Maison  >  Article  >  développement back-end  >  Les programmeurs lisent-ils encore des romans avec des publicités ?

Les programmeurs lisent-ils encore des romans avec des publicités ?

L先生
L先生original
2020-05-06 18:41:532915parcourir

Certaines personnes ont l'habitude de lire des romans, et lisent occasionnellement quelques chapitres. Ils sont tous publiés par Baidu, mais il y a fondamentalement des publicités très ennuyeuses. Soit ils ajoutent des liens vers le div global, et s'ils sont accidentellement touchés, ils le feront. sauter vers certains sites Web ou même des boucles infinies. Certaines applications mobiles ont aussi beaucoup de publicités, donc je n'ai rien d'autre à faire que d'écrire un petit programme pour éviter les ennuis des publicités

Cet article utilisera php. curl pour collecter la page simple_html_dom analyse pour obtenir une véritable suppression des publicités.

Recherchez un livre sur n'importe quel site Web de roman, mais ce site est particulièrement délicat sur les téléphones mobiles en raison des problèmes ci-dessus :

Les programmeurs lisent-ils encore des romans avec des publicités ?

Prenez simplement ceci Ce roman fera l'opération. (Avertissement : il ne s'agit certainement pas d'une promotion, d'une violation ou d'une suppression)

1. Comprendre la méthode d'obtention de curl

curl est un outil de ligne de commande qui télécharge ou télécharge via. les données URL spécifiées et afficher les données. Le c dans curl signifie client et URL est l'URL.

L'utilisation de cURL en PHP peut implémenter les méthodes de requête Get et Post

Les romans de saisie simples ne nécessitent que la méthode get.

L'exemple de code suivant est un exemple d'obtention du code HTML de la page du roman du premier chapitre via une requête get. Il vous suffit de modifier les paramètres d'URL.

Initialisation, options de paramétrage, vérification du certificat, exécution, arrêt

<?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);
?>

Les commentaires sont particulièrement détaillés. Suivez les étapes pour envoyer une requête curl get. post request, alors vous devez ajouter un paramètre supplémentaire pour définir l'option de publication, transmettre les paramètres et enfin afficher les informations obtenues. Les résultats en cours d'exécution sont les suivants et il n'y a pas de rendu CSS.

Les programmeurs lisent-ils encore des romans avec des publicités ?

2. Analyser la page

La page de sortie contient beaucoup de contenu inutile, qui doit être extrait. de tout le contenu Pour obtenir le contenu dont nous avons besoin, comme le titre et le contenu de chaque chapitre, nous devons analyser la page.

Il existe de nombreuses façons d'analyser une page. Simple_html_dom est utilisé ici. Vous devez télécharger et référencer la classe simple_html_dom.php, l'objet d'instance et appeler des méthodes internes. Pour des méthodes spécifiques, vous pouvez consulter le site officiel ou d’autres documents sur le site chinois.

Analysez d'abord le code source de cette page de roman et regardez les éléments correspondant au titre et au contenu de ce chapitre

Le premier est le titre : sous h1 sous le nom du livre de classe

Les programmeurs lisent-ils encore des romans avec des publicités ?

Ensuite le contenu : sous le div avec l'identifiant du contenu

Les programmeurs lisent-ils encore des romans avec des publicités ?

simple_html_dom peut utiliser la recherche méthode, similaire à jquery Le sélecteur trouve l'élément positionné. Par exemple :

find('.bookname h1'); //Recherche l'élément de titre h1 sous la classe bookname

find('#content'); Recherchez le contenu du chapitre avec l'identifiant du contenu

Le code est ajouté en fonction de ce qui précède :

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;];

Le contenu obtenu en utilisant la méthode d'analyse ci-dessus est un tableau, utilisez foreach Pour obtenir le contenu du tableau, un remplacement régulier est utilisé pour supprimer la publicité textuelle dans le texte, et le titre et le contenu du roman sont placés dans le tableau. La façon la plus simple de l'écrire est de le faire. Les résultats d'exécution sont les suivants :

Les programmeurs lisent-ils encore des romans avec des publicités ?

Bien sûr, cette façon d'écrire semble inconfortable, vous pouvez encapsuler vous-même la classe de fonctions. Ce qui suit est un exemple de code que j'ai écrit moi-même. Bien sûr, il y a certainement des lacunes, mais il peut être utilisé comme référence pour l'expansion.

<?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

Le résultat final de l'exemple de code ci-dessus : entrez le numéro dans le chapitre et transmettez les paramètres via $_GET['n']

Les programmeurs lisent-ils encore des romans avec des publicités ?

Résumé :

Points de connaissance : curl (astuces : le module curl collecte n'importe quelle classe php de page Web ), outil d'analyse régulier simple_html_dom

Bien que le La méthode d'écriture a été initialement améliorée, mais il est préférable de déployer votre propre serveur pour obtenir les meilleurs résultats. Sinon, vous ne pouvez le regarder que sur un ordinateur, ce qui n'est pas très pratique. Vous serez peut-être plus disposé à tolérer les publicités.

Ce qui précède contient les détails de l'utilisation de php curl pour collecter des pages et de l'utilisation de simple_html_dom pour les analyser. Pour plus d'informations, veuillez prêter attention aux autres articles connexes sur le site Web chinois de php !

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn