﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-Dust Of Dream-随笔分类-RUBY学习</title><link>http://www.blogjava.net/windonly/category/35225.html</link><description>知识真的是一个圆么?</description><language>zh-cn</language><lastBuildDate>Thu, 04 Dec 2008 14:55:16 GMT</lastBuildDate><pubDate>Thu, 04 Dec 2008 14:55:16 GMT</pubDate><ttl>60</ttl><item><title>Agile Web Development with Rails 3nd Edition 阅读笔记</title><link>http://www.blogjava.net/windonly/archive/2008/12/04/244423.html</link><dc:creator>Anemone</dc:creator><author>Anemone</author><pubDate>Thu, 04 Dec 2008 10:45:00 GMT</pubDate><guid>http://www.blogjava.net/windonly/archive/2008/12/04/244423.html</guid><wfw:comment>http://www.blogjava.net/windonly/comments/244423.html</wfw:comment><comments>http://www.blogjava.net/windonly/archive/2008/12/04/244423.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/windonly/comments/commentRss/244423.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/windonly/services/trackbacks/244423.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Agile Web Development with Rails 3nd Edition 阅读笔记 包括如何使用session,使用control引入片段和Ajax初步使用.&nbsp;&nbsp;<a href='http://www.blogjava.net/windonly/archive/2008/12/04/244423.html'>阅读全文</a><img src ="http://www.blogjava.net/windonly/aggbug/244423.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/windonly/" target="_blank">Anemone</a> 2008-12-04 18:45 <a href="http://www.blogjava.net/windonly/archive/2008/12/04/244423.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Gem 从1.1 1.2 无法升级到1.3问题</title><link>http://www.blogjava.net/windonly/archive/2008/12/03/244072.html</link><dc:creator>Anemone</dc:creator><author>Anemone</author><pubDate>Wed, 03 Dec 2008 01:45:00 GMT</pubDate><guid>http://www.blogjava.net/windonly/archive/2008/12/03/244072.html</guid><wfw:comment>http://www.blogjava.net/windonly/comments/244072.html</wfw:comment><comments>http://www.blogjava.net/windonly/archive/2008/12/03/244072.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/windonly/comments/commentRss/244072.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/windonly/services/trackbacks/244072.html</trackback:ping><description><![CDATA[Gem 发布了1.3版本,如果你的版本是1.1或者1.2在执行
<div><font size="3"><span style="font-size: 13px;">
<div style="background-color: #eeeeee; font-size: 13px; border-left-color: #cccccc; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; "><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000; ">C:\Documents and Settings\suoni</span><span style="color: #000000; ">></span><span style="color: #000000; ">gem update </span><span style="color: #000000; ">--</span><span style="color: #000000; ">system<br />
Updating RubyGems<br />
Nothing to update</span></div>
</span></font></div>
可能会出现以上错误,通过以下这种方法安装可以解决这个问题:
<div>
<div style="background-color: #eeeeee; font-size: 13px; border-left-color: #cccccc; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; "><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000; ">C:\Documents&#160;and&#160;Settings\suoni</span><span style="color: #000000; ">></span><span style="color: #000000; ">gem&#160;install&#160;rubygems</span><span style="color: #000000; ">-</span><span style="color: #000000; ">update<br />
Successfully&#160;installed&#160;rubygems</span><span style="color: #000000; ">-</span><span style="color: #000000; ">update</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1.3</span><span style="color: #000000; ">.</span><span style="color: #000000; ">1</span><span style="color: #000000; "><br />
</span><span style="color: #000000; ">1</span><span style="color: #000000; ">&#160;gem&#160;installed<br />
(请多执行几次,如果一次不成功的话,我机器上第二次才行)<br />
然后执行<br />
C:\Documents&#160;and&#160;Settings\suoni</span><span style="color: #000000; ">></span><span style="color: #000000; ">update_rubygems<br />
进行安装<br />
<br />
</span></div>
</div>
<img src ="http://www.blogjava.net/windonly/aggbug/244072.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/windonly/" target="_blank">Anemone</a> 2008-12-03 09:45 <a href="http://www.blogjava.net/windonly/archive/2008/12/03/244072.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ror学习笔记</title><link>http://www.blogjava.net/windonly/archive/2008/12/01/243688.html</link><dc:creator>Anemone</dc:creator><author>Anemone</author><pubDate>Mon, 01 Dec 2008 05:09:00 GMT</pubDate><guid>http://www.blogjava.net/windonly/archive/2008/12/01/243688.html</guid><wfw:comment>http://www.blogjava.net/windonly/comments/243688.html</wfw:comment><comments>http://www.blogjava.net/windonly/archive/2008/12/01/243688.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/windonly/comments/commentRss/243688.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/windonly/services/trackbacks/243688.html</trackback:ping><description><![CDATA[<span  style="font-family: Verdana; font-size: 13px; ">1.安装Ruby<br />
&#160; 去http://rubyforge.org/frs/?group_id=167 下载一个最新的Ruby一键安装包,安装的时候别忘记Enable RubyGems<br />
&#160; 安装完成之后使用<br />
&#160; ruby -v<br />
&#160; gem -v<br />
&#160; 来测试是否安装成功.<br />
2.安装Rails<br />
&#160; 使用 gem install rails 自动安装Rails&#160;<br />
&#160; 使用 gem install mysql 自动安装Mysql(注意下版本,window下就用win32那个).<br />
&#160; 使用rails -v来测试是否安装成功.<br />
3.小试牛刀,使用RoR来创建一个超级简单应用<br />
&#160; 使用rails blog -d mysql创建一个简单的带数据库(mysql)的应用(-d 参数后面就是数据库类型如mysql,postgresql和sqlite3等等).<br />
&#160; 执行命令完了之后Rails就会帮我建立基本的目录,其中config目录下就是所有配置文件对用的目录,数据库的相关配置是database.yml .<br />
&#160; [CODE]<br />
&#160; ##开发用服务器<br />
&#160; development:<br />
&#160; adapter: mysql<br />
&#160; encoding: utf8<br />
&#160; database: blog_development<br />
&#160; username: root<br />
&#160; password:<br />
&#160; host: localhost<br />
&#160;&#160;<br />
&#160; ##测试用服务器<br />
test:<br />
&#160; adapter: mysql<br />
&#160; encoding: utf8<br />
&#160; database: blog_test<br />
&#160; username: root<br />
&#160; password:<br />
&#160; host: localhost<br />
<br />
##生产库<br />
production:<br />
&#160; adapter: mysql<br />
&#160; encoding: utf8<br />
&#160; database: blog_production<br />
&#160; username: root<br />
&#160; password:&#160;<br />
&#160; host: localhost<br />
&#160; [CODE]<br />
&#160; 我们在这里配置development数据库用于开发用.<br />
&#160; 使用 ruby script/generate controller home index 产生一个简单控制器home和一个index方法.<br />
&#160; [CODE]<br />
&#160; >ruby script/generate controller home index<br />
&#160;&#160;&#160;&#160;&#160; exists&#160; app/controllers/<br />
&#160;&#160;&#160;&#160;&#160; exists&#160; app/helpers/<br />
&#160;&#160;&#160;&#160;&#160; create&#160; app/views/home<br />
&#160;&#160;&#160;&#160;&#160; exists&#160; test/functional/<br />
&#160;&#160;&#160;&#160;&#160; create&#160; app/controllers/home_controller.rb<br />
&#160;&#160;&#160;&#160;&#160; create&#160; test/functional/home_controller_test.rb<br />
&#160;&#160;&#160;&#160;&#160; create&#160; app/helpers/home_helper.rb<br />
&#160;&#160;&#160;&#160;&#160; create&#160; app/views/home/index.html.erb<br />
&#160; [CODE]<br />
&#160;&#160;<br />
&#160; 使用 >ruby script/server启动测试服务器,在浏览器中键入 http://localhost:3000 就可以看见测试页面.<br />
<br />
删除 public\index.html 文件,然后打开config/routes.rb文件,在里面添加map.root :controller => "home" 这样就可以把默认首页跳转到home下面.<br />
<br />
使用 script/generate scaffold 命令可以生成一个支持数据库增删改操作的类,使用Migrations 类可以方便快捷地操作数据库表.<br />
使用 >ruby script/generate scaffold Post name:string title:string content:text 生成一个简单文字列表应用.<br />
改命令出了POST相关增删改方法之外还会产生数据库脚本.<br />
[CODE]<br />
db/migrate<br />
db/migrate/20081121132411_create_posts.rb<br />
[CODE]<br />
使用命令<br />
>rake db:create<br />
&#160; >rake db:migrate<br />
&#160; 可以创建相应的数据库和表.<br />
&#160; 在访问http://localhost:3000/posts 就可以看见主页了</span>
<img src ="http://www.blogjava.net/windonly/aggbug/243688.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/windonly/" target="_blank">Anemone</a> 2008-12-01 13:09 <a href="http://www.blogjava.net/windonly/archive/2008/12/01/243688.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ruby学习笔记二:使用Ruby实现通过Proxy的方式请求网页 </title><link>http://www.blogjava.net/windonly/archive/2008/10/17/234987.html</link><dc:creator>Anemone</dc:creator><author>Anemone</author><pubDate>Fri, 17 Oct 2008 09:27:00 GMT</pubDate><guid>http://www.blogjava.net/windonly/archive/2008/10/17/234987.html</guid><wfw:comment>http://www.blogjava.net/windonly/comments/234987.html</wfw:comment><comments>http://www.blogjava.net/windonly/archive/2008/10/17/234987.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/windonly/comments/commentRss/234987.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/windonly/services/trackbacks/234987.html</trackback:ping><description><![CDATA[现在很多网站上某些活动都有限制同一IP只能投一票的规定,但是有时候迫于压迫,又不得不想办法多投几票,以前是采用Apache里的HttpClient来实现这些功能,日前正在看Ruby,就用它也来玩下:
<div><font size="3"><span style="font-size: 13px; "><strong>
<div style="background-color: #eeeeee; font-size: 13px; border-left-color: #cccccc; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; "><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000FF; ">require</span><span style="color: #000000; "> </span><span style="color: #000000; font-weight: bold; ">'</span><span style="color: #000000; font-weight: bold; ">net/http</span><span style="color: #000000; font-weight: bold; ">'</span><span style="color: #000000; "><br />
</span><span style="color: #008000; ">#</span><span style="color: #008000; ">#获得网页内容</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">def query_url(url)<br />
</span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> Net</span><span style="color: #000000; ">::</span><span style="color: #000000; ">HTTP</span><span style="color: #000000; ">.</span><span style="color: #000000; ">get(URI</span><span style="color: #000000; ">.</span><span style="color: #000000; ">parse(url));<br />
end<br />
<br />
</span><span style="color: #008000; ">#</span><span style="color: #008000; ">抓取cnproxy上所有的代理列表,并将结果保存到proxy.txt中去<br />
#你可以修改这块代码或者其他的代理服务器列表</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">def find_all_proxy<br />
z</span><span style="color: #000000; ">=</span><span style="color: #000000; font-weight: bold; ">"</span><span style="color: #000000; font-weight: bold; ">3</span><span style="color: #000000; font-weight: bold; ">"</span><span style="color: #000000; ">;j</span><span style="color: #000000; ">=</span><span style="color: #000000; font-weight: bold; ">"</span><span style="color: #000000; font-weight: bold; ">4</span><span style="color: #000000; font-weight: bold; ">"</span><span style="color: #000000; ">;r</span><span style="color: #000000; ">=</span><span style="color: #000000; font-weight: bold; ">"</span><span style="color: #000000; font-weight: bold; ">2</span><span style="color: #000000; font-weight: bold; ">"</span><span style="color: #000000; ">;l</span><span style="color: #000000; ">=</span><span style="color: #000000; font-weight: bold; ">"</span><span style="color: #000000; font-weight: bold; ">9</span><span style="color: #000000; font-weight: bold; ">"</span><span style="color: #000000; ">;c</span><span style="color: #000000; ">=</span><span style="color: #000000; font-weight: bold; ">"</span><span style="color: #000000; font-weight: bold; ">0</span><span style="color: #000000; font-weight: bold; ">"</span><span style="color: #000000; ">;x</span><span style="color: #000000; ">=</span><span style="color: #000000; font-weight: bold; ">"</span><span style="color: #000000; font-weight: bold; ">5</span><span style="color: #000000; font-weight: bold; ">"</span><span style="color: #000000; ">;i</span><span style="color: #000000; ">=</span><span style="color: #000000; font-weight: bold; ">"</span><span style="color: #000000; font-weight: bold; ">7</span><span style="color: #000000; font-weight: bold; ">"</span><span style="color: #000000; ">;a</span><span style="color: #000000; ">=</span><span style="color: #000000; font-weight: bold; ">"</span><span style="color: #000000; font-weight: bold; ">6</span><span style="color: #000000; font-weight: bold; ">"</span><span style="color: #000000; ">;p</span><span style="color: #000000; ">=</span><span style="color: #000000; font-weight: bold; ">"</span><span style="color: #000000; font-weight: bold; ">8</span><span style="color: #000000; font-weight: bold; ">"</span><span style="color: #000000; ">;s</span><span style="color: #000000; ">=</span><span style="color: #000000; font-weight: bold; ">"</span><span style="color: #000000; font-weight: bold; ">1</span><span style="color: #000000; font-weight: bold; ">"</span><span style="color: #000000; "><br />
pf </span><span style="color: #000000; ">=</span><span style="color: #000000; "> File</span><span style="color: #000000; ">.</span><span style="color: #000000; ">new(</span><span style="color: #000000; font-weight: bold; ">"</span><span style="color: #000000; font-weight: bold; ">proxy.txt</span><span style="color: #000000; font-weight: bold; ">"</span><span style="color: #000000; ">,</span><span style="color: #000000; font-weight: bold; ">"</span><span style="color: #000000; font-weight: bold; ">w+</span><span style="color: #000000; font-weight: bold; ">"</span><span style="color: #000000; ">)<br />
</span><span style="color: #0000FF; ">for</span><span style="color: #000000; "> page_no in </span><span style="color: #800000; ">1</span><span style="color: #000000; ">..</span><span style="color: #800000; ">10</span><span style="color: #000000; "><br />
url </span><span style="color: #000000; ">=</span><span style="color: #000000; ">  </span><span style="color: #000000; font-weight: bold; ">"</span><span style="color: #000000; font-weight: bold; ">http://www.cnproxy.com/proxy#{page_no}.html</span><span style="color: #000000; font-weight: bold; ">"</span><span style="color: #000000; "><br />
content </span><span style="color: #000000; ">=</span><span style="color: #000000; "> query_url(url)<br />
</span><span style="color: #008000; ">#</span><span style="color: #008000; ">print content<br />
## ^$?./\[]{}()+*</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">    </span><span style="color: #0000FF; ">for</span><span style="color: #000000; "> array in  content</span><span style="color: #000000; ">.</span><span style="color: #000000; ">scan(</span><span style="color: #000000; ">/&lt;</span><span style="color: #000000; ">td</span><span style="color: #000000; ">></span><span style="color: #000000; ">(</span><span style="color: #000000; ">.*?</span><span style="color: #000000; ">)</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">SCRIPT type</span><span style="color: #000000; ">=</span><span style="color: #000000; ">text</span><span style="color: #000000; ">\/</span><span style="color: #000000; ">javascript</span><span style="color: #000000; ">></span><span style="color: #000000; ">document</span><span style="color: #000000; ">.</span><span style="color: #0000FF; ">write</span><span style="color: #000000; ">\</span><span style="color: #000000; ">(</span><span style="color: #000000; font-weight: bold; ">"</span><span style="color: #000000; font-weight: bold; ">:</span><span style="color: #000000; font-weight: bold; ">"</span><span style="color: #000000; ">\+</span><span style="color: #000000; ">(</span><span style="color: #000000; ">.*?</span><span style="color: #000000; ">)</span><span style="color: #000000; ">\</span><span style="color: #000000; ">)</span><span style="color: #000000; ">&lt;\/</span><span style="color: #000000; ">SCRIPT</span><span style="color: #000000; ">>&lt;\/</span><span style="color: #000000; ">td</span><span style="color: #000000; ">>/</span><span style="color: #000000; ">)<br />
</span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> array</span><span style="color: #000000; ">.</span><span style="color: #0000FF; ">length</span><span style="color: #000000; "> </span><span style="color: #000000; ">==</span><span style="color: #000000; "> </span><span style="color: #800000; ">2</span><span style="color: #000000; "><br />
pf</span><span style="color: #000000; ">.</span><span style="color: #0000FF; ">write</span><span style="color: #000000; ">(</span><span style="color: #000000; font-weight: bold; ">"</span><span style="color: #000000; font-weight: bold; ">#{array[0]}:#{eval(array[1])}\n</span><span style="color: #000000; font-weight: bold; ">"</span><span style="color: #000000; ">)<br />
end<br />
end<br />
end<br />
pf</span><span style="color: #000000; ">.</span><span style="color: #0000FF; ">close</span><span style="color: #000000; "><br />
end<br />
<br />
</span><span style="color: #008000; ">#</span><span style="color: #008000; ">#处理请求</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">def open_url_with_proxy(url)<br />
pf </span><span style="color: #000000; ">=</span><span style="color: #000000; "> File</span><span style="color: #000000; ">.</span><span style="color: #0000FF; ">open</span><span style="color: #000000; ">(</span><span style="color: #000000; font-weight: bold; ">"</span><span style="color: #000000; font-weight: bold; ">proxy.txt</span><span style="color: #000000; font-weight: bold; ">"</span><span style="color: #000000; ">,</span><span style="color: #000000; font-weight: bold; ">"</span><span style="color: #000000; font-weight: bold; ">r</span><span style="color: #000000; font-weight: bold; ">"</span><span style="color: #000000; ">)<br />
d </span><span style="color: #000000; ">=</span><span style="color: #000000; "> []<br />
pf</span><span style="color: #000000; ">.</span><span style="color: #0000FF; ">each</span><span style="color: #000000; "> { </span><span style="color: #000000; ">|</span><span style="color: #000000; ">line</span><span style="color: #000000; ">|</span><span style="color: #000000; "> d </span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; "> line }<br />
</span><span style="color: #0000FF; ">for</span><span style="color: #000000; "> var in d<br />
</span><span style="color: #0000FF; ">print</span><span style="color: #000000; "> </span><span style="color: #000000; font-weight: bold; ">"</span><span style="color: #000000; font-weight: bold; ">User Proxy #{var}\n</span><span style="color: #000000; font-weight: bold; ">"</span><span style="color: #000000; "><br />
begin<br />
proxy </span><span style="color: #000000; ">=</span><span style="color: #000000; "> Net</span><span style="color: #000000; ">::</span><span style="color: #000000; ">HTTP</span><span style="color: #000000; ">::</span><span style="color: #000000; ">Proxy(var</span><span style="color: #000000; ">.</span><span style="color: #0000FF; ">split</span><span style="color: #000000; ">(</span><span style="color: #000000; font-weight: bold; ">"</span><span style="color: #000000; font-weight: bold; ">:</span><span style="color: #000000; font-weight: bold; ">"</span><span style="color: #000000; ">)[</span><span style="color: #800000; ">0</span><span style="color: #000000; ">]</span><span style="color: #000000; ">,</span><span style="color: #000000; ">var</span><span style="color: #000000; ">.</span><span style="color: #0000FF; ">split</span><span style="color: #000000; ">(</span><span style="color: #000000; font-weight: bold; ">"</span><span style="color: #000000; font-weight: bold; ">:</span><span style="color: #000000; font-weight: bold; ">"</span><span style="color: #000000; ">)[</span><span style="color: #800000; ">1</span><span style="color: #000000; ">]</span><span style="color: #000000; ">.</span><span style="color: #000000; ">to_i)<br />
</span><span style="color: #0000FF; ">print</span><span style="color: #000000; "> proxy</span><span style="color: #000000; ">.</span><span style="color: #000000; ">get(URI</span><span style="color: #000000; ">.</span><span style="color: #000000; ">parse(url));<br />
</span><span style="color: #008000; ">#</span><span style="color: #008000; ">print proxy.start("www.google.com",80){|http|<br />
#  response = http.get('/index.html')<br />
#  puts response.body<br />
#}</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">      rescue<br />
</span><span style="color: #008000; ">#</span><span style="color: #008000; ">#吃掉异常</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">    end<br />
end<br />
end<br />
<br />
</span><span style="color: #008000; ">#</span><span style="color: #008000; ">#主程序</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">begin<br />
</span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> </span><span style="color: #000000; ">!</span><span style="color: #000000; ">FileTest</span><span style="color: #000000; ">.</span><span style="color: #000000; ">exist</span><span style="color: #000000; ">?</span><span style="color: #000000; ">( </span><span style="color: #000000; font-weight: bold; ">"</span><span style="color: #000000; font-weight: bold; ">proxy.txt</span><span style="color: #000000; font-weight: bold; ">"</span><span style="color: #000000; "> )<br />
find_all_proxy<br />
end<br />
open_url_with_proxy(</span><span style="color: #000000; font-weight: bold; ">'</span><span style="color: #000000; font-weight: bold; ">http://www.google.com/index.html</span><span style="color: #000000; font-weight: bold; ">'</span><span style="color: #000000; ">);<br />
end</span></div>
</strong></span></font></div>
这里需要注意的是代理服务器的端口不能是String类型,Ruby竟然不会自动转换,搞得我浪费了N多时间.
<img src ="http://www.blogjava.net/windonly/aggbug/234987.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/windonly/" target="_blank">Anemone</a> 2008-10-17 17:27 <a href="http://www.blogjava.net/windonly/archive/2008/10/17/234987.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ruby学习笔记一:安装Ruby与Ruby的爬虫应用</title><link>http://www.blogjava.net/windonly/archive/2008/10/15/234375.html</link><dc:creator>Anemone</dc:creator><author>Anemone</author><pubDate>Wed, 15 Oct 2008 02:11:00 GMT</pubDate><guid>http://www.blogjava.net/windonly/archive/2008/10/15/234375.html</guid><wfw:comment>http://www.blogjava.net/windonly/comments/234375.html</wfw:comment><comments>http://www.blogjava.net/windonly/archive/2008/10/15/234375.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/windonly/comments/commentRss/234375.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/windonly/services/trackbacks/234375.html</trackback:ping><description><![CDATA[最近终于空下来了,所以下个Ruby玩玩,安装Ruby很简单,去<a href="http://www.ruby-lang.org" target="_blank">官网</a>下载一个<a href="http://www.ruby-lang.org/en/downloads/" target="_blank">一键安装包</a>既可,linux下的安装,大家Google下就有很多教程了.对于IDE网上说NetBeans支持得很完美,但是因为本人比较喜欢Eclipse,所以还是跟大家推荐<a href="http://www.easyeclipse.org/site/distributions/ruby-rails.html" target="_blank">EasyEclipse for Ruby and Rails</a>,当然你可以选择只下RoR的插件而不弄个全新的Eclipse.<br />
以前一直在用Java写爬虫工具抓图片,对HttpClient包装,正则表达式处理那个是累啊,就算弄好了工具类,有时候一会又想不起来放哪儿,但Ruby对方面包装的就很强大,短短几十行代码就搞定了这一切:<br />
页面获取和文件下载的方法.<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000">util</span><span style="color: #000000">.</span><span style="color: #000000">rb</span><span style="color: #000000">:</span><span style="color: #000000"><br />
<br />
</span><span style="color: #0000ff">require</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #000000">'</span><span style="font-weight: bold; color: #000000">net/http</span><span style="font-weight: bold; color: #000000">'</span><span style="color: #000000"><br />
def&nbsp;query_url(url)<br />
&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;Net</span><span style="color: #000000">::</span><span style="color: #000000">HTTP</span><span style="color: #000000">.</span><span style="color: #000000">get(URI</span><span style="color: #000000">.</span><span style="color: #000000">parse(url));<br />
end<br />
<br />
def&nbsp;save_url(url</span><span style="color: #000000">,</span><span style="color: #000000">dir</span><span style="color: #000000">,</span><span style="color: #000000">filename)<br />
&nbsp;&nbsp;filename&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;url[url</span><span style="color: #000000">.</span><span style="color: #0000ff">rindex</span><span style="color: #000000">(</span><span style="font-weight: bold; color: #000000">'</span><span style="font-weight: bold; color: #000000">/</span><span style="font-weight: bold; color: #000000">'</span><span style="color: #000000">)</span><span style="color: #000000">+</span><span style="color: #800000">1</span><span style="color: #000000">,</span><span style="color: #000000">&nbsp;url</span><span style="color: #000000">.</span><span style="color: #0000ff">length</span><span style="color: #000000">-</span><span style="color: #800000">1</span><span style="color: #000000">]&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;filename&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;nil&nbsp;</span><span style="color: #000000">||</span><span style="color: #000000">&nbsp;filename</span><span style="color: #000000">.</span><span style="color: #000000">empty</span><span style="color: #000000">?</span><span style="color: #000000"><br />
&nbsp;&nbsp;</span><span style="color: #0000ff">require</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #000000">'</span><span style="font-weight: bold; color: #000000">open-uri</span><span style="font-weight: bold; color: #000000">'</span><span style="color: #000000"><br />
&nbsp;&nbsp;Dir</span><span style="color: #000000">.</span><span style="color: #0000ff">mkdir</span><span style="color: #000000">(</span><span style="font-weight: bold; color: #000000">"</span><span style="font-weight: bold; color: #000000">#{dir}</span><span style="font-weight: bold; color: #000000">"</span><span style="color: #000000">)&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;dir&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;nil&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">!</span><span style="color: #000000">dir</span><span style="color: #000000">.</span><span style="color: #000000">empty</span><span style="color: #000000">?</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">!</span><span style="color: #000000">FileTest</span><span style="color: #000000">.</span><span style="color: #000000">exist</span><span style="color: #000000">?</span><span style="color: #000000">(dir)<br />
&nbsp;&nbsp;</span><span style="color: #0000ff">open</span><span style="color: #000000">(url)&nbsp;</span><span style="color: #0000ff">do</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">|</span><span style="color: #000000">fin</span><span style="color: #000000">|</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;true<br />
&nbsp;&nbsp;&nbsp;&nbsp;File</span><span style="color: #000000">.</span><span style="color: #000000">new(</span><span style="font-weight: bold; color: #000000">"</span><span style="font-weight: bold; color: #000000">#{dir}#{filename}</span><span style="font-weight: bold; color: #000000">"</span><span style="color: #000000">,</span><span style="font-weight: bold; color: #000000">"</span><span style="font-weight: bold; color: #000000">wb</span><span style="font-weight: bold; color: #000000">"</span><span style="color: #000000">)</span><span style="color: #000000">.</span><span style="color: #0000ff">close</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">open</span><span style="color: #000000">(</span><span style="font-weight: bold; color: #000000">"</span><span style="font-weight: bold; color: #000000">#{dir}#{filename}</span><span style="font-weight: bold; color: #000000">"</span><span style="color: #000000">,</span><span style="font-weight: bold; color: #000000">"</span><span style="font-weight: bold; color: #000000">wb</span><span style="font-weight: bold; color: #000000">"</span><span style="color: #000000">)&nbsp;</span><span style="color: #0000ff">do</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">|</span><span style="color: #000000">fout</span><span style="color: #000000">|</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">&nbsp;buf&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;fin</span><span style="color: #000000">.</span><span style="color: #0000ff">read</span><span style="color: #000000">(</span><span style="color: #800000">1024</span><span style="color: #000000">)&nbsp;</span><span style="color: #0000ff">do</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fout</span><span style="color: #000000">.</span><span style="color: #0000ff">write</span><span style="color: #000000">&nbsp;buf<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;STDOUT</span><span style="color: #000000">.</span><span style="color: #000000">flush<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br />
&nbsp;&nbsp;&nbsp;&nbsp;end<br />
&nbsp;&nbsp;&nbsp;&nbsp;end<br />
&nbsp;&nbsp;end<br />
end</span></div>
<br />
抓取图片的具体应用:<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #0000ff">require</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #000000">"</span><span style="font-weight: bold; color: #000000">util</span><span style="font-weight: bold; color: #000000">"</span><span style="color: #000000"><br />
begin<br />
&nbsp;&nbsp;start_url&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #000000">'</span><span style="font-weight: bold; color: #000000">http://list.mall.taobao.com/1424/g-d-----40-0--1424.htm</span><span style="font-weight: bold; color: #000000">'</span><span style="color: #000000"><br />
&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">&nbsp;start_url&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;nil&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">!</span><span style="color: #000000">start_url</span><span style="color: #000000">.</span><span style="color: #000000">empty</span><span style="color: #000000">?</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">do</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">print</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #000000">"</span><span style="font-weight: bold; color: #000000">开始下载#{start_url}\n</span><span style="font-weight: bold; color: #000000">"</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;content&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;query_url(start_url)<br />
&nbsp;&nbsp;&nbsp;&nbsp;next_page&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;content</span><span style="color: #000000">.</span><span style="color: #000000">scan(</span><span style="color: #000000">/</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">a&nbsp;href</span><span style="color: #000000">=</span><span style="font-weight: bold; color: #000000">"</span><span style="font-weight: bold; color: #000000">(.*?)</span><span style="font-weight: bold; color: #000000">"</span><span style="color: #000000">&nbsp;class</span><span style="color: #000000">=</span><span style="font-weight: bold; color: #000000">"</span><span style="font-weight: bold; color: #000000">next-page</span><span style="font-weight: bold; color: #000000">"</span><span style="color: #000000">&gt;&lt;</span><span style="color: #000000">span</span><span style="color: #000000">&gt;</span><span style="color: #000000">下一页</span><span style="color: #000000">&lt;\/</span><span style="color: #000000">span</span><span style="color: #000000">&gt;&lt;\/</span><span style="color: #000000">a</span><span style="color: #000000">&gt;/</span><span style="color: #000000">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;next_url&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;nil<br />
&nbsp;&nbsp;&nbsp;&nbsp;next_url&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;next_page[</span><span style="color: #800000">0</span><span style="color: #000000">][</span><span style="color: #800000">0</span><span style="color: #000000">]&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;&nbsp;next_page&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;nil&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;next_page</span><span style="color: #000000">.</span><span style="color: #0000ff">length</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">0</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;next_page[</span><span style="color: #800000">0</span><span style="color: #000000">]</span><span style="color: #000000">.</span><span style="color: #0000ff">length</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">0</span><span style="color: #000000"><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;imgs&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;content</span><span style="color: #000000">.</span><span style="color: #000000">scan(</span><span style="color: #000000">/&lt;</span><span style="color: #000000">img&nbsp;src</span><span style="color: #000000">=</span><span style="font-weight: bold; color: #000000">"</span><span style="font-weight: bold; color: #000000">(http:\/\/img[\d].*?)</span><span style="font-weight: bold; color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">\/&gt;/</span><span style="color: #000000">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;img&nbsp;in&nbsp;imgs<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;url&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;img[</span><span style="color: #800000">0</span><span style="color: #000000">];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;save_url(url</span><span style="color: #000000">,</span><span style="font-weight: bold; color: #000000">"</span><span style="font-weight: bold; color: #000000">d:\\mall\\</span><span style="font-weight: bold; color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">nil)<br />
&nbsp;&nbsp;&nbsp;&nbsp;end<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;start_url&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;next_url;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">#</span><span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;break;</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;end<br />
<br />
end<br />
</span></div>
使用一天之后感觉ruby的语法很自然,很好理解,上手比较容易,而且相关包封装的也很好,确实比较适合拿来玩玩小程序.<br />
<img src ="http://www.blogjava.net/windonly/aggbug/234375.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/windonly/" target="_blank">Anemone</a> 2008-10-15 10:11 <a href="http://www.blogjava.net/windonly/archive/2008/10/15/234375.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>