这是我的问题:我被要求开发一个脚本,用于获取某位艺术家在Q102的Jingle Ball页面上的投票百分比,解析它并发布当前百分比以及艺术家的名字。推文的API是在AppleScript中完成的,它已经发送了一个我传递给它的自定义字符串。我现在唯一需要的是获取构建字符串的值。
现在,我尝试通过终端做一个简单的卷曲:
curl http://www.q102.com/pages/jb-brackets/
问题是,在任何民意调查中,当我卷曲时它甚至都没有得到输入类型(如果你访问页面并尝试投票,它们就是单选按钮),它只是在我卷曲时为艺术家显示这个'ed it(每个民意调查都有一个特定的ID - 这是包含我需要获取的数据的民意调查)。
<tr>
<td rowspan="3" class="poll-left"><p><b>Demi Lovato vs. <br>
Avril Lavigne</b></p>
<div id="start_poll_203988"></div>
<div id="poll_203988"></div>
<div id="stop_poll_203988">
<script language="javascript">
//<![CDATA[
insertPoll2('203988');
//]]>
</script>
当您为某位艺术家投票并按“投票”时,它会显示当前的投票百分比,如下所示:
黛米洛瓦托主场迎战 艾薇儿拉维尼 黛米洛瓦托 49.88% 艾薇儿拉维尼 50.12%我需要做的是提交投票并获取价值,因为统计数据仅在我提交投票后显示(在主页上)。投票后页面不会刷新。基本上,我需要的只是'49 .88%'和'50 .12%'(显然这些数据会有所不同)。
有没有办法用卷曲/其他东西做这个?
答案 0 :(得分:1)
由于您使用的是JavaScript,因此有两种选择。分析JS以查看它正在做什么,然后手动发送这些请求,或者您需要控制支持JS的应用程序 - Web浏览器。
在此处查看有关第一个选项的信息:https://stackoverflow.com/a/8304040/991805
至于第二个,根据我所知,我能够使用Ruby控制的Firefox来使用它。
require 'rubygems'
require 'watir-webdriver'
require 'nokogiri'
browser = Watir::Browser.new
browser.goto('http://www.q102.com/pages/jb-brackets/')
browser.radios[-1].focus
(browser.radios.length / 2).times do |i|
browser.radios[1].set
browser.buttons[1].click
browser.radios[0].focus
sleep 0.5
end
temp = []
source = Nokogiri::HTML(browser.html)
source.css('.brackets tbody tr td div tbody table tbody tr td').each {|a| temp << a.text.strip!}
browser.close
puts temp
这将输出:
Big Time Rush
55.15 %
Flo Rida
44.85 %
Lady GaGa
44.22 %
Kelly Clarkson
55.78 %
Demi Lovato
50.19 %
Avril Lavigne
49.81 %
Justin Bieber
48.26 %
Train
51.74 %
David Archuleta
45.92 %
Jordin Sparks
54.08 %
Adam Lambert
53.56 %
Pitbull
46.44 %
Joe Jonas
54.16 %
All Time Low
45.84 %
Selena Gomez
50.37 %
Katy Perry
49.63 %
此脚本适用于Mac,需要运行以下两个宝石(库):watir-webdriver和Nokogori。和Firefox一样。
检查Ruby是否已安装ruby -v
检查gem是否已安装gem -v
安装库gem install watir-webdriver nokogiri
运行脚本ruby ratings.rb