php采集 纠正一下

因为须要,要写一个简单的PHP采集程序,照例是到网上找了一堆教程,而后照猫画虎,但是发现网上的教程全是似是而非,没有一个真正能用的。苦想了几天,终于弄明白了里面的道理。在这里写出来,请高手指正。php

采集程序的思路很简单,无非就是先打一个页面,通常都是列表页,取得里面所有连接的地址,而后打开逐条连接,寻找咱们感兴趣的东西,若是找到,就把它入库或别的处理。下面以一个很简单的例子来讲说。正则表达式

首先肯定一个采集页,通常就是列表面了。这里目标是:http://www.php100.com/article/11/index.htm。这是一个列表页,咱们的目的就是采集这个列表页上所有的文章。有列表页了,第一步先打开它,把它的内容归入到咱们的程序中来。通常用fopen或是file_get_contents这两个函数,咱们这里用fopen做例子。怎么打开它呢?很简单:$source=fopen("http://www.php100.com/article/11/index.htm",'r');实际上已经把内容归入到咱们的程序中来了。注意获得的$source是一个资源,不是可处理的文本,因此再用函数fread将内容读到一个变量中,此次就是真正的可编辑的文本了。例子:数据库

$content=fread($source,99999);后面的数字表示字节数,填个大的就行。你用file_put_contents将$content写入到一个文本文件,能够看出里面的内容其实就是网页的源码。获得了网页的源码,咱们就要分析里面的文章连接地址,这里要用到正则表达式了,[推荐正则表达式教程(http://www.php100.com/article/7/all/545.1.htm)]。经过查看源代码,咱们能够看到里面文章的连接地址全是这个样子<div class="in_arttitle"><a href="http://www.php100.com/article/10/all/273.1.htm">  将数据库链接代码封装在函数里,在须要读取时调用..</a>数组

咱们就能够写正则表达式了,这里正则表达式你们要注意了,如今网上有分享的过程到这步通常是执行不了的,由于正则表达式的问题,我也是尝试了不少次 出现错误后才意识到的,这里的正则应该这样写,外面是双引号的状况下里面的双引号须要用"\"和"<\/a>"须要转义处理:$count=preg_match_all("/<div class=\"in_arttitle\"><a href=\"(.*)\">(.*)<\/a>/iUs",$content,$art_list); 外面是单引号的状况:$count=preg_match_all('/<div class="in_arttitle"><a href="(.*)">(.*)<\/a>/iUs',$content,$art_list); 这里处理后的$art_list是一个二维数组,你们能够打印出来 加深理解ide

其中二维数组$art_list[1]里面包含的就是某个文章的连接地址。而$art_list[2]包含的就是某一文章的标题。到了这一步就能够算成功了一半了,这里已是二维数组下面你们能够用foreach循环出来想要的地址或标题。函数

例如:htm

foreach ( $art_list[1] as $key=>$val ){教程

           echo $val.'---'.$art_list[2][$key];资源

}get

到这里你们就能够看到本身想要的数据,而后再进行您须要的处理 入库或其余。

相关文章
相关标签/搜索