当前位置: 首页 > 知识库问答 >
问题:

通过JSoup刮取html构建字符串

康照
2023-03-14

我是一个Java程序员新手,现在才开始扩展到库、API等领域。我现在有了一个比较简单的想法,当我不做作业的时候,可以成为我的宠物项目。

我感兴趣的是从几个不同的站点刮取html,并构建看起来像“艺术家-”曲目名称“”的字符串。我有一个网站工作的方式,我想,但我觉得它可以做得更顺利...以下是我为A站点所做的工作的简要介绍:

我让JSoup为plrow类的所有内容创建元素,如下所示:

<p class="plrow"><b><a href="playlist.php?station=foo">Artist</a></b> “Title” (<span class="sn_ld"><a href="playlist.php?station=foo">Label</a></span>) <SMALL><b>N </b></SMALL></p></td></tr><tr class="ev"><td><a name="98069"></a><p class="pltime">Time</p>

从那里,我创建一个字符串数组,在最后一个

之后拆分行,然后使用以下代码处理该数组:

for (int i = 0; i < tracks.length; i++){
            tracks[i] = Jsoup.parse(tracks[i]).text();
            tracks[i] = tracks[i].split("”")[0];
            tracks[i] = tracks[i].toString()+ "”";          
        }

这是一个非常奇怪的方法来获得艺术家“标题”我想要的方式,但结果对我来说很好。

站点B有点不同。

我确定艺术家和标题都包含如下内容:艺术家名称标题

连同更多信息,所有内容都在

  • 歌曲信息
  • 我试图先搜索所有艺术家,然后搜索标题,然后合并两者,但我遇到了麻烦,因为用于显示曲目标题的“dc:title”属性用于其他非音乐的东西,所以我不能直接将艺术家与曲目匹配起来。

    这个周末,我花了很大一部分时间来查看无数带有Jsoup标签的问题,并花了很多时间阅读Jsoup食谱和API指南。我有一种感觉,我的部分问题也可能来自于我对web页面如何编码的知识相对有限,尽管这可能主要是我对如何将这些代码插入JSOUP的理解方面的问题。

    我很感谢任何帮助或指导,我不得不说,在这里问一个非家庭作业问题真的很好(尽管我从别人问的问题中找到了不少提示!;))

    共有1个答案

    罗和煦
    2023-03-14

    如果您有一些不同的网站想要解析内容,最好在它们之间有所区别。也许您可以根据URL来决定是解析A页还是解析B页。

    示例:

    if( urlToPage.contains("pagea.com") )
    {
        // Call parsemethod for Page A or create parserclass
    }
    else if( urlToPage.contains("pageb.com") )
    {
        // Call parsemethod for Page B or create parserclass
    }
    // ... 
    else
    {
        // Eg. throw Exception because there's no parser available
    }
    

    您可以使用单行代码将每个页面连接并解析为文档:

    // Note: the protocol (http) is required here
    Document doc = Jsoup.connect("http://pagewhaterver.com").get(); 
    

    在不了解Html或每个页面的结构的情况下,以下是一些基本方法:

    for( Element element : doc.select("p.plrow") )
    {
        String title = element.ownText();                           // Title - output: '“Title” ()' (you have to replace the " and () here)
        String artist = element.select("a").first().text();         // Artist
        String label = element.select("span.sn_ld").first().text(); // Label
    
        // etc.
    }
    

    与B页类似,可以这样选择Artitst和Title:

    String artist = doc.select("span.artist").first().text();
    String title = doc.select("span.title").first().text();
    

    下面是对Jsoup选择器API的一个很好的概述:http://Jsoup.org/cookbook/extracture-data/selector-syntax

     类似资料:
    • 我正在尝试使用jSoup刮一个网站,有以下内容。我对jSoup很陌生,还在想办法。我想做的是能够采取的产品名称和价格,并把他们放入一个excel文件的名称在A列和价格在B列,0.00可以忽略或放在C列,无论什么更容易。任何帮助都将是伟大的,因为我知道有人会问,这不是一个家庭作业。 谢谢提前,我真的很感激。 **这是否是表元素,因为这是列表前的“表”代码,如果不是,我应该在html代码中查找什么?

    • 主要内容:Jsoup 获取HTML 语法,Jsoup 获取HTML 说明,Jsoup 获取HTML 示例以下示例将展示在将 HTML 字符串解析为 Document 对象后获取内部 html 和外部 html 的方法的使用。 Jsoup 获取HTML 语法 document :文档对象代表 HTML DOM。 Jsoup : 解析给定 HTML 字符串的主类。 html : HTML 字符串。 link : 元素对象表示表示锚标记的 html 节点元素。 link.outerHtml() : o

    • 我知道如何计算出字符串中某个字符或数字的索引,但是有没有任何预定义的方法可以用来给我第n个位置的字符?所以在字符串“foo”中,如果我要求索引为0的字符,它会返回“f”。 注意——在上面的问题中,我所说的“字符”不是指字符数据类型,而是字符串中的字母或数字。这里重要的一点是,调用该方法时,我不会收到char,而是一个字符串(长度为1)。我知道substring()方法,但我想知道是否有更简洁的方法

    • 问题内容: 我知道如何计算字符串中某个字符或数字的索引,但是我可以使用任何预定义的方法在第n个位置给我该字符吗?因此,在字符串“ foo”中,如果我要求索引为0的字符,它将返回“ f”。 注意-在上述问题中,“字符”不是字符数据类型,而是字符串中的字母或数字。这里重要的是,调用该方法时,我不会收到字符,而是一个字符串(长度为1)。而且我知道substring()方法,但是我想知道是否有更整洁的方法

    • 主要内容:Jsoup 读取URL获取HTML 语法,Jsoup 读取URL获取HTML 说明,Jsoup 读取URL获取HTML 示例以下示例将展示使用 url 从网络获取 HTML,然后查找其数据。 Jsoup 读取URL获取HTML 语法 document : 文档对象代表 HTML DOM。 Jsoup : 连接 url 并获取 HTML 字符串的主类。 url : 要加载的 html 页面的 url。 Jsoup 读取URL获取HTML 说明 connect(url) 方法连接到 url

    • 如何使用JSOUP从html字符串获取图标路径? 我找到了在网页上添加favicon的不同方法- (在谷歌) 我能得到的第一个方法是使用doc。选择(“html头元”) 但我无法选择链接标签