目前我正在创建一个Android应用程序,它允许从网站中提取主要内容和图片。现在我使用Jsoup
API从HTML中提取所有p
标记。但是,这不是一个好的解决方案。任何建议或更好的解决方案使我能够从Android网站中提取主要内容和图片?
答案 0 :(得分:2)
我找不到任何适合我的内容,所以我发布了Goose for Android,在这里:https://github.com/milosmns/goose
以下是一些描述......
文档清理
当您将URL传递给Goose时,它开始做的第一件事就是干净 提升文档以便于解析。它将通过 整个文档和删除评论,共同的社交网络共享 元素,将em和其他标签转换为纯文本节点,尝试 将用作文本节点的div转换为段落,以及执行一般操作 文件清理(空格,新行,引号,编码等)。
内容/图片提取
在处理随机文章链接时,您必然会遇到 最疯狂的HTML文件。有些网站甚至想要包含2个或更多HTML 每个站点的文件。 Goose使用基于聚类的评分系统 英语会阻止您在代码中找到的单词和其他因素。 当节点向下移动时,鹅也会下降得分 降低他们的分数。目标是找到最强的分组 父容器内的文本节点,并假设它是相关的 一组内容,只要它在页面上足够高(上)。
图像提取是最长的一次。试图找到 事实证明,页面上最重要的图像具有挑战性和必要性 下载所有图像以使用外部手动检查它们 工具(不是所有图像都被考虑,Goose检查mime类型, 尺寸,字节大小,压缩质量等)。 Java的形象 功能太不可靠和不准确。在Android上,Goose 使用BitmapFactory类,它有很好的文档,测试和 快速准确。从Goose的顶级节点分析图像 找到内容,然后尝试向外递归运行 找到好的图像 - 鹅也会检查这些图像是否是广告,横幅 或作者徽标,如果是,则忽略它们。
输出格式
一旦Goose拥有我们认为内容所在的顶级节点,Goose会 尝试为输出格式化该节点的内容。例如, 对于NLP类型的应用程序,Goose的输出格式化程序只会吸引所有 文本并忽略其他一切,其他(自定义)提取器可以 旨在提供更多Flipboardy类型的体验。
答案 1 :(得分:1)
为什么你认为使用Jsoup不是一个好的解决方案?
我为不同的网页编写了许多网页抓取工具,根据我的经验,Jsoup是完成该任务的方法。您应该研究Jsoup Syntax它非常强大,使用正确的选择器,您可以非常轻松地从HTML文档中提取大部分信息。通常,当文档没有id
,class
属性或其他独特功能时,提取信息会变得更加困难。
答案 2 :(得分:1)
您可以尝试 textracto api它自动识别HTML文档的主要内容。还有机会解析OpenGraph元数据,因此您还可以提取图片(og:image
)。