【问题标题】:scraping a non RSS page to generate a feed抓取非 RSS 页面以生成提要
【发布时间】:2010-02-12 13:08:32
【问题描述】:

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

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

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

【问题讨论】:

    标签: php rss scrape


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-03-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-06-22
          • 1970-01-01
          相关资源
          最近更新 更多