现状:在win下的xampp使用php curl搜集一个网站下365个子站的150万多个页面,一万条记录存到mysql大概要花1小时。整个流程下来大概也要7天。总感觉win下面apache+php+mysql等搜集网站,会使用太多资源,感觉速度也太慢,不知道在linux(debian/centos)下使用bash+curl+mysql会不会快一点?即使linux+python+curl+mysql也无所谓,只是想服务器自己搜集。不知道我的想法是否现实。
希望有做过这方面的高手指一下方向。
希望有做过这方面的高手指一下方向。
解决方案 »
- 高分啊!!用 CURL 做的登录 登录到目标站 可是为什么 做出来的 SESSION和 不一样呢
- 如何实现不同的地方用户显示不同内容
- linux下查看一个文件的编码
- 为什么load()函数不是在其它函数前执行?
- 请问,PHP168的系统,怎么添加网站聊天插件
- 两次登录,第二次登录后,一些目录下的代码读cookie,怎么是第一次登陆的信息
- $_POST收不到,但echo file_get_contents("php://input")有输出
- 关于无限级分类的问题
- 这个问题 我感到 很奇怪!盼解答 原因
- 这样对用readdir 取出的文件名进行排序
- 最新DEDECMS存SQL注入0day漏洞-又来了
- 【高分求助】有人遇到过这种情况吗?
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}
另外你可以考虑硬件上的升级,比如固态硬盘什么的... 用几个服务器一起工作的事情 等等 ...
/usr/bin/php /var/www/crawl.php即可。
crawl.php也可以写sh调用,再写crontab定时搜集,crawl.php再加判断那些已经写过入的记录不收处理,这样有调度之后,就会自动搜集别人的网站。我想重点还是mysql写入的原因。
对方真够可以的,这么快就响应了。
应该他还不知道我在搜他。
我准备换一台烂电脑,512M内存的debian来搜他,mysql放在内网另一台电脑上。
mysql.ini的配置不能用默认的了,改用my-huge.ini的。
感觉最主要还是mysql写入的速度太慢了。