程序员还看带广告的小说?-php教程

资源魔 23 0
有人习气看小说,偶然会看几章,都是baidu进去,然而根本都有特地烦人的告白,要末正在全体div增加链接,误触就会跳转到一些网站乃至是死轮回,某些手机app也是告白不少,以是无事正在写一个小顺序罢黜告白的搅扰

本文将应用php curl采集页面simple_html_dom解析,完成真实的去除了告白。

随意找一个小说网站找一本书,不外这个站点正在手机端是特地坑的,就有上述成绩:

QQ截图20200506151029.png

就拿这本小说来开刀。(申明:相对没有是推行,侵删)

1、理解curl的get形式

curl是一个饬令行对象,经过指定的URL来上传或下载数据,并将数据展现进去。curl中的c示意client,而URL,就是URL。

PHP中应用cURL能够完成Get以及Post申请的办法

简略的抓取小说仅需求get办法便可。

上面这个示例代码就是经过get申请猎取第一章小说页面html的示例,只要要更改url参数便可。

初始化、设置选项、证书验证、执行、封闭

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

正文就特地具体了,依照步骤,发送curl的get申请,假如是post申请则需求多加一条设置post选项的设置,而且传参,最初输入取得的信息,运转后果以下,是不css衬着的。

QQ截图20200506152018.png

2、解析页面

输入的页面有不少没有需求的内容,需求正在一切内容中提掏出咱们需求的内容,比方题目以及每一章的内容,这时候需求解析页面。

解析页面的办法也有不少,正在这里应用的是simple_html_dom,需求下载援用simple_html_dom.php这个类,实例工具,并挪用外部的办法。详细办法能够到官网查看,或许中文网其余文档。

先剖析这个小说页面的源代码,看这章的题目以及内容对应的元素

起首是题目:正在类bookname下的h1下

QQ截图20200506152426.png

而后是内容:正在id为content的div下

QQ截图20200506152654.png

simple_html_dom的能够应用find办法,相似jquery同样应用抉择器查找定位元素。如:

find('.bookname h1'); //查找类bookname 下的h1题目元素

find('#content'); //查找id为content的章节内容

代码正在以上的根底上新增:

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

应用以上的解析办法取得的内容是数组,应用foreach来取得数组内容,应用了正则交换将注释文字告白去除了,将题目以及小说内容放到数组内。最简略的写法就写好了。运转后果以下:

QQ截图20200506153415.png

当然这类写法看着比拟舒服,能够自行封装函数类。以下就是我本人写好的代码示例了,当然一定有有余之处,然而能够作为参考扩大。

<?php 
include "simple_html_dom.php";
include "mySpClass.php";
header("Content-Type:text/html;charset=utf-8");
$get_html = get_html($_GET['n']);
$artic = getContent($get_html);
echo $artic['title'].'<br>';
echo $artic['content'];
/**
* 猎取www.7kzw.com 猎取每一一章的页面html
* @param type $num 第几章,从第一开端(int)
* @return 前往字符串  
*/
function get_html($num){
	$start = 27248636;
	$real_num = $num+$start-1;
	$url = 'https://www.7kzw.com/85/85445/'.$real_num.'.html';
	$header = [
	'User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0'
	]; 
	return mySpClass()->getCurl($url,$header);
}
/**
* 猎取www.7kzw.com小说题目数组
* @param type $get_html 失去的每一一章的页面html
* @return 前往$artic数组,['title'=>'','content'=>'']
*/
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;
}
?>
<?php
class mySpClass{
	//单例工具
    private static $ins = null;
    /**
     * 单例化工具
     */
    public static function exec()
    {
        if (self::$ins) {
            return self::$ins;
        }
        return self::$ins = new self();
    }
    
    /**
     * 制止克隆工具
     */
    public function __clone()
    {
        throw new curlException('谬误:不克不及克隆工具');
    }
	// 向效劳器发送最简略的get申请
	public static function getCurl($url,$header){
		// 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);//设置头信息
		}
		// 3.执行
		$res = curl_exec($ch);
		// 4.封闭
		curl_close($ch);
		return $res;
	}
}
//curl办法没有存正在就设置一个curl办法
if (!function_exists('mySpClass')) {
    function mySpClass() {
        return mySpClass::exec();
    }
}
?>

以上示例代码的终极运转后果:第几章就输出数字几,经过$_GET['n']传参

QQ截图20200506154010.png

总结:

常识点:curl(tips:curl模块采集恣意网页php类),正则,解析对象simple_html_dom

尽管写法曾经初步欠缺,然而最佳能过部署的本人的效劳器能力有最佳的成果,否则只能正在电脑寓目,也没有见患上多不便,可能更情愿忍忍告白了。

以上就是应用php curl采集页面并应用simple_html_dom解析的具体内容,更多请存眷资源魔其它相干文章!

以上就是顺序员还看带告白的小说?的具体内容,更多请存眷资源魔其它相干文章!

标签: php开发教程 php开发资料 php开发自学 程序员

抱歉,评论功能暂时关闭!