JSOUP - 从页面直接以特定格式提取数据

时间:2013-03-15 17:01:50

标签: java web web-scraping jsoup

我目前正在尝试使用jsoup,我的目标是从以下形式的零售网站中提取数据:

 Title: blabl
 Link: foba
 Grösse: 9999
 KP: FALSE
 Miete: TRUE
 Preis: 1923,23

到目前为止,我已经写过这个测试程序:

public class jsoup_test {
    public static void main(String[] args) throws IOException {
        String url = "http://derstandard.at/anzeiger/immoweb/Suchergebnis.aspx?Regionen=9&Bezirke=&Arten=&AngebotTyp=&timestamp=1363305908912";
        print("Fetching %s...", url);

        Document doc = Jsoup.connect(url).get();
        Elements price = doc.select("tr.topangebot");
        Elements price1 = doc.select("tr.white");

        System.out.println("--------------------------------"); 
        System.out.println(price);  
        System.out.println("--------------------------------"); 
        System.out.println(price1); 

    }

    private static void print(String msg, Object... args) {
        System.out.println(String.format(msg, args));
    }

}

然而,这个程序给了我这样的数据:

<tr id="ctl00_Body_mc_cErgebnisListe1_ctl02_InseratInfoTR" class="topangebot"> 
 <td class="BildTD" rowspan="2"> <a href="/anzeiger/immoweb/Detail.aspx?InseratID=6847212&amp;FromTopAngebot=true"><img border="0" src="http://images.derstandard.at/t/22/upload/imagesanzeiger/immoupload/2013/02/27/277515f7-f935-4a13-83fb-dbe3af930e28.jpg" alt="" /></a> </td> 
 <td class="TitleTD" rowspan="2"> <span class="neu">TOP!</span> <strong><a href="/anzeiger/immoweb/Detail.aspx?InseratID=6847212&amp;FromTopAngebot=true">Gehobene Qualit&auml;t, Design und exquisite Ausf&uuml;hrung: Dachausbau mit Weitblick und 100 m&sup2; Terrasse</a></strong><br /><a href="/anzeiger/immoweb/Detail.aspx?InseratID=6847212&amp;FromTopAngebot=true">Wien 16.,Ottakring, Dachgeschoss</a><br /><span style="color: gray">Erstbezug, K&uuml;che, Parkettboden, Hauptmiete, Terrasse, Lift, Keller, Altbau, Kabel/Sat-TV, Barrierefrei</span> </td> 
 <td class="GroessenTD" rowspan="2"> <span class="strong">125 m&sup2;</span><br /><span class="strong">4&nbsp;</span>Zimmer </td> 
 <td class="PreisTD" style="border:none;"> <span class="light">Miete</span>&nbsp;2.190&nbsp;<br /> </td> 
</tr>
<tr id="ctl00_Body_mc_cErgebnisListe1_ctl02_MerklisteTR" class="topangebot"> 
 <td class="merkliste"> </td> 
</tr>
<tr id="ctl00_Body_mc_cErgebnisListe1_ctl03_InseratInfoTR" class="topangebot"> 
 <td class="BildTD" rowspan="2"> <a href="/anzeiger/immoweb/Detail.aspx?InseratID=6871213&amp;FromTopAngebot=true"><img border="0" src="http://images.derstandard.at/t/22/upload/imagesanzeiger/immoimporte/justimmo2/files.justimmo.at/public/pic/big/AEs_YegpKC.JPG" alt="" /></a> </td> 
 <td class="TitleTD" rowspan="2"> <span class="neu">TOP!</span> <strong><a href="/anzeiger/immoweb/Detail.aspx?InseratID=6871213&amp;FromTopAngebot=true">HS-IMMO: 14. PREISSENSATION Eckzinshaus 1414m&sup2; Leerstand - Gesamtnutzfl&auml;che 1670m&sup2; + Rohdachboden ca. 700m&sup2; erzielbar ( Baubescheid ) € 1555.-/m&sup2; NFL</a></strong><br /><a href="/anzeiger/immoweb/Detail.aspx?InseratID=6871213&amp;FromTopAngebot=true">Wien 14.,Penzing, Zinshaus</a><br /><span style="color: gray">Parkettboden, Altbau, Kabel/Sat-TV</span> </td> 
 <td class="GroessenTD" rowspan="2"> <span class="strong">1.670 m&sup2;</span><br /> </td> 
 <td class="PreisTD" style="border:none;"> <span class="light">KP</span>&nbsp;2.590.000&nbsp;<br /> </td> 
</tr>...

这不是人类可读的格式。所以我的问题是。如何获取jsoup,它以我想要的格式直接提取数据?

你的回复是什么?

3 个答案:

答案 0 :(得分:1)

例如,选择 title ,你需要做这样的事情

String title = doc.select("tr.topangebot > td.TitleTD").first.text();

答案 1 :(得分:0)

如果你知道页面结构,你可以使用DOM导航页面:

http://jsoup.org/cookbook/extracting-data/dom-navigation

这个问题有很多优秀的网络刮刀

Web scraping with Java

答案 2 :(得分:0)

我喜欢使用Jsoup,因为它的方法是为DOM遍历而构建的。所以,如果你擅长HTML,CSS和Jquery,那么这个库就是为你而构建的。是的,Jsoup方法可能太快了。是的,它可能不适合您的需求。但是,当从任何类型的网站收集任何类型的信息时,Jsoup足够灵活,可以满足您的需求。