内容采集器(前几天做了个小说连载的程序,主要是用来抓取别人网页内容的)

优采云 发布时间: 2022-01-09 03:13

  内容采集器(前几天做了个小说连载的程序,主要是用来抓取别人网页内容的)

  采集器,通常称为小偷程序,主要用于抓取别人网页的内容。关于采集器的制作,其实并不难。就是远程打开网页为采集,然后用正则表达式匹配需要的内容。只要你有一点基本的正则表达式,你就可以做到。拿出你自己的 采集器。

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

  用php做采集器主要用到两个函数:file_get_contents()和preg_match_all()。前者是远程读取网页内容,但只能在php5以上版本使用。后者是常规功能。用于提取所需的内容。

  下面逐步介绍功能实现。

  因为是采集小说,首先要提取书名、作者、流派,其他信息可以根据需要提取。

  这里是《回归明朝当太子》的目标,首先打开参考书目页面,链接:

  再打开几本书,你会发现书名的基本格式是:ISBN/Index.aspx,所以我们可以做一个起始页,定义一个,用它输入需要为采集的ISBN @>,然后我们可以通过 $_POST ['number'] 这种格式来接收需要采集的书号。收到书号后,接下来就是构建书目页面:$url=$source gaodai#ma#com 搞@@code~&code network_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。之前已经获得了书号。这里的关键是找到分类号。分类号可以在之前的参考书目页面上找到。提取分类号:下一步是取章节的内容。取章节内容,首先要找到每一章节的地址,然后远程打开章节,使用正则取出内容,存入库或者直接生成html静态文件。这是章节列表的地址: 可以看到这个和参考书目页面一样,可以定期找到:分类号/书号/List.shtm。之前已经获得了书号。这里的关键是找到分类号。分类号可以在之前的参考书目页面上找到。提取分类号:下一步是取章节的内容。取章节内容,首先要找到每一章节的地址,然后远程打开章节,使用正则取出内容,存入库或者直接生成html静态文件。这是章节列表的地址: 可以看到这个和参考书目页面一样,可以定期找到:分类号/书号/List.shtm。之前已经获得了书号。这里的关键是找到分类号。分类号可以在之前的参考书目页面上找到。提取分类号:存入库或直接生成html静态文件。这是章节列表的地址: 可以看到这个和参考书目页面一样,可以定期找到:分类号/书号/List.shtm。之前已经获得了书号。这里的关键是找到分类号。分类号可以在之前的参考书目页面上找到。提取分类号:存入库或直接生成html静态文件。这是章节列表的地址: 可以看到这个和参考书目页面一样,可以定期找到:分类号/书号/List.shtm。之前已经获得了书号。这里的关键是找到分类号。分类号可以在之前的参考书目页面上找到。提取分类号:

  preg_match_all("/Html\/Book\/[0-9]{1,}\/[0-9]{1,}\/List\.shtm/is", $contents, $typeid); 这还不够,还需要一个 cut 函数:

  PHP代码如下:

  代码显示如下:

  函数切割($string,$start,$end){

  $message=explode($start,$string);

  $message=explode($end,$message[1]);return$message[0];} 其中$string是要删除的内容,$start是开头,$end是结尾。取出分类号:

  $start="HTML/书籍/";

  $结束

  = "列表.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=”>”;

  $倾向于

  = "

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线