2017-06-17 51 views
-1

我的应用程序需要刮掉从WTA网站数据:单排名和单路的排名(从球员排名第一的球员,以排名第1000)。排名可通过以下链接访问:http://www.wtatennis.com/rankings如何检索通过链接访问隐藏的网址掐灭以“#”

就在描绘两个单一排名类别中排名第一的球员的照片下面,有一个菜单可以访问所有排名类别:单人,双打,保时捷比赛单打,保时捷比赛双打。问题是,点击这些链接浏览器地址栏中的网址不会改变。 Web检查员显示这些链接全部使用与href="#"相同的<a>标签创建。

http://www.wtatennis.com/rankings url默认显示单个排名前100位玩家,所以我认为应该有一个隐藏的url专用于道路排名页面。起初,我想到了使用标签导航组织的单个文档,但是网络检查员表明他们都是不同的页面。

向下滚动页面到列表的底部,可以看到,上面的第100位排名的球员都是通过分页访问。分页链接也掐灭与’#’

<a class="footable-page-link" href="#">1</a> 
<a class="footable-page-link" href="#">2</a> 
<a class="footable-page-link" href="#">3</a> 
... 

因此,即使是在信息以上的玩家数量排名100的网址是隐藏的。

有什么办法可以访问所有这些隐藏的网址吗?
我写了一封信,ATP的副总裁兼总法律顾问,我得到了他使用这些网址的权限,但是当我明确地问他的第二封信中提供这样的信息,他回答说:“这些网址是所有在我们的网站和WTA网站上公开发布“。他认为自己有这个权利,他可能有更重要的事情要做,而不是与我私下通信(我怀疑第三封信会令人讨厌),但我认为我可能根本缺乏从他那里获取的知识他们的网站。

回答

3

作为一般规则,如果你看到

<a href="#">...</a> 

<a href="javascript:void(0)">...</a> 
在页面

,这意味着你正在寻找由JavaScript控制一个链接:该链接的点击被捕获通过一个事件监听器,通常在页面或祖先元素上,而“链接”的行为就是做JavaScript所做的任何事情。

对于您正在查看的页面,数据完全通过Ajax调用加载,由JavaScript启动:JS调用回当前页面的服务器,并获取一个scores.json blob然后用来重建表格。当你点击其中一个分页链接时,另一个Ajax调用就会被触发,页面也会相应地被重建。 (您可以在检查员的“网络”选项卡上观察Ajax呼叫及其响应。)

因此没有其他页面的链接,因此没有“隐藏的URL”供您获取:只有一个页面,并在您点击时使用新数据重建 - 所谓的“单页应用程序”(SPA)。

+0

我明白。我想我不得不放弃使用Nokogiri从SPA中刮去内容。 – Asarluhi

+1

是的,任何只关注HTML并忽略JavaScript的东西都可能无法理解单页应用程序中的任何东西。 –