利用PHP制作简单的内容采集器

采集器,通常又叫小偷程序,主要是用来抓取别人网页内容的。关于采集器的制作,其实并不难,就是远程打开要采集的网页,然后用正则表达式将需要的内容匹配出来,只要稍微有点正则表达式的基础,都能做出自己的采集器来的。

前几天做了个小说连载的程序,因为怕更新麻烦,顺带就写了个采集器,采集八路中文网的,功能比较简单,不能自定义规则,不过大概思路都在里面了,自定义规则可以自己来扩展。

用PHP来做采集器主要用到两个函数:file_get_contents()和preg_match_all(),前一个是远程读取网页内容的,不过只在php5以上的版本才能用,后一个是正则函数,用来提取需要的内容的。

下面就一步一步来讲功能实现。

因为是采集小说,所以首先要将书名、作者、类型这三个提取出来,别的信息可根据需要提取。

这里以《回到明朝当王爷》为目标,先打开书目页,链接:http://www.86zw.com/Book/3727/Index.ASPx

多打开几本书会发现,书名的基本格式是:http://www.86zw.com/Book/书号/Index.aspx,于是我们可以做一个开始页,定义一个<input type=text name=number>,用来输入需要采集的书号,以后就可以通过$_POST[‘number’]这种格式来接收需要采集的书号了。接收到书号,下面要做的就是构造书目页:$url=http://www.86zw.com/Book/$_POST[‘number’]/Index.aspx,当然这里是举个例子,主要是为了讲解方便,实际制作的时候最好检查一下$_POST[‘number’]的合法性。

构造好URL以后就可以开始采集书籍信息了。使用file_get_contents() 函数打开书目页:$content=file_get_contents($url),这样就能将书目页的内容都读取出来了。接下来就是将书名、作者和类型等信息匹配出来了。这里就以书名为例,其他的都一样。 打开书目页,查看源文件,找到“<span class="booktitle">《回到明朝当王爷》</span>”,这就是要提取出来的书名了。提取书名的正则表达式:/<span class=\"newstitle\">(.*?)\<\/span>/is,使用preg_match_all()函数将书名取出:preg_match_all("/<span class=\"newstitle\">(.*?)\<\/span>/is",$contents,$title);这样$title[0][0]的内容就是我们要的标题了(preg_match_all函数的用法可以去百度查,这里就不详细说明了)。取出了书籍信息,接下来就是取章节内容了,要取章节内容,首先要做的就是找到每一章的地址,然后远程打开章节,用正则将内容取出来,入库或者直接生成html静态文件。这个是章节列表的地址:http://www.86zw.com/Html/Book/18/3727/List.shtm,可以看出这个和书目页一样,是有规律可寻的:http://www.86zw.com/Html/Book/分类号/书号/List.shtm。书号前面已经取得,这里的关键是找到分类号,分类号可以在前面的书目页找到,提取分类号:

preg_match_all("/Html\/Book\/[0-9]{1,}\/[0-9]{1,}\/List\.shtm/is",$contents,$typeid);

这样还不够,还需要一个切取函数:

[复制PHP代码] [ - ]PHP代码如下:

function cut($string,$start,$end){
$message = explode($start,$string);
$message = explode($end,$message[1]); return $message[0];}其中$string为要被切取的内容,$start为开始的地方,$end为结束的地方。取出分类号:
$start = "Html/Book/";
$end
= "List.shtm";
$typeid = cut($typeid[0][0],$start,$end);
$typeid = explode("/",$typeid);[/php]

时间: 2024-10-01 02:29:18

利用PHP制作简单的内容采集器的相关文章

利用PHP制作简单的内容采集器的代码_php技巧

采集器,通常又叫小偷程序,主要是用来抓取别人网页内容的.关于采集器的制作,其实并不难,就是远程打开要采集的网页,然后用正则表达式将需要的内容匹配出来,只要稍微有点正则表达式的基础,都能做出自己的采集器来的.  前几天做了个小说连载的程序,因为怕更新麻烦,顺带就写了个采集器,采集八路中文网的,功能比较简单,不能自定义规则,不过大概思路都在里面了,自定义规则可以自己来扩展.  用php来做采集器主要用到两个函数:file_get_contents()和preg_match_all(),前一个是远程读

