本人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. python中_new_()与_init_()的区别

    __new__方法的使用 只有继承于object的新式类才能有__new__方法,__new__方法在创建类实例对象时由Python解释器自动调用,一般不用自己定义,Python默认调用该类的直接父类 ...

  2. 【7】解决:移动端点击a链接出现蓝色边框

    [1]_blank : 浏览器总在一个新打开.未命名的窗口中载入目标文档. [2]title :  鼠标悬浮显示的文字. [3]href : 跳转到哪个链接.     a{    border: no ...

  3. Selenium 2自动化测试实战11(键盘事件)

    一.键盘事件 1.Keys()类提供了键盘上几乎所有按键的方法,如下实例: #coding:utf-8 from selenium.webdriver.common.keys import Keys ...

  4. git 本地代码提交至远程master分支解决方法

    git 提交代码,本地新建一个my分支,不从本地master分支直接上传,而是先从本地my分支上提交至本地master分支,然后本地master提交至远程master分支上.前提是远程只有一个mast ...

  5. java:Springmvc框架1(基本配置,注解配置,转换器引入)

    1.springmvc01:(基本配置) web.xml: <?xml version="1.0" encoding="UTF-8"?> <w ...

  6. 意想不到的JavaScript(每日一题2)

    问题一: 答案: 解析:

  7. 17.DRX操作时序

    DRX状态转移 OnDuration:监听态,监听并接收PDCCH,也叫激活态 StayActive:保持激活状态(做完业务后,继续监听一段时间和一个非激活定时器时间,或者还有缓存) off:off状 ...

  8. lua基础学习(二)

    一,Lua变量   1.lua变量的三种类型:全局变量,局部变量,表中的域 Lua 中的变量全是全局变量,那怕是语句块或是函数里,除非用 local 显式声明为局部变量. 局部变量的作用域为从声明位置 ...

  9. tableau日常管理

    各文件位置: https://help.tableau.com/current/server-linux/zh-cn/cli_default_filepaths_tsm.htm ldap配置: htt ...

  10. BZOJ 1053 反素数 题解

    题面 引理1:  1~n中的最大反质数,就是1~n中约数个数最多的数中最小的一个(因为要严格保证g(x)>g(i)): 引理2:1~n中任何数的不同因子不会超过10个,因为他们的乘积大于2,00 ...