php用正则表达抓取网页中文章(用前几天来做采集器主要用到两个函数的*敏*感*词*法)

优采云 发布时间: 2021-10-27 16:27

  php用正则表达抓取网页中文章(用前几天来做采集器主要用到两个函数的*敏*感*词*法)

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

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

  用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]的内容就是我们想要的title(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代码如下:

  复制代码代码如下:

  functioncut($string,$start,$end){

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

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

  $start="html/book/";

  $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=">";

  $趋向

  ="

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线