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 相关文章推荐
不用数据库的多用户文件自由上传投票系统(3)
Oct 09 PHP
PHP学习笔记之数组篇
Jun 28 PHP
域名和cookie问题(域名后缀)
Oct 10 PHP
php反射类ReflectionClass用法分析
May 12 PHP
thinkPHP3.x常量整理(预定义常量/路径常量/系统常量)
May 20 PHP
详解配置 Apache 服务器支持 PHP 文件的解析
Feb 15 PHP
PHP获取当前日期及本周一是几月几号的方法
Mar 28 PHP
php出租房数据管理及搜索页面
May 23 PHP
PHP编程快速实现数组去重的方法详解
Jul 22 PHP
PHP观察者模式原理与简单实现方法示例
Aug 25 PHP
PHP读取文件,解决中文乱码UTF-8的方法分析
Jan 22 PHP
php 多进程编程父进程的阻塞与非阻塞实例分析
Feb 22 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
php实现rc4加密算法代码
2012/04/25 PHP
Ubuntu下安装PHP的mongodb扩展操作命令
2015/07/04 PHP
php数组生成html下拉列表的方法
2015/07/20 PHP
CentOS下搭建PHP环境与WordPress博客程序的全流程总结
2016/05/07 PHP
PHP中让json_encode不自动转义斜杠“/”的方法
2017/02/28 PHP
php设计模式之职责链模式实例分析【星际争霸游戏案例】
2020/03/27 PHP
js滚动条多种样式,推荐
2007/02/05 Javascript
jQuery选择头像并实时显示的代码
2010/06/27 Javascript
探索Emberjs制作一个简单的Todo应用
2012/11/07 Javascript
jquery中JSON的解析方式
2015/03/16 Javascript
使用JavaScript刷新网页的方法
2015/06/04 Javascript
Javascript基础学习笔记(菜鸟必看篇)
2016/07/22 Javascript
KnockoutJS 3.X API 第四章之表单value绑定
2016/10/10 Javascript
jquery  实现轮播图详解及实例代码
2016/10/12 Javascript
用jQuery的AJax实现异步访问、异步加载
2016/11/02 Javascript
js实现文字选中分享功能
2017/01/25 Javascript
footer定位页面底部(代码分享)
2017/03/07 Javascript
AngularJS双向绑定和依赖反转实例详解
2017/04/15 Javascript
详解nodejs express下使用redis管理session
2017/04/24 NodeJs
jQuery Ajax使用FormData上传文件和其他数据后端web.py获取
2017/06/11 jQuery
js轮播图的插件化封装详解
2017/07/17 Javascript
Angular4.0中引入laydate.js日期插件的方法教程
2017/12/25 Javascript
Django+Vue跨域环境配置详解
2018/07/06 Javascript
基于Vue-Cli 打包自动生成/抽离相关配置文件的实现方法
2018/12/09 Javascript
用python代码做configure文件
2014/07/20 Python
python爬虫入门教程--快速理解HTTP协议(一)
2017/05/25 Python
tensorflow 获取所有variable或tensor的name示例
2020/01/04 Python
python基本算法之实现归并排序(Merge sort)
2020/09/01 Python
python pip如何手动安装二进制包
2020/09/30 Python
前端实现弹幕效果的方法总结(包含css3和canvas的实现方式)
2018/07/12 HTML / CSS
荷兰鞋子在线:Nelson Schoenen
2017/12/25 全球购物
安全事故检讨书
2014/01/18 职场文书
计算机专业毕业生自荐信范文
2014/03/06 职场文书
师德师风个人反思
2014/04/28 职场文书
大学奖学金获奖感言
2014/08/15 职场文书
《作风建设永远在路上》心得体会
2016/01/21 职场文书