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 GD 图像处理组件的常用函数总结
Apr 28 PHP
php ckeditor上传图片文件名乱码解决方法
Nov 15 PHP
主流PHP框架的优缺点对比分析
Dec 25 PHP
php随机获取金山词霸每日一句的方法
Jul 09 PHP
CodeIgniter分页类pagination使用方法示例
Mar 28 PHP
php+ajax注册实时验证功能
Jul 20 PHP
PHP判断是否是微信打开还是浏览器打开的方法
Feb 27 PHP
在Ubuntu 18.04上安装PHP 7.3 7.2和7.0的方法
Apr 09 PHP
Laravel关系模型指定条件查询方法
Oct 10 PHP
PHP全局使用Laravel辅助函数dd
Dec 26 PHP
浅谈php常用的7大框架的优缺点
Jul 20 PHP
微信小程序和php的登录实现
Apr 01 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下保存远程图片到本地的办法
2010/08/08 PHP
PHP保留两位小数并且四舍五入及不四舍五入的方法
2013/09/22 PHP
php构造函数与析构函数
2016/04/23 PHP
PHP中Socket连接及读写数据超时问题分析
2016/07/19 PHP
PHP使用new StdClass()创建空对象的方法分析
2017/06/06 PHP
在JavaScript中实现命名空间
2006/11/23 Javascript
Javascript中Eval函数的使用说明
2008/10/11 Javascript
jQuery获得IE版本不准确webbrowser的解决方法
2014/02/23 Javascript
基于jquery实现的图片在各种分辨率下未知的容器内上下左右居中
2014/05/11 Javascript
浅谈JavaScript数据类型及转换
2015/02/28 Javascript
js实现获取当前时间是本月第几周的方法
2015/08/11 Javascript
JQuery实现左右滚动菜单特效
2015/09/28 Javascript
jQuery前端开发35个小技巧
2016/05/24 Javascript
利用vue写todolist单页应用
2016/12/15 Javascript
微信小程序App生命周期详解
2018/01/31 Javascript
Js面试算法详解
2018/04/08 Javascript
vue之父子组件间通信实例讲解(props、$ref、$emit)
2018/05/22 Javascript
JavaScript字符串转数字的5种方法及遇到的坑
2018/07/16 Javascript
jQuery常见的遍历DOM操作详解
2018/09/05 jQuery
react native基于FlatList下拉刷新上拉加载实现代码示例
2018/09/30 Javascript
基于elementUI使用v-model实现经纬度输入的vue组件
2019/05/12 Javascript
vue项目前端错误收集之sentry教程详解
2019/05/27 Javascript
Python编程实现两个文件夹里文件的对比功能示例【包含内容的对比】
2017/06/20 Python
python根据文章标题内容自动生成摘要的实例
2019/02/21 Python
python实现简易学生信息管理系统
2020/04/05 Python
HTML5之SVG 2D入门10—滤镜的定义及使用
2013/01/30 HTML / CSS
h5网页水印SDK的实现代码示例
2019/02/19 HTML / CSS
美国滑雪板和装备购物网站:Skis.com
2018/12/20 全球购物
美国巧克力喷泉品牌:Sephra
2019/05/05 全球购物
试述DBMS的主要功能
2016/11/13 面试题
日语专业毕业生自荐信
2013/11/11 职场文书
技校毕业生的自我评价
2013/12/27 职场文书
网络信息安全承诺书
2014/03/26 职场文书
羽毛球社团活动总结
2014/06/27 职场文书
MySQL kill不掉线程的原因
2021/05/07 MySQL
SpringBoot生成License的实现示例
2021/06/16 Java/Android