2

我想抓取一个定期更新的页面(添加与以前的结构完全相同的新文章)以生成 RSS 提要。

我可以编写代码来轻松分析页面,但是当页面更新时如何模拟 ping 即我的 php 脚本如何知道?它必须是一个cron工作吗?

(我知道可能是一个重复的问题,但是没有运气就搜索了直接答案。我得到的最接近的是Scrape and generate RSS feed,它有一个抓取脚本,但没有关于如何让它自动响应页面上的更改的信息)

4

3 回答 3

3

根据系统的不同,最后一次更新页面的时间可能不容易判断,也可能不容易判断。

要检查更改,您可以检查Last-Modified页面标头的 HTTP 标头。并非所有系统都正确更新标头,因此它可能没有用。未修改的页面也有可能返回304(未修改)状态,特别是如果您If-Modified-Since在请求中提供了标头。

我肯定会在 cron 作业上运行这样的东西。虽然可能从标题中执行此操作,但如果您必须更新页面,您的用户将等待很长时间(相对而言)让您的服务器退出,获取页面,进行处理,然后发送回复。如果您没有不时使用基于非 cron 的方法遇到超时,我会感到惊讶。

于 2010-02-12T13:19:09.447 回答
2

您可以运行 crontab 来检查站点是否已更新(通过检查最后修改的标题,如果可用,或者通过检查您感兴趣的内容)。

如果您的 crontab 检查站点时,它检测到内容更改,它可以将消息附加到队列(例如 Zend_Queue http://framework.zend.com/manual/en/zend.queue.example.html) ,那么您可以让一个工作人员处理消息,直到达到时间/数据限制,或者直到队列为空。

于 2010-02-12T13:12:04.330 回答
1

如果没有 Last-Modified 行,您还可以检查对 HEAD 请求的响应,以了解 ETag 和 Content-Length 行的存在和值。如果这些都不匹配先前的值(您已存储),则内容可能已更改。您可以将指示更改的任何其他响应标题行添加到这些响应标题行中。

于 2010-02-12T13:37:07.723 回答