本人qq群也有许多的技术文档,希望可以为你提供一些帮助(非技术的勿加)。

QQ群:   281442983 (点击链接加入群:http://jq.qq.com/?_wv=1027&k=29LoD19)    QQ:1542385235

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

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

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

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

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

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

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

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

本人qq群也有许多的技术文档,希望可以为你提供一些帮助(非技术的勿加)。

QQ群:   281442983 (点击链接加入群:http://jq.qq.com/?_wv=1027&k=29LoD19)    QQ:1542385235

我的淘宝店,可以进去逛逛噢:https://shop108912636.taobao.com/index.htm?spm=2013.1.w5001-7867000954.3.1d29318dPlLar7&scene=taobao_shop

PHP实现最简单爬虫原型的更多相关文章

  1. PHP简单的爬虫–原型

    1.PHP简单的爬虫–原型 爬虫的原理: 给定原始的url: 分析链接,根据设置的正则表达式获取链接中的内容: 有的会更新原始的url再进行分析链接,获取特定内容,周而复始. 将获取的内容保存在数据库 ...

  2. Python简单爬虫入门三

    我们继续研究BeautifulSoup分类打印输出 Python简单爬虫入门一 Python简单爬虫入门二 前两部主要讲述我们如何用BeautifulSoup怎去抓取网页信息以及获取相应的图片标题等信 ...

  3. [Java]使用HttpClient实现一个简单爬虫,抓取煎蛋妹子图

    第一篇文章,就从一个简单爬虫开始吧. 这只虫子的功能很简单,抓取到”煎蛋网xxoo”网页(http://jandan.net/ooxx/page-1537),解析出其中的妹子图,保存至本地. 先放结果 ...

  4. 简单爬虫,突破IP访问限制和复杂验证码,小总结

    简单爬虫,突破复杂验证码和IP访问限制 文章地址:http://www.cnblogs.com/likeli/p/4730709.html   好吧,看题目就知道我是要写一个爬虫,这个爬虫的目标网站有 ...

  5. Python简单爬虫入门二

    接着上一次爬虫我们继续研究BeautifulSoup Python简单爬虫入门一 上一次我们爬虫我们已经成功的爬下了网页的源代码,那么这一次我们将继续来写怎么抓去具体想要的元素 首先回顾以下我们Bea ...

  6. GJM : Python简单爬虫入门(二) [转载]

    感谢您的阅读.喜欢的.有用的就请大哥大嫂们高抬贵手"推荐一下"吧!你的精神支持是博主强大的写作动力以及转载收藏动力.欢迎转载! 版权声明:本文原创发表于 [请点击连接前往] ,未经 ...

  7. python 简单爬虫diy

    简单爬虫直接diy, 复杂的用scrapy import urllib2 import re from bs4 import BeautifulSoap req = urllib2.Request(u ...

  8. python3实现简单爬虫功能

    本文参考虫师python2实现简单爬虫功能,并增加自己的感悟. #coding=utf-8 import re import urllib.request def getHtml(url): page ...

  9. Python开发简单爬虫 - 慕课网

    课程链接:Python开发简单爬虫 环境搭建: Eclipse+PyDev配置搭建Python开发环境 Python入门基础教程 用Eclipse编写Python程序   课程目录 第1章 课程介绍 ...

随机推荐

  1. WPF 使用Task代替ThreadPool和Thread

    一:Task的优势 ThreadPool相比Thread来说具备了很多优势,但是ThreadPool却又存在一些使用上的不方便.比如: 1: ThreadPool不支持线程的取消.完成.失败通知等交互 ...

  2. KVM + LinuxBridge 的网络虚拟化解决方案实践

    目录 文章目录 目录 前言 Linux bridge 的基本操作 创建 Bridge 将 veth pair 连上 Bridge 为 Bridge 配置 IP 地址 将物理网卡接口设备挂靠 Bridg ...

  3. JavaScript中二进制与10进制互相转换

    webpack打包生成的代码中涉及了一些二进制位与的操作, 所以今天来学习一下JavaScript中的二进制与十进制转换操作吧 十进制转二进制: var num = 100 num.toString( ...

  4. runoob_Java 方法

    可变参数 JDK 1.5 开始,Java支持传递同类型的可变参数给一个方法. 方法的可变参数的声明如下所示: typeName... parameterName 在方法声明中,在指定参数类型后加一个省 ...

  5. 哈希表 HashTable(又名散列表)

    简介 其实通过标题上哈希表的英文名HashTable,我们就可以看出这是一个组合的数据结构Hash+Table. Hash是什么?它是一个函数,作用可以通过一个公式来表示: index = HashF ...

  6. 手写BP(反向传播)算法

    BP算法为深度学习中参数更新的重要角色,一般基于loss对参数的偏导进行更新. 一些根据均方误差,每层默认激活函数sigmoid(不同激活函数,则更新公式不一样) 假设网络如图所示: 则更新公式为: ...

  7. maven的各种异常

    1. 问题 本文将讨论Spring中最常见的配置问题 —— Spring的一个命名空间的名称空间处理程序没有找到. 大多数情况下,是由于一个特定的Spring的jar没有配置在classpath下,让 ...

  8. selenium-模拟鼠标

    需要导入的包: from selenium.webdriver import ActionChains 一.模拟鼠标右键 ActionChains(self.driver).context_click ...

  9. [转帖]Linux下inotify监控文件夹状态,发生变化后触发rsync同步

    Linux下inotify监控文件夹状态,发生变化后触发rsync同步 https://www.cnblogs.com/fjping0606/p/6114123.html 1.安装工具--inotif ...

  10. IDEA下集成tomcat7插件将tomcat内嵌到web项目中

    新建一个maven web项目 修改pom.xml文件 <build> <plugins> <!-- 配置Tomcat插件: 就是本地部署,将tomcat 内嵌到 web ...