1

我认为谷歌表格的变化是罪魁祸首。我一直在将此查询//table[@class='coupon']//a/@href与此网页https://smarkets.com/sport/football/europe-uefa-champions-league-2016-2017/coupon和 IMPORTXML 一起使用,它在 Google 表格中运行良好。当我在网页本身上使用 xPath 帮助器进行检查时,它仍然可以正常工作,但它现在不会在 Google 表格中显示结果。

一直说找不到数据。

4

1 回答 1

0

简短的回答

由于网页进行了检查,Google 服务器无法访问所需的表。如果他们过去能够做到这一点,那么这是由于源站点最近发生了变化。

解释

更新

注意:由于一些评论,之前的答案内容下移了。

概述

该页面在显示目标源代码之前会进行检查,如果检查成功,则浏览器会自动将用户重定向到目标源代码,但 Google 服务器无法访问该代码。

我如何得出上述结论

搜索用户代理和谷歌表格导入功能,我发现

错误“无法检索数据。” 带 importData() 函数

这是 Google 产品帮助论坛上的 Docs 论坛上的帖子。它没有答案,但 OP 提到他使用 curl 并显示了包含用户代理的结果。所以我尝试了 http://onlinecurl.com/。这是摘录

<body id="iuam" class="">
<div id="flexmad">
<h1>Checking your browser</h1>
<img role="presentation" id="center-image" src= removed-to-save-space>

<p>Please wait while we perform a quick security check. This should take no longer than 5 seconds.</p>
<noscript>
<p class="error">Please enable JavaScript to contiune.</p>
</noscript>
</div>
<div id="cf-check"><div class="cf-browser-verification cf-im-under-attack">
  <noscript><h1 data-translate="turn_on_js" style="color:#bd2426;">Please turn JavaScript on and reload the page.</h1></noscript>
  <div id="cf-content" style="display:none">
    <div>
      <div class="bubbles"></div>
      <div class="bubbles"></div>
      <div class="bubbles"></div>
    </div>
    <h1><span data-translate="checking_browser">Checking your browser before accessing</span> smarkets.com.</h1>
    <p data-translate="process_is_automatic">This process is automatic. Your browser will redirect to your requested content shortly.</p>
    <p data-translate="allow_5_secs">Please allow up to 5 seconds&hellip;</p>
  </div>
  <form id="challenge-form" action="/cdn-cgi/l/chk_jschl" method="get">
    <input type="hidden" name="jschl_vc" value="e682f28a4d346769bed1f10a12224954"/>
    <input type="hidden" name="pass" value="1474651532.013-aR/miMPEsh"/>
    <input type="hidden" id="jschl-answer" name="jschl_answer"/>
  </form>
</div>
</div>

</body>

原始答案

IMPORTXML 只能导入页面源代码中的元素,在这种情况下,<table class="coupon">会显示标签,因此我们可以放弃问题是由于从另一个文件加载内容引起的。

使用//a/@hrefIMPORTXML 返回多个结果,但不是来自 table 标记。IMPORTHTML 和 IMPORTDATA 也不起作用,因此主机站点很可能阻止了对内容的某些部分的访问,在这种情况下是对所需表的访问,以及对 Google 服务器的访问。

我还不知道如何做到这一点,但我认为它与网站 robots.txt 相关:

user-agent: sitebot
disallow: /

user-agent: AhrefsBot
disallow: /

User-agent: MJ12bot
Disallow: /

User-agent: *
Disallow: /account/withdraw/
Disallow: /account/deposit/
Disallow: /account/limits/
Disallow: /sport/market-aggregates

参考

robots.txt - 维基百科

于 2016-09-23T14:11:59.413 回答