The rankings page of the WTA website显示了前100名网球运动员的名单。
<option>
标记与<select>
标记一起使用以显示选项列表,以便用户可以选择排名在101和200位置之间的玩家等等(由100名玩家组成)
我想使用Nokogiri
来抓取此页面中的信息。
对于前100名玩家,我可以使用原始网址。但是,当用户选择不同范围的玩家时,网址不会更改,但我习惯将/pag/101
/pag/201
/pag/301
等添加到上述网址中。这个技巧很有效,但是新的网址不太可靠。我经常收到HTTPError: 504 Gateway Time-out
错误。
所以我可能会留在原始地址并模拟选项标签中的选项。
网站可能会使用Ajax
刷新页面上的信息。
在刷新页面之前,我注意到了一个带有Web检查器的<div class="ajaxLoader">
元素。
我找到了<option>
标签的xPath表达式&#39;内容:
//div[@id='jump1']/div[@class='jump-to']/select[@class='rankings-rank-change']/option[@value='1']
更改@value
会选择不同的选项。
我想知道是否有任何方法可以从页面触发这些值并在rb文件中进行Ajax调用。
答案 0 :(得分:1)
打开开发人员工具并检查{page}
选项卡,您可以看到当您更改select中的选项时,该页面会触发一个获取其他结果的ajax调用。
解析此信息的一种策略是:
网址为http://www.wtatennis.com/fragment/wtaTennis/fragments/assets/rankings/rankingsData/type/SINGLES/date/02022017/pag/ {page},您需要在其中更改make request to first page: http://www.wtatennis.com/singles-rankings
parse the first 100 results, get data
get the number of pages from the select
make request to i page: http://www.wtatennis.com/fragment/wtaTennis/fragments/assets/rankings/rankingsData/type/SINGLES/date/02022017/pag/i
parse results from this one
next index on loop
now you have all the data
循环内的数字。
代码应如下所示:
{{1}}
希望这有帮助。