【问题标题】:Best architecture for crawling website in application应用中爬取网站的最佳架构
【发布时间】:2012-08-28 14:54:09
【问题描述】:

我正在开发一个产品,我们需要一个功能来抓取用户给定的 URL 并发布他单独的移动网站。在爬取过程中我们要爬取网站内容、CSS、图片和脚本。该产品用于执行更多活动,例如安排一些营销活动等等。我想问什么-

完成这项任务的最佳实践和开源框架是什么?

我们应该在应用程序本身中执行此操作,还是应该有另一个服务器来执行此活动(如果此活动需要负载)?请记住,我们每个月都会有 1 位“缺乏”用户访问从网站发布他的移动网站,并且有大约 1-2k 的并发用户。

该应用程序使用 Java 和 Java EE 平台构建,使用 Spring 和 Hibernate 作为服务器端技术。

【问题讨论】:

    标签: java spring hibernate architecture


    【解决方案1】:

    我们使用 Derkley DB Java 版来管理堆外链接队列,以抓取并区分待下载的链接和尚未下载的链接。

    用于解析 HTML TagSoup 是互联网上的最佳选择。

    Batik 是解析 CSS 和 SVG 的选择。

    PDFBox 很棒,可以从 PDF 中提取链接

    Quartz 调度程序是经过行业验证的事件调度选择。

    是的,您将需要一台或多台服务器进行爬取,一台服务器用于聚合结果和调度任务,还可能需要另一台服务器用于 WEB 前端和后端。

    这适用于http://linktiger.comhttp://pagefreezer.com

    【讨论】:

    • 感谢 jdevelop。这是我需要的确切解决方案。我在考虑不要在应用程序本身中处理 html。还有一件事,数据将从爬虫服务器和我们的后端服务器以哪种协议传输。我们使用spring框架。有没有可用的开源爬虫服务器。
    • @vaibought 我不确定开源项目,也许 Apache Nutch 可能会有所帮助。关于传输数据的问题 - 您可以考虑 RMI,但它有一些缺点,例如整个请求的内存序列化。我想推荐使用共享文件夹,可以通过 FTP/SFTP 访问。您下载内容,然后将其序列化为文件(例如将大量 COPY 查询用于快速导入 Postgres),然后将其复制到服务器(FTP/SFTP)。在服务器上扫描文件夹,然后将数据导入 Postgres。我们发现这是最快的解决方案。
    • 我们能做到这样吗?将解析 html 存储在 mongo db 中并向后端服务器发送一些请求。根据请求(可能是一些 id),后端服务器将搜索 mongo db 并处理数据。这种方法在 500 - 1000 个并发请求和 mongo 数据库优化方面的效率如何。
    【解决方案2】:

    我正在实施一个基于Selenium HtmlUnit Driver 的爬虫项目。我认为它确实是自动化无头浏览器的最佳 Java 框架。

    【讨论】:

    • Selenium 也可以与其他可以控制外部现实世界浏览器的驱动程序实现一起使用,例如 Internet Explorer 或 Firefox,以确保与 HTML、CSS 和 Javascript 的最大兼容性。
    猜你喜欢
    • 2010-10-14
    • 2013-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-04
    相关资源
    最近更新 更多