1

我有一个功能,可以从网站上抓取所有最新新闻(大约 10 条新闻,新闻的数量取决于该网站)。请注意,新闻是按时间顺序排列的。

例如,昨天我得到了 10 条新闻并存储在数据库中。今天我收到 10 条新闻,但有 3 条昨天没有的新闻(7 条保持不变,3 条是新的)。

我目前的方法是提取每个新闻,直到找到一个旧新闻(7 个新闻中的第一个)然后我停止提取,只更新"lastUpdateDate"旧新闻的字段 + 将新新闻添加到数据库中。我认为这种方法有点复杂,需要时间。

实际上,我从 20 个具有相同内容结构 ( Moodle) 的网站获得新闻,因此每个请求将持续大约 2 分钟,而我的免费主机不支持。

如果我删除所有新闻然后从头开始提取所有内容会更好吗(这实际上增加了数据库中的大量 ID 号)?

4

2 回答 2

2

首先,检查网站是否有已发布的 API。如果有,请使用它。

其次,检查网站的服务条款,其中可能明确禁止抓取网站。

第三,查看您选择的编程语言中的一个模块,该模块既可以处理页面的获取,也可以从页面提取内容。在 Perl 中,您将从WWW::MechanizeWeb::Scraper开始。

无论您做什么,都不要落入许多在 StackOverflow 上发帖的人所陷入的陷阱:获取网页,然后尝试自己解析内容,通常使用正则表达式,这对于这项工作来说是不合适的工具。浏览 SO 标签以了解那些试图推出自己的 HTML 解析系统而不是使用现有工具的人的悲伤故事。

于 2012-12-17T14:31:16.737 回答
0

是否要向用户显示旧新闻取决于要求。

对于抓取,您可以为 cron 作业创建一个自定义本地脚本,该脚本将从这些新闻网站获取数据并将其存储到数据库中。

您还可以检查主题是否已经存在。

最后制作一个自定义新闻块,它将显示所有数据库提要。

于 2012-12-18T05:51:09.300 回答