PHP的file_get_contents()返回导致页面不完整的URL结构

时间:2010-08-16 01:34:50

标签: php mod-rewrite screen-scraping

我一直在使用PHP进行一些搜索并在特定域上获得一些奇怪的结果。例如,当我下载此页面时:

http://pitchfork.com/reviews/tracks/

工作正常。但是,如果我尝试下载此页面:

http://pitchfork.com/reviews/tracks/1/

它返回一个不完整的页面,即使内容完全相同。所有后续页面(曲目/ 2 /,曲目/ 3 /等)也会返回不完整的数据。

在分页期间URL的形成方式似乎存在问题。网站上的大多数其他部分都表现出相同的行为(着陆页有效,但不是后续页面)。这一部分有一个例外:

http://pitchfork.com/forkcast/

forkcast / 2 / etc的工作正常。这可能是因为它只是一个深度目录,其中大多数其他部分是多个深度目录。

我似乎已经掌握了导致问题的原因,但不是为什么或如何解决问题。

有什么想法吗?

我尝试过使用file_get_contents()和cURL,两者都给出相同的结果。

有趣的是,在所有不起作用的页面上,不完整的页面大约有16,000个字符。这是一个线索吗?

我创建了一个测试页面,您可以在其中看到差异:

http://fingerfy.com/test.php?url=http://pitchfork.com/reviews/tracks/

http://fingerfy.com/test.php?url=http://pitchfork.com/reviews/tracks/1/

它打印strlen()和下载页面的内容(加上它使相对url成为绝对,所以CSS是正确的。)

任何提示都会很棒!

更新:Mowser优化了移动设备页面,这些页面没有问题(http://mowser.com/web/pitchfork.com/reviews/tracks/2/)所以必须这样做才能做到这一点而不会失败....

1 个答案:

答案 0 :(得分:0)

看起来干草叉正在运行带有“人类”网址的CMS。这意味着/ review / tracks会显示列出多个帖子的“主页”,但“/ reviews / tracks / 1”只会显示“评论#1”。他们可能已将CMS配置为仅输出固定长度的摘录,或者输出过滤器配置错误,并尽早切断各个帖子页面。

我尝试使用wget获取/ track / 1到/ tracks / 6,并且它们都有不同的内容,这些内容完全终止于16,097字节,通常位于标记的中间。所以,这不是你可以修复的任何东西,因为它是网站本身发送错误数据。