通过用JSOUP刮擦HTML来构建字符串



我是新手Java程序员,现在刚刚开始扩展到图书馆,API等世界。我正处于一个相对简单的想法,当我不从事家庭作业时,我可以是我的宠物项目。

我有兴趣从几个不同的网站上刮擦HTML,并构建看起来像"艺术家"的字符串 - 曲目名称"。我有一个网站按照我想要的方式工作,但是我觉得可以更顺利地完成工作……这是我在网站上所做的事情的失败:

我有jsoup创建类似类的所有内容的元素:

<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>

从那里,我创建了一个在上次</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()+ "”";          
        }

这是一种以我想要的方式获取Artist "Title"的非常刺耳的方法,但结果对我来说很好。

站点B有些不同。

我已经确定艺术家和标题都包含在这种情况下: <span class="artist" property="foaf:name">Artist Name</span> </a> </span> <span class="title" property="dc:title">Title</span>

以及更多信息,<li id="segmentevent-random" class="segment track" typeof="po:MusicSegment" about="/url"> song info </li>

内部

我试图首先要通过所有艺术家,然后将所有艺术家抓取,然后将两个艺术家合并,但是我遇到了麻烦,因为用于显示轨道标题的" DC:Title"属性对于其他非音乐事物,所以我无法直接与艺术家与曲目匹配。

我已经度过了本周末的狮子份额,试图通过查看用JSOUP标记的无数问题,并花费大量时间阅读JSOUP食谱和API指南。我有一种感觉,我的一部分麻烦也可能源于我对网页的编码相对有限的了解,尽管这可能主要是我对如何将这些代码插入JSOUP插入JSOUP的麻烦。

我感谢任何帮助或指导,我必须说,在这里提出一个非家庭问题真的很高兴(尽管我发现了其他人问的内容有很多暗示!;;))

common:

如果您有一些不同的网站,您想解析内容是一个很好的主意。也许您可以决定是否通过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或每个页面的结构,这里有一些基本方法:

页A:

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:

类似于B页,可以选择Artitst和标题:

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

这是JSoup Selector API的一个很好的概述:http://jsoup.org/cookbook/extracting-data/selector-syntax

最新更新