извлекать свободно структурированный текст из Википедии. HTML

Некоторые страницы html на страницах, посвященных wikipedia, являются, скажем так, двусмысленными, то есть ссылки, которые связаны с конкретными людьми по имени Corzine , трудно захватывать с помощью jsoup, потому что они явно не структурированы и не живут в определенном разделе, поскольку в этом примере . См. Страницу Corzine здесь .

Как я могу их удержать? Является ли jsoup подходящим инструментом для выполнения этой задачи?

Возможно, я должен использовать регулярное выражение, но я боюсь делать это, потому что хочу, чтобы он был обобщаемым.

  may refer to:

  • <a href

^ Это здесь стандартно, может быть, я могу использовать регулярное выражение для соответствия этому?

 

Corzine may refer to:

Идеальный выход был бы

 Dave Corzine Jon Corzine 

Возможно, было бы возможно совпадение раздела may refer to:

а также <table id="setindexbox" и извлечь все, что находится между ними. Я полагаю, что <table id="setindexbox" может быть легко сопоставлен в jsoup, но may refer to:

должен быть более сложным, потому что или

не очень различаются.


Я попробовал это:

  Elements table = docx.select("ul"); Elements links = table.select("li"); Pattern ppp = Pattern.compile("table id=\"setindexbox\" "); Matcher mmm = ppp.matcher(inputLine); Pattern pp = Pattern.compile(" may refer to:

"); Matcher mm = pp.matcher(inputLine); if (mm.matches()) { while(!mmm.matches()) for (Element link: links) { String url = link.attr("href"); String text = link.text(); System.out.println(text + ", " + url); } }
в Elements table = docx.select("ul"); Elements links = table.select("li"); Pattern ppp = Pattern.compile("table id=\"setindexbox\" "); Matcher mmm = ppp.matcher(inputLine); Pattern pp = Pattern.compile(" may refer to:

"); Matcher mm = pp.matcher(inputLine); if (mm.matches()) { while(!mmm.matches()) for (Element link: links) { String url = link.attr("href"); String text = link.text(); System.out.println(text + ", " + url); } }

но это не сработало.

    Этот селектор работает:

     Elements els = doc.select("p ~ ul a:eq(0)"); 

    См .: http://try.jsoup.org/~yPvgR0pxvA3oWQSJte4Rfm-lS2Y

    Это ищет первый элемент A ( a:eq(0) ) в ul который является братом p . Вы также можете сделать p:contains(corzine) ~ ul a:eq(0) если были другие конфликты.

    Или, возможно, в целом:: :contains(may refer to) ~ ul a:eq(0)

    Трудно обобщить Википедию, потому что она неструктурирована. Но IMHO проще использовать серизаторы парсера и CSS, чем регулярные выражения, особенно со временем, когда шаблоны меняются и т. Д.