簡體   English   中英

如何在網頁標題中獲取Content-Length或CRC?

[英]How to get Content-Length or CRC in header of a web page?

我為特殊的動態網站編寫了一個搜尋器。 所有抓取作業都需要3個小時以上。 我想控制頁面已經被抓取或頁面上有一些更改。 如果我能做到這一點,該腳本將在很短的時間內完成。

例如:

    foreach ($urls as $url) {
        if(thereAreChanges($url)){
            crawl($url);
        }
    }

信息:網頁不提供內容長度和crc。

Array ( [0] => HTTP/1.1 200 OK 
        [Date] => Tue, 08 Jan 2013 07:47:03 GMT 
        [Server] => Apache 
        [Set-Cookie] => Array ( 
                [0] => PHPSESSID=eisb6qjme9b0ouoga9su9fgok4; path=/  
                [1] => j12011=a%3A3%3A%7Bs%3A3%3A%22sid%22%3Bs%3A26%3A%22eisb6qjme9b0ouoga9su9fgok4%22%3Bs%3A2%3A%22ip%22%3Bs%3A12%3A%2294.103.47.65%22%3Bs%3A4%3A%22time%22%3Bi%3A1357631223%3B%7D; expires=Sat, 09-Mar-2013 07:47:03 GMT; path=/  
        ) 
        [Expires] => Thu, 19 Nov 1981 08:52:00 GMT 
        [Cache-Control] => no-store, no-cache, must-revalidate, post-check=0, pre-check=0 
        [Pragma] => no-cache 
        [Vary] => Accept-Encoding 
        [Connection] => close 
        [Content-Type] => text/html 
)

該站點提供Content-Type,但不提供Content-Length。 我怎樣才能要求內容長度為apache。

更新: http : //urivalet.com/可以獲取內容長度。 我需要這個。

如果我可以在頁眉中獲取頁面的CRC代碼。 這將是完美的。 但是我想這是遠景。

在函數thereAreChanges($url)您可以執行以下操作:

  1. 發送請求時,發送帶有上次您訪問該頁面的If-modified-since標頭作為參數。 如果未修改,則此標頭將返回304狀態代碼。
  2. 檢查響應的Last-Modified標頭,並與當前存儲頁面的上次修改日期進行比較。 如果內容較新,請獲取它。
  3. 如果可能,請使用這些標頭執行HEAD請求。 GET將為您提供所有內容。 但是HEAD只會返回標頭。 對於此類查詢,僅需要標題。
  4. 4。

使用現有的搜尋器和搜索引擎框架比編寫框架要好。

使用Apaches Nutch爬網網頁,使用Solr搜索索引頁面。 Solr提供了一個HTTP接口,您可以在其中通過PHP運行查詢。 為了獲得更大的靈活性,您可以使用Lucene

這是有關如何設置Nutch和Solr的教程

解決方案是'header'=>"Accept-Encoding: gzip"

這就是標題不返回Content-Length的原因,使用此參數頁面返回content-length。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM