Java 用于将对象与句柄匹配的软件模式
我一直在思考解决这个问题的方法,但我没有找到任何能说服我的解决方案。我正在编写一个爬虫程序,我有一个从url列表下载每个url的任务。此外,根据站点url和我想要获取的信息,以不同的模式解析不同的html文档。因此,我的问题是如何将每个任务与其相应的解析链接起来 这些想法是:Java 用于将对象与句柄匹配的软件模式,java,design-patterns,architecture,Java,Design Patterns,Architecture,我一直在思考解决这个问题的方法,但我没有找到任何能说服我的解决方案。我正在编写一个爬虫程序,我有一个从url列表下载每个url的任务。此外,根据站点url和我想要获取的信息,以不同的模式解析不同的html文档。因此,我的问题是如何将每个任务与其相应的解析链接起来 这些想法是: 创建一个巨大的“如果”,检查下载类型并关联解析。 (避免,因为“如果”随着每个新的不同站点添加到爬虫程序中而不断增长) 使用多态性,为每个不同的站点创建不同的下载任务,并与我想要获取的信息类型相关,然后使用post操作链接
- 嘿,我是一个下载任务与此信息
- 真的吗?然后您需要这个解析来提取它。这是您需要的解析
一旦定义了遗传表示和适应度函数,遗传算法就开始初始化一组解,然后通过重复应用变异、交叉、反转和选择算子来改进它。我会以某种形式(如XML)将解析模式/结构外部化并动态地使用它们 例如,我必须下载site1.com和site2.com。两者都有两种不同的布局。我将创建两个保存布局模式的xml 还有一个主xml,它可以保存哪个url应该使用哪个xml 启动时,加载此主xml并将其用作字典。当您必须下载时,下载页面并从字典中找到xml,然后将字典和流传递给解析器(单个通用解析器),解析器可以根据xml流和xml信息读取流 通过这种方式,我们可以在xml中创建通用模式,并使用它来读取类似的站点。使用xml模式中的正则表达式以单个xml覆盖大多数站点 如果布局完全不同,只需创建一个xml并修改主xml即可
这种设计的秘诀/成功之处在于如何创建这样的通用XML,这完全取决于您需要什么以及解析后要做什么。这似乎是一个连接问题。我建议考虑快速查找算法 请参阅此处了解更多详细信息。 这是一个简单的java示例,
我喜欢遗传算法的想法,因为它涉及到每次迭代都要改进。然而,我不能设置一个函数来评估解决方案域,因为我不知道一个“解析良好”的站点会产生什么结果。例如,在site1.com中,我有一个包含10个项目的列表,而在site2.com中,我有一个包含相同信息但不包含wi的列表