2010-08-16 65 views
0

我一直在做一些PHP的拼湊,並在特定的域上得到一些奇怪的結果。例如,當我下載此頁:導致不完整頁面由PHP的file_get_contents()返回的URL結構

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

它工作正常。但是,如果我嘗試下載此頁:

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

它返回一個不完整的頁面,即使內容是完全一樣的。隨後的所有頁面(曲目/ 2 /,曲目/ 3 /等)也會返回不完整的數據。

這似乎是分頁期間URL形成的問題。網站上的大多數其他部分都顯示相同的行爲(着陸頁起作用,但不包括後續頁面)。一個例外是本節:

http://pitchfork.com/forkcast/

凡forkcast/2 /等做工精細。這可能是由於它只有一個目錄深,其中大部分其他部分都是多個目錄。

我似乎已經掌握了什麼是導致問題的原因,但不是爲什麼或如何解決問題。

任何想法?

我已經嘗試使用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是正確的)。

任何提示都會很棒!

UPDATE:Mowser,這爲移動優化的頁面與這些頁面沒有問題(http://mowser.com/web/pitchfork.com/reviews/tracks/2/),所以必須有一個辦法做到這一點沒有它失敗....

+1

一個快速觀察 - 似乎網頁的公平位是使用Javascript動態創建的(函數如'GA_googleFillSlot(「Strip_Reviews」);'在源代碼中提及)。只是不確定這樣加載時是否仍然可以可靠運行。值得測試的是將''插入頭部。 – 2010-08-16 02:41:51

+0

感謝Lucanos,但問題更深入。當你抓取頁面時,它只抓取第一個16kb。剩下的部分丟失了,包括頁腳和關閉body/html標籤等等。頁面服務點出了問題...... – 2010-08-16 10:14:32

回答

0

它看起來像叉子的運行與CMS 「人類」網址。這意味着/評論/曲目會顯示一個包含多個帖子的「主頁」,但「/ reviews/tracks/1」只會顯示「評論#1」。可能他們已經將CMS配置爲僅輸出固定長度的摘要,或者輸出過濾器配置錯誤,並儘早切斷各個帖子頁面。

我已經嘗試使用wget獲取/跟蹤/ 1到/跟蹤/ 6,它們都有不同的內容,完全終止於16,097字節,通常位於標記的中間。所以,這不太可能是你能夠解決的任何問題,因爲這是網站本身發送的不良數據。

+0

是的,絕對是與'人類'網址有關的。然而,還有一些奇怪的事情發生了: a)評論主頁和頁面1應該返回完全相同的數據(如他們在瀏覽器中那樣),但其中一個正常工作,另一個不工作 b)不像所有其他(http://pitchfork.com/forkcast/)工作得很好,其中包括後續頁面 c)不完整的頁面總是16kb 這暗示了它在16kb處沖洗輸出,而是而不是輸出整個頁面。我仍然有希望,因爲在瀏覽器中查看頁面時可以很好地抓取頁面。 .. – 2010-08-16 10:24:37