本人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. Reactjs之实现js跳转路由

    1.新增知识 /* 实现js跳转路由:https://reacttraining.com/react-router/web/example/auth-workflow 1.要引入Redirect im ...

  2. Jmeter(六)事务

    事务是性能测试之必不可少的关注点, Jmeter默认把每一个请求都统计成了一个事务, 但有时候我们根据业务需求, 会把多个操作统计成一个事务, Jmeter当然也考虑到了这个需求, 因此我们可以通过逻 ...

  3. USACO1.5 Mother's Milk【搜索】

    题目传送门 这道题还记得是我当年学广搜的时候做过. 如今再做,做了一个$dfs$版本的,比较简单,直接搞就可以了. 广搜的话,用结构体保存,然后塞到$queue$里面就可以了. /* ID: Star ...

  4. 【神经网络与深度学习】【VS开发】【CUDA开发】VS2013 配置CUDNN V4 DEMO

    VS2013 配置CUDNN V4 DEMO 众所周知,当前主流深度学习的实现中调用的底层API都是cudnn,自己做项目需要开发深度学习模块时,也需要调用cudnn库,因此熟悉cudnn库是很有必要 ...

  5. Synchronized底层优化(轻量级锁、偏向锁)(二)

    一.重量级锁 上篇文章中向大家介绍了Synchronized的用法及其实现的原理.现在我们应该知道,Synchronized是通过对象内部的一个叫做监视器锁(monitor)来实现的.但是监视器锁本质 ...

  6. Akka系列(十):Akka集群之Akka Cluster

    前言........... 上一篇文章我们讲了Akka Remote,理解了Akka中的远程通信,其实Akka Cluster可以看成Akka Remote的扩展,由原来的两点变成由多点组成的通信网络 ...

  7. Spring Boot(十七):使用 Spring Boot 上传文件

      上传文件是互联网中常常应用的场景之一,最典型的情况就是上传头像等,今天就带着带着大家做一个 Spring Boot 上传文件的小案例. 1.pom 包配置 我们使用 Spring Boot 版本 ...

  8. 创建可执行bin安装文件

    [应用场景] 简化操作,对于有些安装操作而言,需要包含安装脚本和脚本需要的文件两部分,封装成可执行bin文件之后就只有一个安装包了. 代码保护,在很多情况下,我们并不希望用户可以直接接触到代码部分,这 ...

  9. wode.

    http://www.cnblogs.com/wilber2013/p/4638967.html

  10. 洛谷 - P3469 - BLO-Blockade - 割点

    https://www.luogu.org/problem/P3469 翻译:一个原本连通的无向图,可以删除图中的一个点,求因为删除这个点所导致的不连通的有序点对的数量.或者说,删去这个点之后,各个连 ...