问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

关于程序员的小说有哪些

发布网友 发布时间:2022-04-07 05:17

我来回答

2个回答

懂视网 时间:2022-04-07 09:39

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

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

热心网友 时间:2022-04-07 06:47

强烈推荐数字生命,文笔情节都超棒,经典中的经典,黑客小说的话最近看的疯狂硬盘还不错,老的话有下面这些
1.指间的黑客
2.黑客传说
3.原始动力
4.禁区之门(地狱黑客)
5.颠峰黑客
6.心灵黑客
7.黑客江湖
8.网络骑士
9.黑客的心
10.黑客风云
11.天擎
12.数字生命
13.白手起家
14.黑客反击战
15.程序员法则
16.红色黑客
17.我用电脑黑了全世界
18.网神-黑客启示录
19.骇世黑客
20.我是一个黑客
21.首席黑客
22.网络特级追杀令
23.校园网络黑客之剑心传
24.谁动了你的密码
25..黑客之少年的成长
26.超级黑客
27.极品黑客
28.黑客之王
29.极光骇客
30.黑客天堂
31.我的黑客女友
32.未来黑客
33.黑客界的耻辱——剽窃之王
34.疯狂的程序员
35.再世黑客
36.终极黑客
37.超级系统
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
2024年欧洲杯赛程表 德国欧洲杯足球赛2024赛程时间表 勇者斗魔王勇者斗恶龙12Gameboy游戏1中最后魔王变身后怎么打2中什么武... 电脑开机十秒技巧怎样让电脑开机速度变快 完美世界手游熊猫哪里抓完美国际熊猫是怎么得的 ...每一关跳旗杆的时候怎么才能跳到满分我每次都只能跳到 ip11和ip11pro区别 请问;谁知道SJ-M里面有一个叫基_什么? 智齿疼一定要拔吗 大师们帮我算算我的命数!不胜感激~ 怎样选择评估公司 是QQ号注册的现在上不去了怎么办? 暖气片内为什么有流水声及解决方法 暖气片有滴水声 qq怎么申请注册 暖气里有流水声怎么办? 暖气管滴水响怎么解决 诱狼观后感500字。 培训机构收费退费管理暂行办法 电影《幼狼》四年级作文观后感 怎么通过qq注册新 五年级观看的爱国主义片诱狼读后感250字 钢琴培训班是怎么收费的 。。多少 。。。学成要花多少。。。。 诱狼观感300字 于无声处听惊雷,是啥意思含义? 造价员培训班怎么收费的? 电影诱狼观后感怎么写 界的开头成语 诱狼观后感400字 月嫂培训班怎样收费 界开头是成语吗 没有手机好,只有qq好怎么注册微信? 暖气里一直有流水声音,怎么回事? 怎么用QQ号注册 暖气片局部不热、有水流声音怎么办? 家庭使用暖气片有时候会出现流水声,怎么办 我想重新注册一个新的,该怎么办? 刚供暖暖气片里一直有流水声怎么回事? 暖气片里有流水声怎么办 手机清理垃圾无法进行 一直扫描状态怎么办 微信投票啊? 实用微信小技巧:怎么用QQ号注册 暖气片流水哗哗响怎么才能消除呢? 红米手机清理垃圾时显示一直扫描,指针一直摆动不停,是怎么回事 企业培训计划方案 暖气片有流水声是怎么回事 如何用微信投票 红米手机系统升级后开机显示内存不足,清理却又清理不了一直处于扫描 企业要如何做好培训计划方案? 微信投票如何制作,麻烦大神指导一下 腾讯手机管家清理垃圾的时候会会一直扫描百分比的读条不动,怎么回事?