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&amp;&amp;mysql)二
Oct 09 PHP
php 读取文件乱码问题
Feb 20 PHP
PHP+ACCESS 文章管理程序代码
Jun 21 PHP
使用php shell命令合并图片的代码
Jun 23 PHP
探讨如何在PHP开启gzip页面压缩实例
Jun 09 PHP
php实现天干地支计算器示例
Mar 14 PHP
yii操作cookie实例简介
Jul 09 PHP
编写PHP脚本过滤用户上传的图片
Jul 03 PHP
PHP页面跳转操作实例分析(header方法)
Sep 28 PHP
Centos 6.5下PHP 5.3安装ffmpeg扩展的步骤详解
Mar 02 PHP
php-msf源码详解
Dec 25 PHP
laravel 5.3 单用户登录简单实现方法
Oct 14 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
打造计数器DIY三步曲(下)
2006/10/09 PHP
PHP 根据IP地址控制访问的代码
2010/04/22 PHP
PHP执行linux系统命令的常用函数使用说明
2010/04/27 PHP
PHP取整数函数常用的四种方法小结
2012/07/05 PHP
ThinkPHP中redirect用法分析
2014/12/05 PHP
js跨域和ajax 跨域问题的实现思路
2009/09/05 Javascript
分享一个自定义的console类 让你不再纠结JS中的调试代码的兼容
2012/04/20 Javascript
javascript实现原生ajax的几种方法介绍
2013/09/21 Javascript
js写的方法实现上传图片之后查看大图
2014/03/05 Javascript
使用jQuery不判断浏览器高度解决iframe自适应高度问题
2014/12/16 Javascript
JavaScript中用toString()方法返回时间为字符串
2015/06/12 Javascript
Javascript简单改变表单元素背景的方法
2015/07/15 Javascript
JS常见疑难点分析之match,charAt,charCodeAt,map,search用法分析
2016/12/25 Javascript
js实现消息滚动效果
2017/01/18 Javascript
JS复制对应id的内容到粘贴板(Ctrl+C效果)
2017/01/23 Javascript
除Console.log()外更多的Javascript调试命令
2018/01/24 Javascript
karma+webpack搭建vue单元测试环境的方法示例
2018/05/24 Javascript
浅谈Vue2.4.0 $attrs与inheritAttrs的具体使用
2020/03/08 Javascript
python实现向ppt文件里插入新幻灯片页面的方法
2015/04/28 Python
django+js+ajax实现刷新页面的方法
2017/05/22 Python
Python2实现的LED大数字显示效果示例
2017/09/04 Python
Python 查看文件的读写权限方法
2018/01/23 Python
python数据封装json格式数据
2018/03/04 Python
Python爬虫文件下载图文教程
2018/12/23 Python
python 读取修改pcap包的例子
2019/07/23 Python
flask/django 动态查询表结构相同表名不同数据的Model实现方法
2019/08/29 Python
Django 创建后台,配置sqlite3教程
2019/11/18 Python
Python DataFrame使用drop_duplicates()函数去重(保留重复值,取重复值)
2020/07/20 Python
解决pycharm修改代码后第一次运行不生效的问题
2021/02/06 Python
英国最大的奢侈珠宝和手表网站:C W Sellors
2017/02/10 全球购物
Muziker英国:中欧最大的音乐家商店
2020/02/05 全球购物
求职简历的自我评价
2014/01/31 职场文书
音乐教学反思
2014/02/02 职场文书
大学生作弊检讨书
2014/02/19 职场文书
2014年军人思想汇报范文
2014/10/12 职场文书
微信早安问候语
2015/11/10 职场文书