如何模拟rb文件中的选项标记选择

时间:2017-02-02 16:01:53

标签: ruby-on-rails ruby ajax nokogiri

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调用。

1 个答案:

答案 0 :(得分:1)

打开开发人员工具并检查{page}选项卡,您可以看到当您更改select中的选项时,该页面会触发一个获取其他结果的ajax调用。

解析此信息的一种策略是:

  • 从选择
  • 中获取选项数量
  • 通过它为每个页面进行ajax调用进行迭代
  • 解析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}}

希望这有帮助。