【问题标题】:Web scraping: how to get scraper implementation from text link?网页抓取:如何从文本链接中获取抓取工具的实现?
【发布时间】:2010-03-25 15:35:33
【问题描述】:

我正在构建一个 java 网络媒体抓取应用程序,用于从各种流行网站中提取内容:youtube、facebook、rapidshare 等。

应用程序将包含查找内容 url 的搜索功能,但如果用户已经在媒体所在的位置,还应允许用户将 url 粘贴到应用程序中。 Youtube Downloader 已经为各种视频网站做到了这一点。

当程序提供一个 URL 时,它决定使用哪种爬虫来获取内容;例如,一个 youtube 观看链接返回一个 YoutubeScraper,一个 Facebook 粉丝页面链接返回一个 FacebookScraper 等等。

我应该使用工厂模式来做到这一点吗?

我的想法是工厂有一个公共方法。它接受一个表示链接的 String 参数,并返回 Scraper 接口的合适实现。我猜工厂会保存一个 Scraper 实现列表,并将链接与每个 Scraper 进行匹配,直到找到合适的。如果没有合适的,它会抛出一个异常。

【问题讨论】:

    标签: java screen-scraping factory


    【解决方案1】:

    听起来是个好主意。您很可能想要一个带有 create(URL url) 方法的单例。我建议您使用 TDD 来执行此操作,以使您的需求更加清晰。

    【讨论】:

    • 感谢您的建议。我同意传递 URL 参数比传递字符串更好。
    【解决方案2】:

    工厂可以退回这些东西。为了概括尝试,我建议使用地图来保存实现,即:

    Map<String, Class<Scraper>> scrapers = new HashMap<String, Scraper>();
    scraper.put("facebook.com", FacebookScraper.class);
    ...
    

    稍后您可以使用地图的键检查 url 并为该内容实例化正确的类。

    【讨论】:

    • 谢谢,我认为从 url 到爬虫的映射将是一个很好的方法。但正如 Thorbjørn 所说,确切的类型应该是 Map> 。
    猜你喜欢
    • 2023-03-26
    • 1970-01-01
    • 2020-08-08
    • 1970-01-01
    • 1970-01-01
    • 2019-07-25
    • 1970-01-01
    • 1970-01-01
    • 2010-09-29
    相关资源
    最近更新 更多