现状:在win下的xampp使用php curl搜集一个网站下365个子站的150万多个页面,一万条记录存到mysql大概要花1小时。整个流程下来大概也要7天。总感觉win下面apache+php+mysql等搜集网站,会使用太多资源,感觉速度也太慢,不知道在linux(debian/centos)下使用bash+curl+mysql会不会快一点?即使linux+python+curl+mysql也无所谓,只是想服务器自己搜集。不知道我的想法是否现实。
希望有做过这方面的高手指一下方向。

解决方案 »

  1.   

    我找到下面一段代码,暂时看不懂。#!/usr/bin/env ruby
    require 'net/http'
    require 'socket'
                                                                                                                                
    Thread.abort_on_exception = true
    threads = []
                                                                                                                                
    line = File.open("links.dat")
    IO.foreach("links.dat") {|line|
      if %r{http://([^/]+)/([^/]+/+.+)}i =~ line
        domain,path = $1, $2
      end
      web = TCPSocket.new(domain,"http")
      web.print "GET /"+path+" HTTP/1.0\n\n"
      web.print "User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.2) Gecko/20070220 Firefox/2.0.0.2"
      answer = web.gets(nil)
      web.close
                                                                                                                                
      # for mp3
      arr = answer.scan(/http:\/\/www.+mp3/)
                                                                                                                                
      arr.each do |e|
        threads << Thread.new(e){|mp3|
          if %r{http://([^/]+)/([^/]+/+.+)/(.+mp3)}i =~ mp3
            website,song,name = $1, $2, $3
          end
          a=Net::HTTP.new(website,80)
          song_get = "/"+song+"/"+name
          puts "Fetching #{website}#{song_get}"
          resp, data = a.get(song_get,nil)
          puts "Got #{website}#{song_get}: #{resp.message}"
          open(name,'w'){|f| f.write(data)}
        }
      end
    }
    threads.each {|aThread| aThread.join}
      

  2.   

    这个速度已经不错了,速度慢应该在MYSQL写入这一块,150W条记录的表,写起来的确会很慢。
      

  3.   

    感觉apache +php+mysql的效率比起bash+mysql的效率差很多。就是不知道bash能不能调用mysql写入。如果没办法就只有在linux命令行下直接使用php运行了,不要apache了。
      

  4.   

    不管怎么样 linux下肯定要快.
    另外你可以考虑硬件上的升级,比如固态硬盘什么的... 用几个服务器一起工作的事情 等等 ...
      

  5.   

    debian下运行
    /usr/bin/php /var/www/crawl.php即可。
    crawl.php也可以写sh调用,再写crontab定时搜集,crawl.php再加判断那些已经写过入的记录不收处理,这样有调度之后,就会自动搜集别人的网站。我想重点还是mysql写入的原因。
      

  6.   

    搜集一个网站下365个子站的150万多个页面,一万条记录存到mysql大概要花1小时。平均一个页面耗时 3.4 毫秒
    对方真够可以的,这么快就响应了。
      

  7.   


    应该他还不知道我在搜他。
    我准备换一台烂电脑,512M内存的debian来搜他,mysql放在内网另一台电脑上。
    mysql.ini的配置不能用默认的了,改用my-huge.ini的。
    感觉最主要还是mysql写入的速度太慢了。