重要更新:在@老赵的提醒下,如果在请求中加入“Accept-Encoding: gzip, deflate”,下面的问题就会自动消失。具体见文章末尾。

  两年前我用C#写了一个爬虫类,一直在用。今天终于出错了。让我代码出错的页面是:http://www.hacker.org/challenge/solvers.php?id=1

  这个页面非常之强大,好多简单的爬虫都失效了,比如这段C#代码:

WebClient webClient = new WebClient();
webClient.DownloadData("http://www.hacker.org/challenge/solvers.php?id=1")

  还有php的curl(参考示例),以及Python的opener等,如果直接调用,都会中枪。

  当然,一般的浏览器都能毫无压力正常打开这个页面。

  用上述简易方式下载网页,最后都只能下载到 72k 的内容,但是实际上,这个页面有200多K。剩下的这个内容为什么不能直接抓取到呢?下面来分析一下这朵奇葩,并且给出解决方案。

继续阅读