栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > PHP

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

PHP 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力
有人习惯看小说,偶尔会看几章,都是百度出来,但是基本都有特别烦人的广告,要么在整体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参数即可。

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

注释就特别详细了,按照步骤,发送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 = "/(

.*?

)|(.*?
)/"; $artic['content'] = preg_replace($pattern,'',$content); echo $artic['title'].'
'; echo $artic['content'];

使用以上的解析方法获得的内容是数组,使用foreach来获得数组内容,使用了正则替换将正文文字广告去除,将标题和小说内容放到数组内。最简单的写法就写好了。运行结果如下:


QQ截图20200506153415.png

当然这种写法看着比较难受,可以自行封装函数类。如下就是我自己写好的代码示例了,当然肯定有不足的地方,但是可以作为参考扩展。

';
echo $artic['content'];

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

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 = "/(

.*?

)|(.*?
)/"; $artic['content'] = preg_replace($pattern,'',$content); return $artic; } ?>

以上示例代码的最终运行结果:第几章就输入数字几,通过$_GET['n']传参


QQ截图20200506154010.png

总结:

知识点:curl(tips:curl模块采集任意网页php类),正则,解析工具simple_html_dom

虽然写法已经初步完善,但是最好能过部署的自己的服务器才能有最好的效果,不然只能在电脑观看,也不见得多方便,可能更愿意忍忍广告了。

以上就是使用php curl采集页面并使用simple_html_dom解析的详细内容,更多请关注考高分网其它相关文章!

以上就是程序员还看带广告的小说?的详细内容,更多请关注考高分网其它相关文章!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/263184.html

PHP相关栏目本月热门文章

我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号