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中常用编辑器推荐
Jan 02 PHP
PHP连接MongoDB示例代码
Sep 06 PHP
关于PHP堆栈与列队的学习
Jun 21 PHP
php文件上传的例子及参数详解
Dec 12 PHP
PHP 设计模式系列之 specification规格模式
Jan 10 PHP
php通过两层过滤获取留言内容的方法
Jul 11 PHP
Yii+upload实现AJAX上传图片的方法
Jul 13 PHP
PHP页面输出时js设置input框的选中值
Sep 30 PHP
ThinkPHP 3.2.2实现事务操作的方法
May 05 PHP
ThinkPHP实现转换数据库查询结果数据到对应类型的方法
Nov 16 PHP
php把字符串指定字符分割成数组的方法
Mar 12 PHP
PHP去除空数组且数组键名重置的讲解
Feb 28 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缓存类实例
2014/07/18 PHP
Laravel配置全局公共函数的方法步骤
2019/05/09 PHP
laravel请求参数校验方法
2019/10/10 PHP
JSON 学习之JSON in JavaScript详细使用说明
2010/02/23 Javascript
jQuery插件开发的两种方法及$.fn.extend的详解
2014/01/16 Javascript
点击标签切换和自动切换DIV选项卡
2014/08/10 Javascript
js由下向上不断上升冒气泡效果实例
2015/05/07 Javascript
JavaScript实现点击单选按钮改变输入框中文本域内容的方法
2015/08/12 Javascript
js实现获取div坐标的方法
2015/11/16 Javascript
jquery编写Tab选项卡滚动导航切换特效
2020/07/17 Javascript
一个非常好用的文字滚动的案例,鼠标悬浮可暂停[两种方案任选]
2016/12/01 Javascript
利用js+css+html实现固定table的列头不动
2016/12/08 Javascript
vue2.0实战之基础入门(1)
2017/03/27 Javascript
JavaScript通过filereader接口读取文件
2017/05/10 Javascript
JavaScript实现一个空中避难的小游戏
2017/06/06 Javascript
JS HTML图片显示Canvas 压缩功能
2017/07/21 Javascript
vue监听scroll的坑的解决方法
2017/09/07 Javascript
vue.js获得当前元素的文字信息方法
2018/03/09 Javascript
webpack4+react多页面架构的实现
2018/10/25 Javascript
Bootstrap Paginator+PageHelper实现分页效果
2018/12/29 Javascript
JS实现简单的抽奖转盘效果示例
2019/02/16 Javascript
vue中npm包全局安装和局部安装过程
2019/09/03 Javascript
Vue.js中使用Vuex实现组件数据共享案例
2020/07/31 Javascript
解决antd 表单设置默认值initialValue后验证失效的问题
2020/11/02 Javascript
Python基于PycURL实现POST的方法
2015/07/25 Python
tensorflow 加载部分变量的实例讲解
2018/07/27 Python
python 使用 requests 模块发送http请求 的方法
2018/12/09 Python
tensorflow没有output结点,存储成pb文件的例子
2020/01/04 Python
python实现对变位词的判断方法
2020/04/05 Python
纯CSS实现颜色渐变效果(包含环形渐变、线性渐变、彩虹效果等)
2014/05/07 HTML / CSS
详解HTML5中ol标签的用法
2015/09/08 HTML / CSS
世界领先的高品质定制产品平台:Zazzle
2017/07/23 全球购物
三星印度官网:Samsung印度
2019/08/03 全球购物
2014年幼儿园国庆主题活动方案
2014/09/16 职场文书
教师个人自我剖析材料
2014/09/29 职场文书
python使用glob检索文件的操作
2021/05/20 Python