说盗版其实应该也不算是了,严谨的说是抓取一个网络小说的内容,过滤掉不需要的内容(比如广告和统计代码什么的),然后再把干净的内容呈现出来

这段时间在追一部叫《劫天运》的连载小说,原名《养鬼为祸》,好像因为河蟹问题所以改名了,最早是在黑岩网追的付费的,2毛多一章追了几十块钱,但是后来作者经常耍猴(作者每天凌晨更新,有时候一更都没有也不提前告知,n多次白等到凌晨1点)就放弃付费了,但是一直还在追,更换了无数的小说站,最后终于稳定在顶点中文网

这个站的盗版工作已经做完,所以这次就换了另外一个网站来做盗版演示,这个站长也是牛X居然域名就是yangguiweihuo.com

工作环境

我现在用的虚拟主机是 php 的,所以这次盗版工作也是用的 php 作为服务端语言

准备工作

安装软件

为了本地调试需要安装 phpStudy,自行配置好 phpStudy 后在浏览器地址栏输入 localhost 并回车,如果正常会显示一个网页,之后在 phpStudy 建立的WWW目录下新建几个文件(夹)

├─ css
├─ js
│  index.php
│  home.php //小说首页
│  article.php  //章节

获取小说地址

小说当然是在手机上看的,用pc浏览器需要模拟手机访问以获取手机版地址

  1. 猎豹浏览器(也可以是其它浏览器,几乎所有浏览器都支持开发功能)打开小说首页
  2. F12 打开开发面板
  3. 启用模拟手机,选择手机型号
  4. 最后刷新一下页面就成了

图中从上到下依次包括了

  • 小说首页地址
  • 设备型号和屏幕尺寸
  • 小说首页布局展示以及后边需要去掉的广告

上面说的方法只适用于带有 wap 页面的站点,用上面的方法获取的网址会直接输出一个 wap 风格的页面,但是现在这个站虽然给出了 wap 风格的页面,但是网址不变,这样我们用代码获取小说内容的时候取得的还是 pc 样式的,无法在手机上阅读,怎么办呢?

其实在用浏览器正常访问这个站的时候,在最下边有一个 移动版 的链接,点它就好了,得到了 http://www.yangguiweihuo.com/?am_force_theme_layout=mobile 这个带参数的网址

下载样式表和脚本文件

在浏览器页面上按右键点 查看源代码,会打开一个新的页面,在里面找到这几行

<link rel="stylesheet" href="http://www.yangguiweihuo.com/wp-content/themes/Novel-Mobile/style.css" type="text/css" media="screen" />

<script  src="http://www.yangguiweihuo.com/wp-content/themes/Novel-Mobile/js/zepto.min.js"></script>
<script  src="http://www.yangguiweihuo.com/wp-content/themes/Novel-Mobile/js/kfx.swipeslide.js"></script>
<script  src="http://www.yangguiweihuo.com/wp-content/themes/Novel-Mobile/js/kfx.touchapp.js"></script>
<script  src="http://www.yangguiweihuo.com/wp-content/themes/Novel-Mobile/js/kfx.template.js"></script>
<script  src="http://www.yangguiweihuo.com/wp-content/themes/Novel-Mobile/js/kfx.scrolllist.js"></script>

href 和 src 后边的链接是可以点的,直接点右键把它们保存到对应的文件夹里

额。。。。当然这一步也是可以忽略的,因为这个源文件里引用用的都是绝对地址,我们可以不用管它了。。。。。

开始过滤

准备工作做完之后就可以开始进入正题了

index.php

index.php 是在安装 phpStudy 之后建立的文件,内容如下

<?php
    include "home.php";
?>

home.php

home.php 是用来过滤和显示小说首页的,首先是获取网页内容

<?php
    $param = "?am_force_theme_layout=mobile";
    $url = "http://yangguiweihuo.com/" . $param;
    $output = file_get_contents($url);

    echo $output;
?>

恩,浏览器测试正常,而且发现页面里根本没有广告(哈哈),不过在 查看源代码 里边还是可以找到下边的代码

<script src='http://www.billionfocus.com/sina.php?id=1190'></script>

<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>

<!-- 移动广告 -->
<ins class="adsbygoogle"
     style="display:block"
     data-ad-client="ca-pub-2383141013716021"
     data-ad-slot="3142463590"
     data-ad-format="auto"></ins>

<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>

既然都写到这里了,那还是过滤一下吧(哈哈)

// 过滤<script src='http://www.billionfocus.com/sina.php?id=1190'></script>
// 因为这个代码有2行而且id后面的数字不一样,所以用到了正则表达式
$output = preg_replace("/<script src='http:\/\/www.billionfocus.com\/sina.php\?id=.*?'><\/script>/", "<!-- 替换广告 -->", $output);

// 过滤<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
// 这个代码有3行,直接替换即可
$output = str_replace("<script async src=\"//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js\"></script>", "<!-- 替换广告 -->", $output);

// 过滤<ins></ins>之间的内容
// 这是一个多行的代码块出现了3次,要用正则表达式替换
$output = preg_replace("/<ins[\s\S]*?<\/ins>/", "<!-- 替换广告 -->", $output);

// 过滤<script>(adsbygoogle = window.adsbygoogle || []).push({});</script>
// 出现3次而且是多行代码块,还是用正则表达式
$output = preg_replace("/<script>\n\(adsbygoogle.*\n<\/script>/", "<!-- 替换广告 -->", $output);

