网页文章采集工具(前几天做了个小说连载的程序,主要是用来抓取别人网页内容的)
优采云 发布时间: 2021-12-26 03:11网页文章采集工具(前几天做了个小说连载的程序,主要是用来抓取别人网页内容的)
采集
器,通常称为小偷程序,主要用于抓取他人网页的内容。关于采集
器的制作,其实并不难。就是远程打开要采集的网页,然后用正则表达式匹配需要的内容。只要你有一点正则表达式的基础,你就可以制作自己的采集
器。.
前几天做了一个小说连载程序。因为怕更新麻烦,顺便写了个采集器
。功能比较简单,不能自定义规则,但是大概思路就在里面,自定义规则。你可以自己扩展。
php作为采集
器主要使用两个函数:file_get_contents()和preg_match_all()。第一个是远程阅读网页内容,但只能在php5以上版本使用。后者是一个常规函数,用来提取需要的内容。
下面我们一步一步的说一下函数的实现。
因为是小说的合集,首先要提取标题、作者、流派,其他信息可以根据需要提取。
这里是“回明为主”的目标。首先打开参考书目页面并链接:
再打开几本书,你会发现书名的基本格式是:书号/Index.aspx,所以我们可以制作一个起始页,定义一个输入需要采集
的书号,然后我们可以使用 $_POST['number' ] 这种格式来接收需要采集
的书号。收到书号后,接下来要做的就是构造书目页面:$url=$_POST['number']/Index.aspx,当然这里举个例子,主要是为了方便说明,就是最好在实际制作时检查一下。_POST['number'] 的合法性。
构造好URL后,就可以开始采集
图书信息了。使用file_get_contents()函数打开书目页面:$content=file_get_contents($url),这样就可以读取书目页面的内容了。下一步是匹配书名、作者和类型。这里以书为例,其他都一样。打开书目页面,查看源文件,找到《回明为主》,这是要提取的书名。提取书名的正则表达式:/(.*?)/is,使用preg_match_all()函数提取书名:preg_match_all("/(.*?)/is",$contents, $title); 像这样 $title [0][0] 的内容就是我们想要的标题(preg_match_all 函数的用法可以百度查,此处不再详述)。取出书籍信息后,下一步就是取出章节内容。取章节内容,首先要找到每个章节的地址,然后远程打开章节,使用正则规则将内容取出,存入库或者直接生成html静态文件。这是章节列表的地址: 可以看出这个和参考书目页面是一样的,可以定期找到:分类号/书号/List.shtm。ISBN已经拿到了。这里的关键是找到分类号。分类号可以在之前的参考书目页面上找到。提取分类号:取章节内容,首先要找到每个章节的地址,然后远程打开章节,使用正则规则将内容取出,存入库或者直接生成html静态文件。这是章节列表的地址: 可以看出这个和参考书目页面是一样的,可以定期找到:分类号/书号/List.shtm。ISBN已经拿到了。这里的关键是找到分类号。分类号可以在之前的参考书目页面上找到。提取分类号:取章节内容,首先要找到每个章节的地址,然后远程打开章节,使用正则规则将内容取出,存入库或者直接生成html静态文件。这是章节列表的地址: 可以看出这个和参考书目页面是一样的,可以定期找到:分类号/书号/List.shtm。ISBN已经拿到了。这里的关键是找到分类号。分类号可以在之前的参考书目页面上找到。提取分类号:这是章节列表的地址: 可以看出这个和参考书目页面是一样的,可以定期找到:分类号/书号/List.shtm。ISBN已经拿到了。这里的关键是找到分类号。分类号可以在之前的参考书目页面上找到。提取分类号:这是章节列表的地址: 可以看出这个和参考书目页面是一样的,可以定期找到:分类号/书号/List.shtm。ISBN已经拿到了。这里的关键是找到分类号。分类号可以在之前的参考书目页面上找到。提取分类号:
preg_match_all("/Html/Book/[0-9]{1,}/[0-9]{1,}/List.shtm/is",$contents,$typeid); 这还不够,我们还需要一个cut函数:
PHP代码如下:
函数剪切($string,$start,$end){
$消息=爆炸($开始,$字符串);
$message = expand($end,$message[1]); return $message[0];} 其中 $string 是要剪切的内容,$start 是开头,$end 是结尾。取出分类号:
$start = "HTML/书/";
$end
= "列表.shtm";
$typeid = cut($typeid[0][0],$start,$end);
$typeid =explode("/",$typeid);[/php]
这样,$typeid[0] 就是我们要找的分类号。下一步是构造章节列表的地址:$chapterurl = $typeid[0]/$_POST['number']/List.shtm。有了这个,你可以找到每章的地址。方法如下:
$ustart = """;
$uend
= """;
//t代表title的缩写
$tstart = ">";
$趋向
=“