




已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
用AJAX和PHP编写简单的蜘蛛程序02/21/2011 JAMES SHIH发表回复蜘蛛程序可以从网站上自动提取资料,从而极大地节省人力,所以现在蜘蛛程序现在用得非常多。不过一般的蜘蛛程序由于计算量比较大,通常用C#加上HTML分析库来做。而对于简单的任务,例如从成百上千页的列表中提取数据,那么用PHP来实现更简单易行。用PHP编写的蜘蛛程序还有一个好处,就是服务器能起到优质代理服务器的作用,因为是通过服务器抓取目标网站的。一般托管主机都拥有优秀的网络接入质量,这对抓取速度有很大帮助。如果你拥有一个主机,特别是国外主机的话,这个好处嘛你懂的。以一个从数百页的列表中提取出需要的数据的任务为例,这像是一个反过程,将网页上的列表还原成数据库表。程序主要有以下工作要做:1. 获得或生成URL2. 下载目标页面内容3. 分析页面、提取数据:4. 将提取到的数据写入数据库或文件我的思路是将这个蜘蛛程序的控制功能放在客户端,而具体执行任务的功能放在服务器端。由客户端的AJAX来监视和控制服务器端的运行。客户端的工作:1. 生成URL通过分析页面,或从提取到的页面中取得链接,可以确定下一页的URL。例如“/list.php?page=123”或“/list-123.html”。由JavaScript生成要提取的URL,并发送给服务器端。服务器端一次只负责处理一个页面。2. 存放和展示程序运行状态用户可以知道现在正在抓取哪一页、抓取到了多少条数据、失败重试的次数。如果用户暂停程序,下次还可以继续抓取。3. 控制程序运行通过AJAX命令服务器端执行提取、分析和储存工作。在本例中,为了提高程序运行的稳定性,没有采用多线程设计,一次只请求一个页面。所以定义了两个函数:fnRun() 和 fnGet()。fnRun() 是“启动/暂停”按钮的事件处理函数。它负责切换程序的运行和暂停状态,这是通过设置一个标志位 bRunning 来实现的。var bRunning = 0, nRetry = 0, page = 500;function fnRun() / 当前处于停止状态if (bRunning = 0) bRunning = 1;$(#btn).val( 暂停 ); / 更改按钮文字fnGet();/ 当前处于运行状态else bRunning = 0;$(#btn).val( 继续 );fnGet() 则负责生成URL并创建AJAX请求,当AJAX请求完成(服务器端完成了工作)后,fnGet() 递归调用,继续处理下一页。如果 fnGet() 遇到 bRunning=0 也就是用户要求暂停时,则停止递归调用。function fnGet() if (bRunning = 0) return 0;if (page $page);$contexthttp = array (method = POST,content = http_build_query($query),);$text = file_get_contents($url, false, stream_context_create($context);如果遇到目标网站用Cookie识别身份,或者检查Referer和User Agent。可以进一步修改上下文,例如:$contexthttp = array (method = POST,header = “Referer: /index.htmlrn” .“Cookie: foo=barrn”,content = http_build_query($query),user_agent = $_SERVERHTTP_USER_AGENT,);2. 提取所需数据简单的采集任务不需要分析HTML,只要用正则表达式找到需要的数据即可。因为动态网页是将数据填入一个模板来生成的,可以通过分析页面的结构找出合适的正则表达式。也可以通过正则表达式搜索、等标签。编码问题需要注意。当你的正则表达式中含有中文等双字节字符时,注意正则表达式的编码要和抓取到的内容编码相符,否则永远也无法匹配。例如:$ntd = iconv(UTF-8, BIG5, 新台幣); / 有些字不能正确转换造成出错$ntd = mb_convert_encoding(新台幣, BIG5); / 需要 mbstring 库preg_match_all(“/(d+)$ntd”, $text, $matches);如果需要分析HTML页面,还有 PHP Simple HTML DOM Parser、phpQuery 等可供使用。3. 将数据写入数据库4. 返回运行情况用JSON返回运行情况,主要是下载是否成功、现在已提取到多少条数据等。供客户端显示。剩下的工作便是测试和改正任何一个可能出错的地方。因为客户端和服务器端之间通过网络
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 可持续建筑材料的创新研发趋势与前景分析
- 强化数学思维中的归纳与演绎训练
- 化工过程安全教育中的虚拟仿真技术应用研究
- 办公建筑用电需求响应与负荷匹配策略研究
- 数字化财务下合并报表编制智能化的挑战与对策
- 餐饮企业成本管控及效益提升措施
- 引导园区企业创新与技术升级促进空间高效利用
- 网络化教学环境对学生物理实验能力的培养
- 2025年保健医生考试试题及答案
- 民办园环境优化与园区发展对策
- 2025年通信安全员(ABC证)考试题库(含答案)
- ISO9001-2015基础知教学课件
- 2023 课件 C++类的概念及程序设计
- 支行案防管理办法
- 6.1 包饺子(课件)北师大版三年级数学上册
- 考务人员管理办法
- 鱼道运行管理办法
- 乡村医生超声培训课件
- 急性喉炎护理课件
- 大学生职业规划大赛《智能焊接技术专业》生涯发展展示
- 2025新外研版初中英语七年级上全册课文翻译
评论
0/150
提交评论