[英]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)
您可以执行以下操作:
If-modified-since
标头作为参数。 如果未修改,则此标头将返回304
状态代码。 Last-Modified
标头,并与当前存储页面的上次修改日期进行比较。 如果内容较新,请获取它。 HEAD
请求。 GET
将为您提供所有内容。 但是HEAD
只会返回标头。 对于此类查询,仅需要标题。 使用现有的搜寻器和搜索引擎框架比编写框架要好。
使用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.