- 浏览: 1641320 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (405)
- C/C++ (16)
- Linux (60)
- Algorithm (41)
- ACM (8)
- Ruby (39)
- Ruby on Rails (6)
- FP (2)
- Java SE (39)
- Java EE (6)
- Spring (11)
- Hibernate (1)
- Struts (1)
- Ajax (5)
- php (2)
- Data/Web Mining (20)
- Search Engine (19)
- NLP (2)
- Machine Learning (23)
- R (0)
- Database (10)
- Data Structure (6)
- Design Pattern (16)
- Hadoop (2)
- Browser (0)
- Firefox plugin/XPCOM (8)
- Eclise development (5)
- Architecture (1)
- Server (1)
- Cache (6)
- Code Generation (3)
- Open Source Tool (5)
- Develope Tools (5)
- 读书笔记 (7)
- 备忘 (4)
- 情感 (4)
- Others (20)
- python (0)
最新评论
-
532870393:
请问下,这本书是基于Hadoop1还是Hadoop2?
Hadoop in Action简单笔记(一) -
dongbiying:
不懂呀。。
十大常用数据结构 -
bing_it:
...
使用Spring MVC HandlerExceptionResolver处理异常 -
一别梦心:
按照上面的执行,文件确实是更新了,但是还是找不到kernel, ...
virtualbox 4.08安装虚机Ubuntu11.04增强功能失败解决方法 -
dsjt:
楼主spring 什么版本,我的3.1 ,xml中配置 < ...
使用Spring MVC HandlerExceptionResolver处理异常
步骤很简单:
1)使用google的搜索inlink的语法link:url和num参数指定一页显示的结果数,
在这个结果中找到外链的页面url,排除网站内链接。
2)依次fetch每个url的页面,在fetch下来的页面找到目标链接,把achor
text记录下来,并计数。
3)按照出现次数排序,比较靠前的基本是这个网站的名字了。
我们使用了好几个代理,每次随机选取一个,以防被封掉。
全部的代码:
结果:
{"javaeye/ago123456/123456"=>3, "05.javaeye技术网站"=>1, "javaeye"=>12, "http://www.iteye.com"=>2, "go"=>1, "www.iteye.com"=>1, "javaeye技术社区"=>4, "javaeye社区"=>1, "上海乐福狗信息技术有限公司:诚聘技术经理和开发工程师"=>1, "对require的疑惑--ruby -javaeye做最棒的软件开发交流社区"=>1, ""=>2, "访问此网站"=>1, "google reader"=>1, "javascriptå\u009Fºç¡\u0080ç\u009F¥è¯\u0086大é\u009B\u0086é\u0094¦(1)"=>1, "webå\u0089\u008D端æ\u008A\u0080æ\u009C¯è®ºå\u009D\u009Bæ\u009C\u0080æ\u0096°è®¨è®º - javaeye"=>1}
["javaeye", "javaeye技术社区", "javaeye/ago123456/123456", "http://www.iteye.com", "", "javaeye社区", "go", "www.iteye.com", "上海乐福狗信息技术有限公司:诚聘技术经理和开发工程师", "对require的疑惑--ruby -javaeye做最棒的软件开发交流社区", "05.javaeye技术网站", "访问此网站", "google reader", "javascriptå\u009Fºç¡\u0080ç\u009F¥è¯\u0086大é\u009B\u0086é\u0094¦(1)", "webå\u0089\u008D端æ\u008A\u0080æ\u009C¯è®ºå\u009D\u009Bæ\u009C\u0080æ\u0096°è®¨è®º - javaeye"]
需要安装gem nokogiri,在Ubuntu下:
$ sudo apt-get install libxml2 libxml2-dev libxslt libxslt-dev
$ gem install nokogiri
1)使用google的搜索inlink的语法link:url和num参数指定一页显示的结果数,
在这个结果中找到外链的页面url,排除网站内链接。
def search_inlinks_from_google(query,result_num) escaped_query = CGI.escape("link:#{query}") google_url = "http://www.google.com/search?q=#{escaped_query}&num=#{result_num}" inlinks = [] Nokogiri::HTML(open(google_url,:proxy => rand_proxy)).css('h3.r > a.l').each do |node| link = node.attributes['href'] inlinks << link if not self_inlink?(query,link) puts "inlink: #{link}" end return inlinks end
2)依次fetch每个url的页面,在fetch下来的页面找到目标链接,把achor
text记录下来,并计数。
def find_site_names_by_inlinks(inlinks,site_query) name_count_map = Hash.new{|hash,key| hash[key] = 0} inlinks.each do |link| puts "searching from #{link}..." Nokogiri::HTML(open(link,fetch_options)).xpath("//a").each do |link_node| name_count_map[link_node.text.strip.downcase] += 1 if link_node.attributes["href"].to_s =~ /#{site_query}/ end end p name_count_map name_count_map.sort{|a,b| b[1] <=> a[1]}.collect{|name,count| name } end
3)按照出现次数排序,比较靠前的基本是这个网站的名字了。
我们使用了好几个代理,每次随机选取一个,以防被封掉。
全部的代码:
#!/usr/bin/ruby # author fuliang http://fuliang.iteye.com require 'nokogiri' require 'open-uri' require 'net/http' require 'cgi' class SiteNameSearchAgent public def initialize @proxies = 1.upto(6).collect{|index| "http://l-crwl#{index}:1080"} end def get_site_names(site_query,max_result_num=20) inlinks = search_inlinks_from_google(site_query,max_result_num) find_site_names_by_inlinks(inlinks,site_query) end private def search_inlinks_from_google(query,result_num) escaped_query = CGI.escape("link:#{query}") google_url = "http://www.google.com/search?q=#{escaped_query}&num=#{result_num}" inlinks = [] Nokogiri::HTML(open(google_url,:proxy => rand_proxy)).css('h3.r > a.l').each do |node| link = node.attributes['href'] inlinks << link if not self_inlink?(query,link) puts "inlink: #{link}" end return inlinks end def self_inlink?(query,link) query_domain,link_domain = [query,link].collect{|url| URI.parse(url).host.sub(/^(.*?)\./,"")} return query_domain == link_domain end def find_site_names_by_inlinks(inlinks,site_query) name_count_map = Hash.new{|hash,key| hash[key] = 0} inlinks.each do |link| puts "searching from #{link}..." Nokogiri::HTML(open(link,fetch_options)).xpath("//a").each do |link_node| name_count_map[link_node.text.strip.downcase] += 1 if link_node.attributes["href"].to_s =~ /#{site_query}/ end end p name_count_map name_count_map.sort{|a,b| b[1] <=> a[1]}.collect{|name,count| name } end def rand_proxy return @proxies[(rand * 6).to_i] end def fetch_options user_agent = "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.2) Gecko/20061201 Firefox/2.0.0.2 (Ubuntu-feisty)" fetch_options = { "User-Agent" => user_agent, "proxy" => rand_proxy } end end search_agent = SiteNameSearchAgent.new p search_agent.get_site_names("http://www.iteye.com",50)
结果:
引用
{"javaeye/ago123456/123456"=>3, "05.javaeye技术网站"=>1, "javaeye"=>12, "http://www.iteye.com"=>2, "go"=>1, "www.iteye.com"=>1, "javaeye技术社区"=>4, "javaeye社区"=>1, "上海乐福狗信息技术有限公司:诚聘技术经理和开发工程师"=>1, "对require的疑惑--ruby -javaeye做最棒的软件开发交流社区"=>1, ""=>2, "访问此网站"=>1, "google reader"=>1, "javascriptå\u009Fºç¡\u0080ç\u009F¥è¯\u0086大é\u009B\u0086é\u0094¦(1)"=>1, "webå\u0089\u008D端æ\u008A\u0080æ\u009C¯è®ºå\u009D\u009Bæ\u009C\u0080æ\u0096°è®¨è®º - javaeye"=>1}
["javaeye", "javaeye技术社区", "javaeye/ago123456/123456", "http://www.iteye.com", "", "javaeye社区", "go", "www.iteye.com", "上海乐福狗信息技术有限公司:诚聘技术经理和开发工程师", "对require的疑惑--ruby -javaeye做最棒的软件开发交流社区", "05.javaeye技术网站", "访问此网站", "google reader", "javascriptå\u009Fºç¡\u0080ç\u009F¥è¯\u0086大é\u009B\u0086é\u0094¦(1)", "webå\u0089\u008D端æ\u008A\u0080æ\u009C¯è®ºå\u009D\u009Bæ\u009C\u0080æ\u0096°è®¨è®º - javaeye"]
需要安装gem nokogiri,在Ubuntu下:
引用
$ sudo apt-get install libxml2 libxml2-dev libxslt libxslt-dev
$ gem install nokogiri
发表评论
-
松本行弘的程序世界
2011-10-02 16:49 1358全书涉及到程序设计的方方面面,买这边书的目的希望能看到看看Ru ... -
Ruby HTTP/HTML parser相关资源
2011-09-28 12:04 1809Net::HTTP: http://ruby-doc.org ... -
命令行词典
2011-09-27 14:50 1991经常要查单词,所以利用qq dict api写了一个命令行词典 ... -
构建自己的DSL之三 抓取文件管理
2011-07-18 23:26 1717转载请标明出处:http://fuliang.iteye.co ... -
构建自己的DSL之二 抓取文本处理
2011-07-11 23:18 2263转载请标明出处:http://fuliang.iteye.co ... -
构建自己的DSL之一 Simple Crawler
2011-07-11 22:08 2970转载请标明出处:http://fuliang.iteye.co ... -
轻松删除所有安装的gem
2011-06-13 12:28 7945删除安装所有的gem: gem list | cut -d ... -
Ruby发送json请求
2011-05-05 18:37 5827require 'net/http' require ' ... -
写个简单的汉语bigram tokenizer
2011-01-23 23:29 1575写个简单的汉语bigram tokenizer,基本能够满足文 ... -
Ruby1.9 lambda操作符
2011-01-09 13:35 1369Ruby1.9提供了lambda操作符,使得lambda表达式 ... -
Ruby 1.9 regex (named capture group)
2011-01-08 22:57 2079Ruby 1.9正则增加了支持命名组,这样使得正则具有更好的可 ... -
Ruby Enumerators
2011-01-02 21:13 2309一个enumerator是一个用来枚举其他对象的Enumera ... -
Ruby Coroutine
2011-01-02 15:51 2708Ruby1.9提供了Fiber,提供了Coroutine的功能 ... -
Ruby Proc curry化
2011-01-01 23:11 1624Ruby 1.9 Proc增加了curry方法,可以将Proc ... -
Lazy evaluation in Ruby
2011-01-01 21:49 12051.使用||延迟初始化 def fib(n) ... -
One line Ruby code
2010-12-31 23:03 1194经常使用perl来代替一行的sed awk,主要是想使用per ... -
函数对象作为case语句中的条件
2010-12-31 22:28 1090Ruby 1.9的Proc#===作为call的一个别名,所以 ... -
从hash快速生成URL参数
2010-12-31 21:03 1926key_values = { :key1 => ... -
生成长度为n的随机字符串
2010-12-31 20:50 1614包含数字和小写字母的随机串 def gen_random_ ... -
Returning
2010-12-31 20:34 1533我们经常做的事情是创建一个对象,操作这个对象,然后返回这个对象 ...
相关推荐
随便写的代码,大家随便看看
如果你要想看懂一段代码,首先你需要直到这段代码的执行流程是什么,流程也就是逻辑,知道了流程也就知道了代码从何处开始,从何处停止,每一步怎么执行。 ### 2 :每个语句的功能 当你知道了代码的执行步骤后,你...
如何写出安全的Java代码,还是值得看看的。挺不错的。
要判断一个程序员是不是好的程序员,主要看他写的代码,因为程序员最重要的事是写代码。 即便不去理解代码的意图,只要看一眼,好的程序员写的代码与差的程序员写的代码基本上就可以看出来。好的程序员写的代码,...
怎么找论文代码?论文代码看不懂怎么办?.xmind
写给大家看的cpp原书程序源代码下载, 资源来自原书官方网站下载;
精品~教你看懂别人的源代码,看别人源码有障碍的朋友适合学一下
怎么样写好一个程序的安全代码?怎么样动手起来会更方便呢?来看看吧.计算机专业的学生不容错过..
教你如何更高效的阅读别人的代码,为你节省更多的时间学习
速达2000源代码可以看看刚从他人那下的
一个用vb写的美女联联看放源代码。
上传文件功能, 自己写的代码可以正确的运行,保证没有问题 ,可以下来看看
c语言电话本代码,运用c语言写的电话本代码,大家可以看看
扫雷最简单的做法,大家来看看 内有代码。 扫雷游戏
web代码混淆方案.混淆js代码,压缩css代码 什么?右击网页就能看到JS,CSS源代码?!别人抄起来岂不是太容易了? 所以我们要混淆,压缩JS,CSS代码,即防止别人抄走修改,又能节省网络流量
轮廓检测代码 自己写的自己随便看看 怕遗忘
超实用的JavaScript代码段 需要的人们看看吧
此画图,我对每一行都加详细的注释,让你不再为理解不了别人写的代码而发愁!代码精炼,没有你多余的东西!