本人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. OpenStack 启动虚拟机 Booting from Hard Disk

    问题 OpenStack 启动虚拟机 Booting from Hard Disk-GRUB 环境 OpenStack RUNNING IN vSphere 6.0.0 VM 开启了 CPU 虚拟化支 ...

  2. Promise.then链式调用

    let a = new Promise((resolve,reject)=>{ resolve(1) }).then((r)=>{console.log(r)}).then(()=> ...

  3. 微信小程序的配置详解

    1.配置详解: 使用app.json文件来对微信小程序进行全局配置,决定页面文件的路径.窗口表现.设置网络超时时间.设置多 tab 等. 1>pages 接受一个数组,每一项都是字符串,来指定小 ...

  4. CTF—攻防练习之HTTP—SQl注入(get)

    攻击机:192.168.32.152 靶机 :192.168.32.157 扫描靶机扫端口: 开放了ssh和80看下ssh版本有没有漏洞,searchsplot下,没有发现 dirb扫描下目录,有个a ...

  5. Apache编译安装及LAMP架构

    1.apache三种工作模式 1)prefork工作模式 一个进程处理一个用户请求 稳定但是不适合高并发的生产环境 2)worker工作模式 一个进程生成多个线程 合适高并发环境但是需要考虑到线程的安 ...

  6. KinectFusion 介绍

    原文链接 KinectFusion简介 KinectFusion是微软在2011年发表的一篇论文里提到的点云重建的方法,论文题目是:KinectFusion: Real-Time Dense Surf ...

  7. linux 更改文件权限命令 chmod

    chmod -change file mode bits :更改文件权限 chmod是用来改变文件或者目录权限的命令,但只有文件的属主和超级用户(root)才有这种权限. 更改文件权限的2种方式: 一 ...

  8. Qt - 获取本机网络信息

    目的: 获取本机的主机名.IP地址.硬件地址等网络信息. 工具: 使用Qt提供的网络模块QtNetwork(pro文件里面加network): 使用Qt提供的类QHostInfo.QNetworkIn ...

  9. JDBC的一些简单通用代码

    JDBC的一些简单通用代码 功能包括 连接数据库 查询操作 执行sql语句 jdbc相关类的加载 关闭连接 获取数据库格式的当前时间 代码 package dao; import java.sql.C ...

  10. Luogu P4095 [HEOI2013]Eden的新背包问题

    题目 求出从前往后的背包\(f_{i,j}\)和从后往前的背包\(F_{i,j}\). 那么对于询问\((d,e)\),答案就是\(\max\limits_{i=0}^e f_{d-1,i}+F_{d ...