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 删除一个数组中的某个值.兼容多维数组!
Feb 18 PHP
php下拉选项的批量操作的实现代码
Oct 14 PHP
学习php开源项目的源码指南
Dec 21 PHP
举例详解PHP脚本的测试方法
Aug 05 PHP
Thinkphp5.0自动生成模块及目录的方法详解
Apr 17 PHP
PHP PDOStatement::errorInfo讲解
Jan 31 PHP
PHP PDOStatement::fetchAll讲解
Jan 31 PHP
Laravel框架搜索分页功能示例
Feb 01 PHP
详解PHP神奇又有用的Trait
Mar 25 PHP
laravel框架上传图片实现实时预览功能
Oct 14 PHP
TP5框架请求响应参数实例分析
Oct 17 PHP
Yii框架组件的事件机制原理与用法分析
Apr 07 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 5.2.14+fpm+memcached(具体操作详解)
2013/06/18 PHP
PHP图片裁剪函数(保持图像不变形)
2014/05/04 PHP
php结合正则批量抓取网页中邮箱地址
2015/05/19 PHP
php实现简单的MVC框架实例
2015/09/23 PHP
为调试JavaScript添加输出窗口的代码
2010/02/07 Javascript
jquery滚动到顶部底部代码
2015/04/20 Javascript
javascript父子页面通讯实例详解
2015/07/17 Javascript
详解JavaScript语言的基本语法要求
2015/11/20 Javascript
jQuery纵向导航菜单效果实现方法
2016/12/19 Javascript
jQuery点击头像上传并预览图片
2017/02/23 Javascript
Bootstrap页面标题Page Header的实现方法
2017/03/22 Javascript
微信小程序中使用javascript 回调函数
2017/05/11 Javascript
微信小程序页面开发注意事项整理
2017/05/18 Javascript
详解微信小程序调用支付接口支付
2019/04/28 Javascript
JS实现利用闭包判断Dom元素和滚动条的方向示例
2019/08/26 Javascript
Vue 中使用 typescript的方法详解
2020/02/17 Javascript
jQuery实现高度灵活的表单验证功能示例【无UI】
2020/04/30 jQuery
python socket网络编程之粘包问题详解
2018/04/28 Python
Django渲染Markdown文章目录的方法示例
2019/01/02 Python
Django+zTree构建组织架构树的方法
2019/08/21 Python
python生成器用法实例详解
2019/11/22 Python
Python版中国省市经纬度
2020/02/11 Python
使用Python获取当前工作目录和执行命令的位置
2020/03/09 Python
解析pip安装第三方库但PyCharm中却无法识别的问题及PyCharm安装第三方库的方法教程
2020/03/10 Python
判断Threading.start新线程是否执行完毕的实例
2020/05/02 Python
python代码如何注释
2020/06/01 Python
python中os.remove()用法及注意事项
2021/01/31 Python
LTD Commodities:礼品,独特发现,家居装饰,家用器皿
2017/08/11 全球购物
英国家电购物网站:Sonic Direct
2019/03/26 全球购物
编程用JAVA解析XML的方式
2013/07/07 面试题
十佳大学生村官事迹
2014/01/09 职场文书
《果园机器人》教学反思
2014/04/13 职场文书
班级团队活动方案
2014/08/14 职场文书
违纪检讨书
2015/01/27 职场文书
社区宣传标语口号
2015/12/26 职场文书
24年收藏2000多部退役军用电台
2022/02/18 无线电