PHP 采集程序原理分析篇

 更新时间:2010年03月05日 19:19:21   作者:  
由于需要,要写一个简单的PHP采集程序,照例是到网上找了一堆教程,然后照猫画虎,可是发现网上的教程全是似是而非,没有一个真正能用的。

苦想了几天,终于弄明白了里面的道理。在这里写出来,请高手指正。
采集程序的思路很简单,无非就是先打一个页面,一般都是列表页,取得里面全部链接的地址,然后打开逐条链接,寻找我们感兴趣的东西,如果找到,就把它入库或别的处理。下面以一个很简单的例子来说说。

首先确定一个采集页,一般就是列表面了。这里目标是:https://www.jb51.net/article/11/index.htm。这是一个列表页,我们的目的就是采集这个列表页上全部的文章。

有列表页了,第一步先打开它,把它的内容纳入到我们的程序中来。一般用fopen或是file_get_contents这两个函数,我们这里用fopen作例子。怎么打开它呢?很简单:$source=fopen("https://www.jb51.net/article/11/index.htm",'r');实际上已经把内容纳入到我们的程序中来了。注意得到的$source是一个资源,不是可处理的文本,所以再用函数fread将内容读到一个变量中,这次就是真正的可编辑的文本了。例子:
$content=fread($source,99999);后面的数字表示字节数,填个大的就行。你用file_put_contents将$content写入到一个文本文件,可以看出里面的内容其实就是网页的源码。得到了网页的源码,我们就要分析里面的文章链接地址,这里要用到正则表达式了,[推荐正则表达式教程(https://www.jb51.net/article/7/all/545.1.htm)]。通过查看源代码,我们可以看到里面文章的链接地址全是这个样子<div class="in_arttitle"><a href="https://www.jb51.net/article/10/all/273.1.htm">  将数据库连接代码封装在函数里,在需要读取时调用..</a>
我们就可以写正则表达式了。$count=preg_match_all("/<div class=\"in_arttitle\"><a\shref=\"(.+?)\">(.+?)<\/a>/",$content,$art_list);
其中数组$art_list[1][$s]里面包含的就是某个文章的链接地址。而$art_list[2][$s]包含的就是某一文章的标题。到了这一步就可以算成功了一半了。
接着用for循环依次打每个链接,然后像取得标题一样的方法取得内容即可。以上这些和我在网上找的教程都差不多,但是到了这个for循环网上的教程可就差劲,还没找到一篇可以说清这个事的文章,刚开始我是用js来帮助循环的,还是用实例说吧,刚开始我是这样做的:
for($i=0;$i<20;4i++ {
中间就是采集内容的部分了,省略了
采集了一页,肯定要采集再一页啊
可是再用fopen打开链接时就不行了。请求失败什么的,用js也不行,最后才知道要用这句echo "<META HTTP-EQUIV=REFRESH CONTENT='0;URL=aa.php?id=1'>";其中aa.php就是我们的程序的文件名, id后面的数字就可以帮助我们实现循环,采集多个页面。这就是能真正循环起来的关键
}
脑子有点难受,写得有点乱,将就着看吧,在高手看来这可能没什么大不了的,可是对于我等菜鸟来说,实在是很有帮助。

相关文章

  • php使用curl实现简单模拟提交表单功能

    php使用curl实现简单模拟提交表单功能

    这篇文章主要为大家详细介绍了php使用curl实现简单模拟提交表单功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • php实现映射操作实例详解

    php实现映射操作实例详解

    这篇文章主要介绍了php实现映射操作,结合实例形式详细分析了PHP映射概念、原理及使用链表与二叉树实现映射的相关操作技巧,需要的朋友可以参考下
    2019-10-10
  • PHP实现指定字段的多维数组排序函数分享

    PHP实现指定字段的多维数组排序函数分享

    这篇文章主要介绍了PHP实现指定字段的多维数组排序函数分享,本文分享了一段PHP指定字段的多维数组排序方法的代码,这段代码可实现根据field字段对数组进行排序,需要的朋友可以参考下
    2015-03-03
  • PHP面向对象程序设计继承用法简单示例

    PHP面向对象程序设计继承用法简单示例

    这篇文章主要介绍了PHP面向对象程序设计继承用法,结合具体实例形式分析了php面向对象程序设计中继承的相关概念、原理、使用技巧与相关操作注意事项,需要的朋友可以参考下
    2018-12-12
  • PHP获取表单数据与HTML嵌入PHP脚本的实现

    PHP获取表单数据与HTML嵌入PHP脚本的实现

    下面小编就为大家带来一篇PHP获取表单数据与HTML嵌入PHP脚本的实现。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02
  • Windows 下的 PHP-PEAR 安装方法

    Windows 下的 PHP-PEAR 安装方法

    发现自己的 Windows 下的 PHP 环境没有安装 pear ,于是从网上找到了这个安装文件:go-pear.php
    2010-11-11
  • PHP基于ICU扩展intl快速实现汉字转拼音及按拼音首字母分组排序的方法

    PHP基于ICU扩展intl快速实现汉字转拼音及按拼音首字母分组排序的方法

    这篇文章主要介绍了PHP基于ICU扩展intl快速实现汉字转拼音及按拼音首字母分组排序的方法,结合实例形式分析了ICU扩展intl的实现方法与拼音转换、排序等相关操作技巧,需要的朋友可以参考下
    2017-05-05
  • PHP实现浏览器格式化显示XML的方法示例

    PHP实现浏览器格式化显示XML的方法示例

    这篇文章主要介绍了PHP实现浏览器格式化显示XML的方法,涉及php针对xml节点的创建、添加、格式化显示等相关操作技巧与注意事项,需要的朋友可以参考下
    2019-01-01
  • PHP实现简单的协程任务调度demo示例

    PHP实现简单的协程任务调度demo示例

    这篇文章主要介绍了PHP实现简单的协程任务调度demo,结合实例形式详细分析了PHP基于协程的任务调度基本原理、定义及使用技巧,需要的朋友可以参考下
    2020-02-02
  • php实现的Cookies操作类实例

    php实现的Cookies操作类实例

    这篇文章主要介绍了php实现的Cookies操作类及其用法实例,包括了常见了保存、读取、更新及清除cookie等操作,在需要进行cookie操作时非常具有实用价值,需要的朋友可以参考下
    2014-09-09

最新评论