继续看网页源代码,最下边有个 footer 标签,里边有统计代码和桌面版的链接,不如也去掉好了

// 过滤<footer></footer>之间的内容
// 多行代码块还是要用正则表达式,不过还是要保留一些内容的
$output = preg_replace("/<footer[\s\S]*?<\/footer>/", "<!-- 替换统计 -->\n<footer  class='ui-bottom-bar'><p>Copyright © <a href='./'>劫天运</a></p></footer>", $output);

再继续看源代码,最上边 header 后边还有菜单,我也用不上,也去掉吧

// 菜单分两部分,菜单按钮和菜单项
// 菜单按钮直接替换掉,菜单项分多行需要用正则表达式
$output = str_replace("<div class=\"ui-menu-trigger js-menubtn-top\"></div>", "<!-- 替换菜单按钮 -->", $output);
$output = preg_replace("/<div  class=\"ui-cateandsearch js-category-search[\s\S]*?<\/div><br \/>/", "<!-- 替换菜单项 --><br />", $output);

菜单再网上还有一个主页按钮,地址是人家的,也替换一下

// 替换主页链接
$output = str_replace("<a href=\"http://www.yangguiweihuo.com\" class=\"ui-gohomepage\"></a>", "<!-- 替换主页链接 -->\n<a href='./' class='ui-gohomepage'></a>", $output);

页面修整告一段落,下边就是改小说内容的链接和翻页链接了,先把最下边的翻页链接http://www.yangguiweihuo.com/page/2?am_force_theme_layout=mobile 改为我们自己的 home.php

// 替换翻页链接为本页面,用到正则表达式
$output = preg_replace("/http:\/\/www.yangguiweihuo.com\/page\//", "./home.php?page=", $output);
// 去掉多余的参数
$output = str_replace("?am_force_theme_layout=mobile", "", $output);
// 替换上一页和第一页链接
$output = str_replace("<a href='http://www.yangguiweihuo.com/' class=", "<a href='./' class=", $output);

上面把翻页替换为 home.php 了,那么 home.php 还要再修改一下以接收参数

if (!isset($_GET["page"])) {
    $page = "";
} else {
    $page = "page/" . $_GET["page"];    
}

$param = "?am_force_theme_layout=mobile";
$url = "http://www.yangguiweihuo.com/" .$page . $param;

还没完事。。。。。主页中的文章链接也要重定向到 article.php 里边去

// 替换文章链接到自己的article.php里边
// 直接替换即可
$output = str_replace("<a href=\"http://www.yangguiweihuo.com/", "<a href=\"./article.php?id=", $output);

至此,小说首页分析和过滤就结束了,下面开始搞文章正文内容

article.php

和 home.php 的流程一样,首先是获取文章内容

<?php
    if (!isset($_GET["id"])) {
        header ('location: ./');
    } else {
        $id = $_GET["id"];    
    }

    $param = "?am_force_theme_layout=mobile";
    $url = "http://yangguiweihuo.com/" . $id . $param;
    $output = file_get_contents($url);

    echo $output;
?>

测试文章显示没问题后,点右键选 查看源文件,看看有没有广告之类的东西吧

呵呵,好像和主页是一样的,那我就先粘为敬了(哈哈哈)

恩。。。。有两个不同的地方,之前过滤菜单的时候把它上一层也过滤掉了,但是在文章阅读页面有几个控制按钮需要保留,所以替换菜单项那里需要改一下

// 菜单分两部分,菜单按钮和菜单项
// 菜单按钮直接替换掉,菜单项分多行需要用正则表达式
$output = str_replace("<div class=\"ui-menu-trigger js-menubtn-top\"></div>", "<!-- 替换菜单按钮 -->", $output);
$output = preg_replace("/<menu  class=\"ui-categorys js-category-panel js-hidden[\s\S]*?<\/menu>/", "<!-- 替换菜单项 -->", $output);

还有一个地方,文章阅读页面没有翻页功能,所以替换翻页那部分也不要粘了

再来看看还有什么不一样的地方吧

恩,最显眼的也就是这些乱78遭的东西了,一个一个去掉吧

// 去除底部文字广告
// 多行文字要用正则表达式
$output = preg_replace("/<div style=\"color:red[\s\S]*?<\/div>/", "<!-- 替换文字广告 -->", $output);

// 去除畅言评论模块代码
$output = str_replace("<a name=\"comments\"></a>", "", $output);
$output = preg_replace("/<div id=\"SOHUCS[\s\S]*?<\/div>/", "<!-- 替换畅言评论 -->", $output);
$output = preg_replace("/<script>\(function\(\)[\s\S]*?<\/script>/", "<!-- 替换畅言评论代码 -->", $output);
$output = preg_replace("/<div id=\"ds-ssr[\s\S]*?<\/div>/", "<!-- 替换畅言评论列表 -->", $output);

// 去除点赞按钮
// 多行代码块要用正则表达式
$output = preg_replace("/<div align=\"center[\s\S]*?<\/div><\/div>/", "<!-- 替换点赞按钮 -->", $output);

// 去除点赞代码
$output = str_replace("<script id=\"bdlike_shell\"></script>", "", $output);
$output = preg_replace("/<script>[\s\S]*?<\/script>/", "<!-- 替换点赞代码 -->", $output);

盗版完成

到这一步,过滤工作算是全部完成了,效果如下


最后只要把所有 php 文件上传到虚拟主机就可以了,盗版工作到此结束

程序下载

发表评论

电子邮件地址不会被公开。 必填项已用*标注