百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>网页制作> 程序员还看带广告的小说?
分享文章到:

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

发布时间:09/01 来源:未知 浏览: 关键词:
有人习惯看小说,偶然会看几章,都是baidu出来,但是根本都有特殊烦人的广告,要末在团体div增加链接,误触就会跳转到一些网站乃至是死轮回,某些手机app也是广告许多,所以无事在写一个小程序免除广告的烦扰

本文将使用php curl采集页面simple_html_dom解析,实现真正的去除广告。

随意寻一个小说网站寻一本书,不外这个站点在手机端是特殊坑的,就有上述问题:

QQ截图20200506151029.png

就拿这本小说来开刀。(声明:绝对不是推行,侵删)

一、理解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

二、解析页面

输出的页面有许多不需要的内容,需要在所有内容中提取出我们需要的内容,比方标题和每章的内容,这时需要解析页面。

解析页面的办法也有许多,在这里使用的是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解析的具体内容,更多请关注百分百源码网其它相关文章!

以上就是程序员还看带广告的小说?的具体内容,更多请关注百分百源码网其它相关文章!

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有150人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板