利用PHP制作简单的内容采集器的原理分析_php技巧

前几天做了个小说连载的程序,因为怕更新麻烦,顺带就写了个采集器,采集八路中文网的,功能比较简单,不能自定义规则,不过大概思路都在里面了,自定义规则可以自己来扩展. 用php来做采集器主要用到两个函数:file_get_contents()和preg_match_all(),前一个是远程读取网页内容的,不过只在php5以上的版本才能用,后一个是正则函数,用来提取需要的内容的. 下面就一步一步来讲功能实现. 因为是采集小说,所以首先要将书名.作者.类型这三个提取出来,别的信息可根据需要提取. 这里以

利用c#制作简单的留言板(1)

  留言板分三个模块:列出留言列表.显示详细内容.发表留言notepage.csnamespace notpage{using System;using System.Data.SQL ;using System.Data ;using System.Collections ; /// <summary>/// Summary description for notepage./// </summary> public class notepage{//私有变量 private i

利用Photoshop制作简单的水晶苹果壁纸教程

本教程介绍常见的水晶图形的制作方法.过程也比较简单,只需要按照光源方向设定高光和暗部区域即可.如果图形较为复杂,可以拆分来做,这样就容易很多. 最终效果   1.新建文档1280x1024像素,背景白色,新建图层填充黑色,添加图层样式.     2.新建图层,用钢笔画出苹果轮廓,填充黑色. 3.添加图层样式. 4.同样方法新建图层用钢笔画出叶子形状,填充黑色. 5.添加图层样式.   6.还是老办法画出黑色形状. 7.填充归零,添加图层样式. 8.同样方法,把填充归零,添加样式. 9.新建图层用

php利用fopen实现简单的网页采集程序

 代码如下 复制代码 /** * 根据URL采集网页内容 * * @param string $url 链接地址 * @return string */ private function fetchbyurl($url){ $handle = fopen($url, 'r'); $content = "; while (!feof($handle)){ $content .= fgets($handle, 10000); } return $content; //?$this->utf8_

PS利用滤镜制作简单的水墨字

来源:站酷 作者:Julien_z 前面有教程介绍过用画笔来制作水墨字,操作上繁琐一点,不过非常真实.用滤镜制作相对来说要快很多,只是层次感没有纯手工的强. 最终效果 1.新建大小适当的文档,背景可以加入一些纹理素材.然后输入所需文字,把文字图层复制一层,右键把文字栅格化图层或转换为智能对象. 2.执行:滤镜 > 模糊 > 高斯模糊,参数设置如下图. 3.执行:滤镜 > 扭曲 > 波浪,参数设置如下图. 4.如果是转换为智能对象的,青点击图层面板下方"添加图层蒙版&quo

利用烧鹅制作简单BadUSB,插谁谁怀孕

所用硬件设备为烧鹅,烧鹅是RadioWar基于Teensy++ 2.0 AT90USB1286芯片设计的USB Rubber Ducky类开发板. 使用veil编码meterpreter生成payload(经过编码的payload在杀软中仅能够存活几分钟),放到服务器上.插入烧鹅,模拟键盘输入,在cmd中下载payload,并执行.  Github:https://github.com/RadioWar/FireGoose 0x1 利用veil编码打造免杀的meterpreter  root@k

利用JAVASCRIPT制作简单动画

javascript 如果你需要改变动画播放速度, 比如每5秒换一张图片 改变setTimeout("imgturn('" +numb+ "')", 1000)中的1000为5000 <html> <head> <title></title> <script language="javascript"> <!-- file://请先准备几张JPG图片格式的,名字是demo1.jpg

利用&amp;#106avascript制作简单动画

如果你需要改变动画播放速度, 比如每5秒换一张图片 改变setTimeout("imgturn('" +numb+ "')", 1000)中的1000为5000 <html> <head> <title></title> <script language="javascript"> <!-- //请先准备几张JPG图片格式的,名字是demo1.jpg,demo2.jpg,demo3