【问题标题】:Obtain html content from pdf url (Jsoup)从 pdf url (Jsoup) 获取 html 内容
【发布时间】:2017-10-16 06:29:55
【问题描述】:

我正在制作一个软件,它应该从提供的 url 中检索网页的标题,并尝试 JSoup 来实现这一点。 链接主要来自 youtube,JSoup 与它们完美配合,但有时输入会采用 pdf 的形式,如下所示:http://www.ninsheetmusic.org/download/pdf/2066 那是我得到以下异常的时候:

org.jsoup.UnsupportedMimeTypeException: Unhandled content type. Must be text/*, application/xml, or application/xhtml+xml. Mimetype=application/pdf, URL=http://www.ninsheetmusic.org/download/pdf/2066
at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:689)
at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:628)
at org.jsoup.helper.HttpConnection.execute(HttpConnection.java:260)
at org.jsoup.helper.HttpConnection.get(HttpConnection.java:249)
at core.Request.parseTitle(Request.java:54)
at core.Request.<init>(Request.java:29)
at core.GrakeBot.parseRequest(GrakeBot.java:161)
at core.GrakeBot.onMessage(GrakeBot.java:59)
at org.jibble.pircbot.PircBot.handleLine(PircBot.java:990)
at org.jibble.pircbot.InputThread.run(InputThread.java:92)

现在我认为 JSoup 不处理 pdf,但是我可以在这里做些什么来避免此异常并获取网页标题?

这是我现在使用的代码:

private String parseTitle(String link)
{
    Document doc = null;
    String title = "Title could not be retrieved";

    if (getType() == RequestType.YOUTUBE)
    {
        try
        {
            doc = Jsoup.connect(getLink()).get();
            title = doc.getElementById("eow-title").text();
        } catch (IOException e)
        {
            e.printStackTrace();
        }
        return title;
    }
    else if (getType() == RequestType.SHEET)
    {
        try
        {
            doc = Jsoup.connect(getLink()).get();
            title = doc.getElementsByTag("title").text();
        } catch (IOException e)
        {
            e.printStackTrace();
        }
        return title;
    }
    else
        return title;
}

【问题讨论】:

    标签: java html pdf jsoup


    【解决方案1】:

    您不能为此使用 JSoup。这不是 HTML。我查看了源代码,您收到的数据如下所示:
    %PDF-1.5 %Çì¢ 5 0 obj <</Length 6 0 R/Filter /FlateDecode>> stream xœÍ\]\[³$GqÆö1áë˜à…GœQUf\]ý† Làp8¿¬xÀ+åÐ „1?ÉÿÒy©KöîYítŸÌîÙ¯«ºº.™YyëêßœÜÕÃÉñÿþã嫇÷œO¿üâ!~÷à®Îa©%Qá“?üƒ‡„pŠ Ã5åÓ+E.#£O~ò s5ýñù/~óP®Èÿä‚ýýòÕé? Ç—“Ï×RNü‚:Pk åþTü5”SJpÍpúàÕÃùk—þë!Ôk§þ…áwèÞœ¨·ñÑÃùëRéZJ8=&¹·_ŽW úS}óÒ\[j¾årÙ<í-•‘&3õ"8éóªwïnÀM-\]¡ä=¾ìÚ­béýMô¦èû<üè&rñÙYzQh\]ª¦\¡)ÙÙr…¦<Ù&t›*~>‘«Hq¬Ù78‹cÝ+œÅ›b…£8”h‹Åh‹Å¾$\[Üà,eS¬p{¿)V8Š\]ÞLKƒÂªïZ=bÞäef\[÷£Ï4¸$ÏO1Òo”YŒDG£´üò!æ:Ч)&ªçåžÈ÷D'“£-ƒ×{~ñ÷ú¨Ñ\[y×ôGAö7=...

    您必须使用库对其进行解析。看了之后,看起来 Apache PDFBox 就是你想要的。此代码来自文档且未经测试,但它看起来像您想要做的:

    PDDocument doc = PDDocument.load("http://www.ninsheetmusic.org/download/pdf/2066");
    PDDocumentInformation info = doc.getDocumentInformation();
    String title = info.getTitle();
    

    剩下的就是安装 Apache PDFBox :)

    【讨论】:

    • “它看起来像 Apache PDFBox 就是你想要的” - 严格来说,Apache PDFBox 只是 OP 可以用于的 众多 PDF 库之一这个任务...
    • 我觉得添加 Apache PDFBox 对于我的目标来说并不是最佳选择。我可能在这里说一些非常愚蠢的事情,如果我错了,请纠正我:通过在 Firefox 中打开上述链接并打开 Page Inspector,我发现有一些 html 代码,实际上有一个 标签。 (firefox 还能在哪里获取显示页面标题的文本?)有没有办法使用 jsoup 访问该 html 代码并从那里检索标题?
    • @RamzahBeoulve 你可以打开一个普通的套接字连接,然后用 JSoup 解析它。
    猜你喜欢
    • 1970-01-01
    • 2016-03-23
    • 1970-01-01
    • 2016-12-15
    • 1970-01-01
    • 2013-11-09
    • 2016-09-04
    • 1970-01-01
    • 2021-07-18
    相关资源
    最近更新 更多