首页 php教程 php手册 PHP实现最简单爬虫原型

PHP实现最简单爬虫原型

Jun 14, 2016 am 12:01 AM
php 代码 原型 实现 开源 爬虫 简单 编程 编程语言 软件开发

最简单的爬虫模型应该是这样的:给一个初始url,爬虫把内容扒下拉,找页面里的url,在以这些url为起点,开始爬。

下面是一个最简单的php实现的爬虫模型。

  1. /**
  2. * 爬虫程序 -- 原型
  3. *
  4. * BookMoth 2009-02-21
  5. */
  6. /**
  7. * 从给定的url获取html内容
  8. *
  9. * @param string $url
  10. * @return string
  11. */
  12. function _getUrlContent($url){
  13. $handle = fopen($url, "r");
  14. if($handle){
  15. $content = stream_get_contents($handle,1024*1024);
  16. return $content;
  17. }else{
  18. return false;
  19. }
  20. }
  21. /**
  22. * 从html内容中筛选链接
  23. *
  24. * @param string $web_content
  25. * @return array
  26. */
  27. function _filterUrl($web_content){
  28. $reg_tag_a = '/\'\"\ ]*).*?>/';
  29. $result = preg_match_all($reg_tag_a,$web_content,$match_result);
  30. if($result){
  31. return $match_result[1];
  32. }
  33. }
  34. /**
  35. * 修正相对路径
  36. *
  37. * @param string $base_url
  38. * @param array $url_list
  39. * @return array
  40. */
  41. function _reviseUrl($base_url,$url_list){
  42. $url_info = parse_url($base_url);
  43. $base_url = $url_info["scheme"].'://';
  44. if($url_info["user"]&&$url_info["pass"]){
  45. $base_url .= $url_info["user"].":".$url_info["pass"]."@";
  46. }
  47. $base_url .= $url_info["host"];
  48. if($url_info["port"]){
  49. $base_url .= ":".$url_info["port"];
  50. }
  51. $base_url .= $url_info["path"];
  52. print_r($base_url);
  53. if(is_array($url_list)){
  54. foreach ($url_list as $url_item) {
  55. if(preg_match('/^http/',$url_item)){
  56. //已经是完整的url
  57. $result[] = $url_item;
  58. }else {
  59. //不完整的url
  60. $real_url = $base_url.'/'.$url_item;
  61. $result[] = $real_url;
  62. }
  63. }
  64. return $result;
  65. }else {
  66. return;
  67. }
  68. }
  69. /**
  70. * 爬虫
  71. *
  72. * @param string $url
  73. * @return array
  74. */
  75. function crawler($url){
  76. $content = _getUrlContent($url);
  77. if($content){
  78. $url_list = _reviseUrl($url,_filterUrl($content));
  79. if($url_list){
  80. return $url_list;
  81. }else {
  82. return ;
  83. }
  84. }else{
  85. return ;
  86. }
  87. }
  88. /**
  89. * 测试用主程序
  90. *
  91. */
  92. function main(){
  93. $current_url = "http://hao123.com/";//初始url
  94. $fp_puts = fopen("url.txt","ab");//记录url列表
  95. $fp_gets = fopen("url.txt","r");//保存url列表
  96. do{
  97. $result_url_arr = crawler($current_url);
  98. if($result_url_arr){
  99. foreach ($result_url_arr as $url) {
  100. fputs($fp_puts,$url."\r\n");
  101. }
  102. }
  103. }while ($current_url = fgets($fp_gets,1024));//不断获得url
  104. }
  105. main();
  106. ?>

当然这只爬虫还需要进行下面的进化才可以:

1、拼接更准确的url链接。现在的链接有可能是格式错误的。

2、能够去掉重复的url链接。现在的爬虫会做非常多非常多的重复工作。

3、避免爬虫怕成环路,一个永远右转的车,只能是300内环,它只会跑在三环路上,去不了别的地方。

4、多线程或者多进程。因为php没有线程的概念,所以可能需要shell这样的东西来模拟了。

