使用univocity-html-parser,您可以从所有表中获取所有详细信息。不确定如何组织数据,但这应该为您提供一些指导:
HtmlEntityList entityList = new HtmlEntityList();
HtmlEntitySettings person = entityList.configureEntity("person");
addFields(person, "NIMI", "LAJI", "SUKUPUOLI", "IKÄ", "VALMENTAJA", "OMISTAJA");
//not sure if you need the fields under "URAN TILASTOT", but here we go:
addFields(person, "STARTIT", "VOITOT", "2. SIJAT", "3. SIJAT", "VOITTOSUMMA");
//also not not sure if you need the fields under "Tilastot, kun kenkiä riisuttu pois", but here we go again:
addExactFields(person, "ȻȻ, ȻC tai CȻ", "ȻȻ", "ȻC", "CȻ", "ENNÄTYSAJAT", "RYHMÄLÄHTÖ", "TASOITUSAJO");
//I have no clue what the tables mean, so I'm calling them "table 1" and "table 2"
HtmlEntitySettings table1 = entityList.configureEntity("table1");
captureColumns(table1, "VUOSI", "STARTIT", "VOITOT", "2. SIJAT", "3. SIJAT", "VOITTOSUMMA", "RYHMÄ", "TASOITUS");
HtmlEntitySettings table2 = entityList.configureEntity("table2");
captureColumnsInLastTable(table2, "R", "PVM", "L", "R-NRO", "MATKA", "S", "KMA", "HYL", "KERR.", "PALK.", "OHJ.", "VALM.");
HtmlParser parser = new HtmlParser(entityList);
Results<HtmlParserResult> results = parser.parse(new UrlReaderProvider("https://ravit.is.fi/hevoset/1"));
printResult(results.get("person"));
printResult(results.get("table1"));
printResult(results.get("table2"));
使用以下方法:
private void addFields(HtmlEntitySettings entity, String... labels) {
for (String label : labels) {
entity.addField(label).match("td")
.withText(label)
.not().classes("heppatilastohead")
.matchNext("td").getText();
}
}
private void addExactFields(HtmlEntitySettings entity, String... labels) {
for (String label : labels) {
entity.addField(label).match("td").withExactText(label).matchNext("td").getText();
}
}
private void captureColumns(HtmlEntitySettings entity, String... headers) {
for (String header : headers) {
entity.addField(header)
.match("td")
.underHeader("td").withExactText(header)
.getText();
}
}
private void captureColumnsInLastTable(HtmlEntitySettings entity, String... headers) {
for (String header : headers) {
entity.addField(header)
.match("form")
.match("tr").not().at(2)
.match("td")
.underHeader("td").withExactText(header)
.getText();
}
}
private void printResult(HtmlParserResult result) {
System.out.println("\nValues of [" + result.getEntityName() + "]");
for (HtmlRecord record : result.iterateRecords()) {
System.out.println(record.fillFieldMap(new LinkedHashMap<String, String>()));
}
}
此代码的输出是:
Values of [person]
{NIMI=Bernard Gazeau, LAJI=Lämminverinen, SUKUPUOLI=Ruuna, IKÄ=18 v, VALMENTAJA=Hannele Haapala, OMISTAJA=HaapalaHannele, Mouhijärvi, STARTIT=6, VOITOT=0, 2. SIJAT=0, 3. SIJAT=0, VOITTOSUMMA=680 €, ȻȻ, ȻC tai CȻ=0: 0-0-0, ȻȻ=0: 0-0-0, ȻC=0: 0-0-0, CȻ=0: 0-0-0, ENNÄTYSAJAT=null, RYHMÄLÄHTÖ=null, TASOITUSAJO=20,1 ke}
Values of [table1]
{VUOSI=2009, STARTIT=1, VOITOT=0, 2. SIJAT=0, 3. SIJAT=0, VOITTOSUMMA=140, RYHMÄ=null, TASOITUS=20,1 ke}
{VUOSI=2008, STARTIT=3, VOITOT=0, 2. SIJAT=0, 3. SIJAT=0, VOITTOSUMMA=420, RYHMÄ=null, TASOITUS=21,5 ke}
{VUOSI=2006, STARTIT=2, VOITOT=0, 2. SIJAT=0, 3. SIJAT=0, VOITTOSUMMA=120, RYHMÄ=null, TASOITUS=22,2 ke}
{VUOSI=YHT, STARTIT=6, VOITOT=0, 2. SIJAT=0, 3. SIJAT=0, VOITTOSUMMA=680, RYHMÄ=null, TASOITUS=20,1 ke}
Values of [table2]
{R=T, PVM=12.05.09, L=1, R-NRO=5, MATKA=2120, S=p, KMA=null, HYL=p, KERR.=0,0, PALK.=0, OHJ.=M Forss, VALM.=Haapala}
{R=TK, PVM=10.04.09, L=2, R-NRO=3, MATKA=2120, S=4, KMA=20,1, HYL=null, KERR.=25,6, PALK.=140, OHJ.=M Forss, VALM.=Haapala}
{R=TK, PVM=31.10.08, L=3, R-NRO=6, MATKA=2120, S=4, KMA=22,7, HYL=null, KERR.=104,2, PALK.=240, OHJ.=H Hell, VALM.=Haapala}
{R=T, PVM=04.03.08, L=2, R-NRO=10, MATKA=2100, S=8, KMA=21,5, HYL=null, KERR.=99,6, PALK.=100, OHJ.=H Hell, VALM.=Haapala}
{R=P, PVM=17.02.08, L=10, R-NRO=1, MATKA=2100, S=5, KMA=23,6, HYL=null, KERR.=96,1, PALK.=80, OHJ.=H Hell, VALM.=Haapala}
{R=T, PVM=15.01.08, L=KL1, R-NRO=3, MATKA=2120, S=kl, KMA=22,4, HYL=null, KERR.=0,0, PALK.=0, OHJ.=H Hell, VALM.=Haapala}
{R=T, PVM=18.12.07, L=KL1, R-NRO=1, MATKA=2120, S=kl hlo, KMA=25,2, HYL=hlo, KERR.=0,0, PALK.=0, OHJ.=H Hell, VALM.=Haapala}
{R=F, PVM=15.01.06, L=2, R-NRO=1, MATKA=2140, S=5, KMA=22,2, HYL=null, KERR.=21,4, PALK.=120, OHJ.=H Kamppuri, VALM.=Haapala}
{R=F, PVM=08.01.06, L=1, R-NRO=1, MATKA=2140, S=8, KMA=22,9, HYL=null, KERR.=4,0, PALK.=0, OHJ.=Ha Korpi, VALM.=Haapala}
希望这对您有用。
披露:我是这个图书馆的作者。它是商业上的封闭源代码,但是可以节省很多开发时间。