使用ruby获取yobo的飙升榜

2024-06-25 14:13:43
这里使用ruby里面非常实用的库 mechanize和hpricot
sudo gem install hpricot
sudo gem install mechanize

首先准备两个文件

head.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="author" content=" [email]service@yobo.com[/email] "/>
<meta name="Copyright" content="www.yobo.com 版权所有,违者必究" />
            <title>飙升榜单 < YOBO - YOBO 友播 音乐DNA</title>
            <meta name="keywords" content="飙升榜单,YOBO,音乐DNA,音乐心理测试,音乐推荐,免费音乐,在线试听,YOBO,友播" />
            <meta name="description" content="在YOBO查看单曲飙升榜" />

<link rel="shortcut icon" href="/favicon.ico" />
<link href="http://assets.yobo.com/stylesheets/yobo_nav_v4.11590.css" media="screen" rel="Stylesheet" type="text/css" />
<link href="http://assets.yobo.com/stylesheets/yobo_base.10705.css" media="screen" rel="Stylesheet" type="text/css" />
<link href="http://assets.yobo.com/stylesheets/yobo_feed.11912.css" media="screen" rel="Stylesheet" type="text/css" />
<script src="http://assets.yobo.com/javascripts/base.9902.js" type="text/javascript"></script>
<script src="http://assets.yobo.com/javascripts/yobo_nav.10930.js" type="text/javascript"></script>
<script language="javascript" type="text/javascript" src="http://assets.yobo.com/javascripts/fckeditor/fckeditor.js"></script>
<script language="javascript" type="text/javascript" src="http://assets.yobo.com/javascripts/yobo_const_10839.js" charset="utf-8"></script>
<link href="http://assets.yobo.com/stylesheets/yobo_aggr.8548.css" media="screen" rel="Stylesheet" type="text/css" />
<script src="http://assets.yobo.com/javascripts/yobo_base.11954.js" type="text/javascript"></script>
<script src="http://assets.yobo.com/javascripts/yobo_aggr.7969.js" type="text/javascript"></script>

</head>

<body>
  <script type="text/javascript">
         var s_rise_playlist = [];
  </script>
                <form id="aggrmusicrise_risetable" class="aggr_block" onsubmit="return false;">  
                        <table class="aggrmusic_risetable" cellpadding="0" cellspacing="0">

end.html
</table>                            
</form>

<div id="yobosongplayerblock" style="height:1px;">
        <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,45,0" width="1" height="1" id="pagesongplayer" align="middle">
                <param name="allowScriptAccess" value="always" />
                <param name="movie" value="http://assets.yobo.com/flash/sh/shell.swf" />
                <param name="quality" value="high" />
                <param name="bgcolor" value="#ffffff" />
                <embed src="http://assets.yobo.com/flash/sh/shell.swf" quality="high" bgcolor="#ffffff" width="1" height="1" name="pagesongplayer" align="middle" allowScriptAccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"> </embed>
        </object>
        <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,45,0" width="1" height="1" id="popconnector" align="middle">
                <param name="allowScriptAccess" value="always" />
                <param name="movie" value="http://assets.yobo.com/flash/pop/local_8657.swf" />
                <param name="quality" value="high" />
                <param name="bgcolor" value="#ffffff" />
                <embed src="http://assets.yobo.com/flash/pop/local_8657.swf" quality="high" bgcolor="#ffffff" width="1" height="1" name="popconnector" align="middle" allowScriptAccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"> </embed>
        </object>
</div>
        <div id="yoboaggr_floathintdialog" style="position:absolute; width:290px; left:0px; top:0px; display:none; z-index:4000;">
        <div style="height:7px; font-size:1px; background:url(/p_w_picpaths/icons/aggr_floathintbg.gif) no-repeat left bottom;"> </div>
        <div style="border-left:1px solid #c2d7ea; border-right:1px solid #c2d7ea; border-bottom:1px solid #c2d7ea; padding:3px 8px; background-color:#f4faff; line-height:20px; color:#006ad0;">
                <div id="yoboaggr_floathintdialogheader" style="font-weight:bold; display:none;"></div>
                <div id="yoboaggr_floathintdialogcontent"></div>
        </div>
</div>
        <div style="position:absolute; left:-1000px; top:-1000px">
        <img src="/p_w_picpaths/icons/yoboheaderlinkbg.gif" />
        <img src="/p_w_picpaths/icons/leftbar_linkbg.gif" />
        <img src="/p_w_picpaths/icons/leftbar_coloricons.gif" />
        <img src="/p_w_picpaths/icons/leftbar_hovericons.gif" />
        <img src="/p_w_picpaths/icons/indexme_feedbg2.gif" />
        <img src="/p_w_picpaths/icons/userbox_iconcolor.gif" />
</div>
        <script language="javascript" type="text/javascript">
        //initPageInterface();
        window.setTimeout('initPageInterface()', 1000);
        //Event.observe(window, "load", yobo_oninitpageplayer.bindAsEventListener(this));
</script>
</div>
<script language="javascript" type="text/javascript">
        var v = "0.0424833368770254";
</script>
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write("\<script src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'>\<\/script>" );
</script>
<script type="text/javascript">
var pageTracker = _gat._getTracker("UA-848223-1");
pageTracker._initData();
pageTracker._trackPageview();
</script>
</body>
</html>

然后呢, 打开你最习惯的代码编辑器, 使用如下代码
yobo_music.rb
require "rubygems"
require "mechanize"

agent = WWW::Mechanize.new
page = agent.get "http://www.yobo.com/s/rise?fr=2"
musics = page.search "//td.risesong"
tm = File.new("tm.html", "w+")
head = File.new("head.html", "r")
tm.syswrite head.read
head.close
musics.each do |music|
    tm.syswrite "<tr>"
    tm.syswrite music.to_html
    tm.syswrite "</tr>"