5、……略去2的N次方个汉字。

反正是意思一下就好了~

from http://blog.csdn.net/bookmoth/archive/2009/02/21/3916538.aspx

 

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

<🎜>:泡泡胶模拟器无穷大 - 如何获取和使用皇家钥匙
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系统,解释
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆树的耳语 - 如何解锁抓钩
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
<🎜>掩盖:探险33-如何获得完美的色度催化剂
2 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1677
14
CakePHP 教程
1430
52
Laravel 教程
1333
25
PHP教程
1278
29
C# 教程
1257
24
如果session_start()被多次调用会发生什么? 如果session_start()被多次调用会发生什么? Apr 25, 2025 am 12:06 AM

多次调用session_start()会导致警告信息和可能的数据覆盖。1)PHP会发出警告,提示session已启动。2)可能导致session数据意外覆盖。3)使用session_status()检查session状态,避免重复调用。

IIS和PHP的兼容性:深度潜水 IIS和PHP的兼容性:深度潜水 Apr 22, 2025 am 12:01 AM

IIS和PHP可以兼容,通过FastCGI实现。1.IIS通过配置文件将.php文件请求转发给FastCGI模块。2.FastCGI模块启动PHP进程处理请求,提高性能和稳定性。3.实际应用中需注意配置细节、错误调试和性能优化。

C的未来:改编和创新 C的未来:改编和创新 Apr 27, 2025 am 12:25 AM

C 的未来将专注于并行计算、安全性、模块化和AI/机器学习领域:1)并行计算将通过协程等特性得到增强;2)安全性将通过更严格的类型检查和内存管理机制提升;3)模块化将简化代码组织和编译;4)AI和机器学习将促使C 适应新需求,如数值计算和GPU编程支持。

C:死亡还是简单地发展? C:死亡还是简单地发展? Apr 24, 2025 am 12:13 AM

1)c relevantduetoItsAverity and效率和效果临界。2)theLanguageIsconTinuellyUped,withc 20introducingFeaturesFeaturesLikeTuresLikeSlikeModeLeslikeMeSandIntIneStoImproutiMimproutimprouteverusabilityandperformance.3)

作曲家:通过AI的帮助开发PHP 作曲家:通过AI的帮助开发PHP Apr 29, 2025 am 12:27 AM

AI可以帮助优化Composer的使用,具体方法包括:1.依赖管理优化:AI分析依赖关系,建议最佳版本组合,减少冲突。2.自动化代码生成:AI生成符合最佳实践的composer.json文件。3.代码质量提升:AI检测潜在问题,提供优化建议,提高代码质量。这些方法通过机器学习和自然语言处理技术实现,帮助开发者提高效率和代码质量。

session_start()函数的意义是什么? session_start()函数的意义是什么? May 03, 2025 am 12:18 AM

session_start()iscucialinphpformanagingusersessions.1)ItInitiateSanewsessionifnoneexists,2)resumesanexistingsessions,and3)setsasesessionCookieforContinuityActinuityAccontinuityAcconActInityAcconActInityAcconAccRequests,EnablingApplicationsApplicationsLikeUseAppericationLikeUseAthenticationalticationaltication and PersersonalizedContentent。

H5:HTML5的关键改进 H5:HTML5的关键改进 Apr 28, 2025 am 12:26 AM

HTML5带来了五个关键改进:1.语义化标签提升了代码清晰度和SEO效果;2.多媒体支持简化了视频和音频嵌入;3.表单增强简化了验证;4.离线与本地存储提高了用户体验;5.画布与图形功能增强了网页的可视化效果。

PHP和IIS:让他们一起工作 PHP和IIS:让他们一起工作 Apr 21, 2025 am 12:06 AM

在IIS上配置和运行PHP需要以下步骤:1)下载并安装PHP,2)配置IIS并添加FastCGI模块,3)创建并设置应用池,4)创建网站并绑定到应用池。通过这些步骤,你可以在Windows服务器上轻松部署PHP应用,并通过配置扩展和优化性能来提升应用的稳定性和效率。

See all articles