Chinaunix

标题: 抓取网页的问题 [打印本页]

作者: greatho1507    时间: 2008-08-20 10:25
标题: 抓取网页的问题
抓取网页,先发送head,返回的信息只有expires,无last modifed.
如何根据http头返回的expires判断网页是否更新
比如返回的是
expires=Saturday, 20-Aug-11 02:11:46 GMT

是把这个时间和系统的时间比较看expires比系统时间(假设系统时间是正确的当前时间)迟还是早,迟就不用更新即重新抓网页,早就重新抓网页吗?

还是有其他方法呢?
作者: qliu00    时间: 2008-08-20 10:59
直接写socket程序获取当前的网页内容存入buffer中
作者: happy_fish100    时间: 2008-08-20 11:02
标题: 回复 #1 greatho1507 的帖子
expires和网页是否更新没有关系。
网页最后更新时间需要看last modifed这个字段。
作者: greatho1507    时间: 2008-08-20 11:02
晕,我要判断网页是否更新,如果没有更新我就不抓取。。。
作者: greatho1507    时间: 2008-08-20 11:03
原帖由 happy_fish100 于 2008-8-20 11:02 发表
expires和网页是否更新没有关系。
网页最后更新时间需要看last modifed这个字段。


expires
不是说网页的有效时间吗?
在有效时间内就不用重新抓取网页而是用缓存中的数据?
作者: happy_fish100    时间: 2008-08-20 11:07
标题: 回复 #4 greatho1507 的帖子
绝大多数网站都不会设置last modifed这个header
作者: converse    时间: 2008-08-20 11:08
试试这个,我也不太清楚:

The HEAD Method

A HEAD request is just like a GET request, except it asks the server to return the response headers only, and not the actual resource (i.e. no message body). This is useful to check characteristics of a resource without actually downloading it, thus saving bandwidth. Use HEAD when you don't actually need a file's contents.

The response to a HEAD request must never contain a message body, just the status line and headers.


http://jmarshall.com/easy/http/
作者: converse    时间: 2008-08-20 11:09
标题: 回复 #6 happy_fish100 的帖子
如果是这样的话,LZ的问题似乎就没办法解决了....期待更好的答案.
作者: happy_fish100    时间: 2008-08-20 11:09
标题: 回复 #5 greatho1507 的帖子
你说得也没错。如果要根据expires来判断也是可行的。大多数网页都不会设置expires的。
作者: greatho1507    时间: 2008-08-20 11:17
原帖由 happy_fish100 于 2008-8-20 11:09 发表
你说得也没错。如果要根据expires来判断也是可行的。大多数网页都不会设置expires的。




根据expires来判断也是可行的?
按照我说的用系统时间和expires来判断?还是有其他的方法?
浏览器又是如何做到的呢
作者: happy_fish100    时间: 2008-08-20 11:22
标题: 回复 #10 greatho1507 的帖子
expires和当前时间比较。

HTTP 1.1中引入了Cache-Control这个参数,采用相对时间(秒数),比1.0的expires更合理。
比如:
Cache-Control: max-age=3600;
表示客户端可以缓存3600秒。
作者: greatho1507    时间: 2008-08-20 11:26
那么如何将GMT时间转换成当地时区的时间呢?或者把当地时间转换成GMT时间?
作者: happy_fish100    时间: 2008-08-20 11:39
原帖由 greatho1507 于 2008-8-20 11:26 发表
那么如何将GMT时间转换成当地时区的时间呢?或者把当地时间转换成GMT时间?


将日期时间字符串转换为Unix时间戳的函数:strptime
将Unix时间戳转换为字符串的函数:strftime

可能还会用到如下两个函数:
localtime
mktime
作者: greatho1507    时间: 2008-08-20 13:55
thanks.




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2