【问题标题】:How to retrieve hidden urls accessible through links stubbed out with ’#’如何检索可通过带有 '#' 的链接访问的隐藏 URL
【发布时间】:2017-11-20 04:57:30
【问题描述】:

我的应用程序需要从 WTA 网站上抓取数据:单人排名和单路排名(从排名第一的选手到排名第 1000 位的选手)。排名可通过以下链接访问:http://www.wtatennis.com/rankings

在两个单人排名类别中排名第一的球员的图片下方,有一个用于访问所有排名类别的菜单:单人、双打、保时捷单打、保时捷双打。问题是点击这些链接,浏览器地址栏中的 url 不会改变。 Web 检查器显示这些链接都是使用相同的<a> 标记和href="#" 创建的。

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 网站上找到”。理所当然地认为他对此有权利,而且他可能有比与我私下通信更重要的事情要做(我怀疑第三封信会很烦人),我想我可能只是缺乏从那里取回它们的知识他们的网站。

【问题讨论】:

    标签: javascript html ruby nokogiri web-inspector


    【解决方案1】:

    一般来说,如果你看到

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

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

    在页面中,这意味着您正在查看由 JavaScript 控制的链接:对该链接的点击被事件侦听器捕获,通常在页面或祖先元素上,并且“链接”的行为是做任何 JavaScript 让它做的事情。

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

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

    【讨论】:

    • 我明白了。我想我必须放弃使用 Nokogiri 从 SPA 中抓取内容。
    • 是的,任何只查看 HTML 而忽略 JavaScript 的东西都可能无法理解单页应用程序中的大部分内容。
    猜你喜欢
    • 2021-07-07
    • 2013-01-30
    • 2012-04-05
    • 1970-01-01
    • 2017-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多