繁体   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