end

end_file = File.new("end.html", "r")
tm.syswrite end_file.read
end_file.close

tm.close

最后, 我未检测过是否必须登录才可以听歌, 如果确实要登录, 你可以尝试这样
yobo_login.rb
require "rubygems"
require "mechanize"

agent = WWW::Mechanize.new
page = agent.get    "http://www.yobo.com/s/rise?fr=2"
forms = page.forms
login_form = form[3]

#用户邮箱
login_form.fields[0] = "[email]xxx@xxx.com[/email]"
#密码
login_form.fields[1] = "xxxxxxxx"

#登录
page = agent.submit login_form

转载于:https://blog.51cto.com/andyss/100945

使用ruby获取yobo的飙升榜相关推荐

  1. Python下载网易云音乐(云音乐飙升榜)

    最近突然想用python写一个自动下载的工具,于是就先拿网易云来练练手,并把过程中的心得写下来便于后面有想玩这个的童鞋们参考. 首先我们分析网页源码,找到我们想要的获取数据位置: 每一个标签对应着飙升 ...

  2. 【爬虫实战项目】Python爬虫批量下载音乐飙升榜并保存本地(附源码)

    前言 今天给大家介绍的是Python爬虫批量下载音乐飙升榜并保存本地,在这里给需要的小伙伴们代码,并且给出一点小心得. 首先是爬取之前应该尽可能伪装成浏览器而不被识别出来是爬虫,基本的是加请求头,但是 ...

  3. 实战 SQL:亚马逊、京东等电商平台的销售排行榜和飙升榜

    文章目录 示例表和数据 按照产品分类的销售排行榜 按照产品分类的销量飙升榜 总结 大家好,我是只谈技术不剪发的 Tony 老师.不知道你有没有注意过,在亚马逊或者京东等电商平台的网站上都提供了准实时的 ...

  4. 数据可视化matplotlib(一)---亚马逊销售飙升榜

    数据可视化是数据分析的重要任务之一. 之前有获取到亚马逊销售飙升榜的数据,但是排名只是按列表顺序排序,销售排名上升的幅度只有数字的变化,体现的不是很直观. 所以使用python的matplotlib实 ...

  5. Python批量下载网易云音乐飙升榜所有音乐文件

    Python小屋刷题神器最近升级的新功能介绍 推荐教材:<Python程序设计基础与应用>(ISBN:9787111606178),董付国,机械工业出版社,2018.8出版,2021.3第 ...

  6. Ruby 获取 HTTP 回应的编码和内容

    Ruby 获取 HTTP 回应的编码和内容 require 'net/http' response = Net::HTTP.get_response('www.oschina.net, '/code/ ...

  7. 《程序员羊皮卷》荣升当当IT图书飙升榜第一名

    <程序员羊皮卷>三章免费下载版地址:http://download.csdn.net/source/1766653 当当购买地址:http://product.dangdang.com/p ...

  8. python爬取网易云音乐飙升榜音乐_python爬取网易云音乐热歌榜单(获取iframe中数据,src为空)...

    一.分析思路 网易云音乐热歌榜的页面采用嵌入内联框架的方式,若爬虫直接从官网入口进入访问热歌榜 http://music.163.com/#/discover/toplist?id=3778678,是 ...

  9. Python爬取Boss直聘,获取全国Python薪酬榜

    深感抱歉 本来这篇文章应该是在昨天发的,可是电脑出了问题蓝屏了.晚上回来重装了系统,结果还是搞到了现在. 今天想和大家聊聊Python与爬虫 python之所以能迅速风靡全国,和大街小巷各种的培训机构 ...

最新文章

  1. C#使用WIN32API来高效率的遍历文件和目录(转)
  2. tlias 教学过程_2020年Java生存现状!建议程序员了解一下!
  3. *.bmp序列保存为*.raw文件[matlb实现]
  4. 虚拟机和linux的安装
  5. java面试题4 牛客:运行下列代码,运行结果为
  6. git commit 规范校验配置和版本发布配置
  7. 用FolderBrowserDialog选择一个文件路径
  8. throw er; // Unhandled 'error' event 和Error: listen EADDRNOTAVAIL 192.168.0.109:8081
  9. 审批流程jquery进度条
  10. 16进制颜色代码#FF000000 (css颜色值)
  11. win7与VMware/VBox下linux共享文件夹方法
  12. 会计分录、科目、账户
  13. java吸血鬼数字_[求助]吸血鬼数字
  14. 每日一题——洛谷 P1551 亲戚 (并查集)
  15. 如何像Python高手(Pythonista)一样编程
  16. Opencv2.4.9源码分析——Stitching(四)
  17. 【职场和发展】女性职场励志话精选
  18. 均值与期望到底是不是一回事?
  19. LiFi网络优劣势解析
  20. 数据结构精品电子书分享之《数据结构》算法实现及解析

热门文章

  1. Linux 企业级安全原理和防范技巧
  2. C#窗体项目————影院售票系统
  3. html5加内边框,css3怎么加内边框
  4. 国外一些好用的UX/UI设计工具和资源分享
  5. U盘文件或目录损坏且无法读取怎么解决
  6. 【Bzoj1875】HH去散步
  7. 在Python里通过Pandas和pymysql库批量修改MySQL数据库的字段名称和字段类型
  8. CVAE (条件 变分 自动编码器)
  9. Android 文件夹放大缩小仿IOS融合动画效果
  10. 可能是西半球最好用的低代码平台 - Retool 功能介绍与使用体验