【发布时间】:2019-05-19 13:52:06
【问题描述】:
我一直在尝试从网页中提取一些数据,它使用一些特殊的方法来检测我需要绕过的机器人。
我首先不得不绕过烦人的CAPTCHA,但现在又出现了另一个问题。
网页使用(似乎是)随机链接生成器为我提供我想要的数据。在浏览器上,只有一个按钮可见,但通过查看源代码,我在同一区域看到多个随机生成的按钮,如下所示:
...
<div id='BA405352A9' style='display:none;'><button type="button" value="Upgrade level" class="build" onclick="window.location.href = 'dorf2.php?a=20&c=A230134'; return false;">
<div class="button-container"><div class="button-position"><div class="btl"><div class="btr"><div class="btc"></div></div></div>
<div class="bml"><div class="bmr"><div class="bmc"></div></div></div><div class="bbl"><div class="bbr"><div class="bbc"></div></div></div>
</div><div class="button-contents">Enter</div></div></button></div><div id='075A1762B3' style='display:none;'><button type="button" value="Upgrade level" class="build" onclick="window.location.href = 'dorf2.php?a=20&c=7294A7B'; return false;">
<div class="button-container"><div class="button-position"><div class="btl"><div class="btr"><div class="btc"></div></div></div>
<div class="bml"><div class="bmr"><div class="bmc"></div></div></div><div class="bbl"><div class="bbr"><div class="bbc"></div></div></div>
</div><div class="button-contents">Enter</div></div></button></div><div id='453A2A0469' style='display:none;'><button type="button" value="Upgrade level" class="build" onclick="window.location.href = 'dorf2.php?a=20&c=9646432'; return false;">
<div class="button-container"><div class="button-position"><div class="btl"><div class="btr"><div class="btc"></div></div></div>
<div class="bml"><div class="bmr"><div class="bmc"></div></div></div><div class="bbl"><div class="bbr"><div class="bbc"></div></div></div>
</div><div class="button-contents">Enter</div></div></button></div><div id='302B375583' style='display:none;'><button type="button" value="Upgrade level" class="build" onclick="window.location.href = 'dorf2.php?a=20&c=933A29B'; return false;">
<div class="button-container"><div class="button-position"><div class="btl"><div class="btr"><div class="btc"></div></div></div>
<div class="bml"><div class="bmr"><div class="bmc"></div></div></div><div class="bbl"><div class="bbr"><div class="bbc"></div></div></div>
</div><div class="button-contents">Enter</div></div></button></div><div id='08171153B4' style='display:none;'><button type="button" value="Upgrade level" class="build" onclick="window.location.href = 'dorf2.php?a=20&c=3447182'; return false;">
<div class="button-container"><div class="button-position"><div class="btl"><div class="btr"><div class="btc"></div></div></div>
<div class="bml"><div class="bmr"><div class="bmc"></div></div></div><div class="bbl"><div class="bbr"><div class="bbc"></div></div></div>
</div><div class="button-contents">Enter</div></div></button></div><div id='20813B7B10' style='display:none;'><button type="button" value="Upgrade level" class="build" onclick="window.location.href = 'dorf2.php?a=20&c=6B96496'; return false;">
<div class="button-container"><div class="button-position"><div class="btl"><div class="btr"><div class="btc"></div></div></div>
<div class="bml"><div class="bmr"><div class="bmc"></div></div></div><div class="bbl"><div class="bbr"><div class="bbc"></div></div></div>
</div><div class="button-contents">Enter</div></div></button></div><div id='6661917AB6' style='display:none;'><button type="button" value="Upgrade level" class="build" onclick="window.location.href = 'dorf2.php?a=20&c=9AA8604'; return false;">
<div class="button-container"><div class="button-position"><div class="btl"><div class="btr"><div class="btc"></div></div></div>
<div class="bml"><div class="bmr"><div class="bmc"></div></div></div><div class="bbl"><div class="bbr"><div class="bbc"></div></div></div>
</div><div class="button-contents">Enter</div></div></button></div><div id='1646980B02' style='display:none;'><button type="button" value="Upgrade level" class="build" onclick="window.location.href = 'dorf2.php?a=20&c=5841731'; return false;">
<div class="button-container"><div class="button-position"><div class="btl"><div class="btr"><div class="btc"></div></div></div>
<div class="bml"><div class="bmr"><div class="bmc"></div></div></div><div class="bbl"><div class="bbr"><div class="bbc"></div></div></div>
</div><div class="button-contents">Enter</div></div></button></div></div><script language="javascript">
...
根据来源,最初的 HTTP GET 请求似乎只包含不可见的按钮,并且不知何故在 CSS 加载后“正确”按钮变得可见?
我对这样的设计(或一般的网站设计)没有那么丰富的经验。它们是如何工作的?我怎样才能模仿浏览器的行为来绕过它们?
【问题讨论】:
-
也许您可以购买许可证并访问 api...?
-
@thebjorn 不幸的是,这样的 API 还不存在
-
这似乎是一个应该通过电子邮件发送给网站所有者的问题。显然,他们不希望机器人抓取他们的网站,所以也许你可以达成某种协议。
-
很可能 css 被键入到唯一 id。由于样式可以从其他样式继承,如果样式没有通过多层进行混淆,我会感到惊讶。
-
该网站最后一次更新是在 2012 年!我认为在这个阶段,任何头脑正常的人都不会想要寻找 API 或联系开发人员。至于我是否“被允许”这样做,像这样的网页不会问我是否“允许”使用我的私人信息,或者是否“允许”记录我的行为并让我不知所措带广告。所以我认为我可以从这个网站上抓取任何我想要的东西。
标签: python web-scraping python-requests