PHP 采集程序原理分析篇


Posted in PHP onMarch 05, 2010

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

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

有列表页了,第一步先打开它,把它的内容纳入到我们的程序中来。一般用fopen或是file_get_contents这两个函数,我们这里用fopen作例子。怎么打开它呢?很简单:$source=fopen("https://3water.com/article/11/index.htm",'r');实际上已经把内容纳入到我们的程序中来了。注意得到的$source是一个资源,不是可处理的文本,所以再用函数fread将内容读到一个变量中,这次就是真正的可编辑的文本了。例子:
$content=fread($source,99999);后面的数字表示字节数,填个大的就行。你用file_put_contents将$content写入到一个文本文件,可以看出里面的内容其实就是网页的源码。得到了网页的源码,我们就要分析里面的文章链接地址,这里要用到正则表达式了,[推荐正则表达式教程(https://3water.com/article/7/all/545.1.htm)]。通过查看源代码,我们可以看到里面文章的链接地址全是这个样子<div class="in_arttitle"><a href="https://3water.com/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 相关文章推荐
PHP中str_replace函数使用小结
Oct 11 PHP
ajax+php打造进度条代码[readyState各状态说明]
Apr 12 PHP
windows下开发并编译PHP扩展的方法
Mar 18 PHP
php中利用post传递字符串重定向的实现代码
Apr 21 PHP
php定时计划任务的实现方法详解
Jun 06 PHP
php cli换行示例
Apr 22 PHP
php中替换字符串中的空格为逗号','的方法
Jun 09 PHP
ThinkPHP中的create方法与自动令牌验证实例教程
Aug 22 PHP
PHP 9 大缓存技术总结
Sep 17 PHP
PHP中PDO连接数据库中各种DNS设置方法小结
May 13 PHP
PHP实现一个按钮点击上传多个图片操作示例
Jan 23 PHP
HTTP头隐藏PHP版本号实现过程解析
Dec 09 PHP
PHP 一个页面执行时间类代码
Mar 05 #PHP
一步一步学习PHP(8) php 数组
Mar 05 #PHP
一步一步学习PHP(7) php 字符串相关应用
Mar 05 #PHP
PHP 创建文件(文件夹)以及目录操作代码
Mar 04 #PHP
php &amp;&amp; 逻辑与运算符使用说明
Mar 04 #PHP
PHP MVC模式在网站架构中的实现分析
Mar 04 #PHP
通用PHP动态生成静态HTML网页的代码
Mar 04 #PHP
You might like
某大型网络公司应聘时的笔试题目附答案
2008/03/27 PHP
PHP直接修改表内容DataGrid功能实现代码
2015/09/24 PHP
PHP框架Laravel中实现supervisor执行异步进程的方法
2017/06/07 PHP
JS分割字符串并放入数组的函数
2011/07/04 Javascript
jQuery:节点(插入,复制,替换,删除)操作
2013/03/04 Javascript
js 3秒后跳转页面的实现代码
2014/03/10 Javascript
Javascript遍历table中的元素示例代码
2014/07/08 Javascript
js+html5绘制图片到canvas的方法
2015/06/05 Javascript
jQuery+CSS3实现3D立方体旋转效果
2015/11/10 Javascript
jquery利用拖拽方式在图片上添加热链接
2015/11/24 Javascript
基于JavaScript代码实现pc与手机之间的跳转
2015/12/23 Javascript
JavaScript中iframe实现局部刷新的几种方法汇总
2016/01/06 Javascript
JS中多步骤多分步的StepJump组件实例详解
2016/04/01 Javascript
IntelliJ IDEA 安装vue开发插件的方法
2017/11/21 Javascript
JS实现去除数组中重复json的方法示例
2017/12/21 Javascript
Vue的事件响应式进度条组件实例详解
2018/02/04 Javascript
vue全局组件与局部组件使用方法详解
2018/03/29 Javascript
JavaScript实现获取两个排序数组的中位数算法示例
2019/02/26 Javascript
vue项目创建并引入饿了么elementUI组件的步骤
2019/04/11 Javascript
[01:24:34]2014 DOTA2华西杯精英邀请赛5 24 DK VS LGD
2014/05/25 DOTA
Python程序中用csv模块来操作csv文件的基本使用教程
2016/03/03 Python
python安装PIL模块时Unable to find vcvarsall.bat错误的解决方法
2016/09/19 Python
Python线程同步的实现代码
2018/10/03 Python
Numpy一维线性插值函数的用法
2020/04/22 Python
浅谈numpy中函数resize与reshape,ravel与flatten的区别
2020/06/18 Python
Win10下用Anaconda安装TensorFlow(图文教程)
2020/06/18 Python
HTML5中5个简单实用的API(第二篇,含全屏、可见性、拍照、预加载、电池状态)
2014/05/07 HTML / CSS
新西兰廉价汽车租赁:Snap Rentals
2018/09/14 全球购物
企业总经理职责
2014/02/02 职场文书
电气自动化个人求职信范文
2014/02/03 职场文书
人力资源经理的岗位职责范本
2014/02/28 职场文书
运动会跳远广播稿5篇
2014/09/17 职场文书
2016年大学生社区服务活动总结
2016/04/06 职场文书
Python数据分析之pandas读取数据
2021/06/02 Python
MySQL慢查询优化解决问题
2022/03/17 MySQL
Spring Boot 的创建和运行示例代码详解
2022/07/23 Java/Android