JSoup: получить краткий обзор страницы википедии - PullRequest
0 голосов
/ 23 ноября 2018

Я использовал MediaWiki API для получения страницы википедии, после получения html-контента я пытался использовать

p:not(h2 ~ p)

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

Ответы [ 2 ]

0 голосов
/ 23 ноября 2018

Код:

public static void main(String[] args){
    Document doc = null;
    String url = "https://en.wikipedia.org/wiki/Nico_Ditch";
    try {
        doc = Jsoup.parse(new URL(url).openStream(), "UTF-8", url);
    } catch (IOException e) {
        e.printStackTrace();
    }

    Elements els = doc.select(".mw-parser-output > p:not(h2 ~ p)");
    System.out.println(els);
    // System.out.println(doc);
}

Выполнение вывода:

<p class="mw-empty-elt"> </p>
<p><b>Nico Ditch</b> is a six-mile (9.7&nbsp;km) long linear <a href="/wiki/Earthworks_(archaeology)" title="Earthworks (archaeology)">earthwork</a> between <a href="/wiki/Ashton-under-Lyne" title="Ashton-under-Lyne">Ashton-under-Lyne</a> and <a href="/wiki/Stretford" title="Stretford">Stretford</a> in Greater Manchester, England. It was dug as a defensive fortification, or possibly a boundary marker, between the 5th and 11th centuries. </p>
<p>The ditch is still visible in short sections, such as a 330-yard (300&nbsp;m) stretch in <a href="/wiki/Denton,_Greater_Manchester" title="Denton, Greater Manchester">Denton</a> Golf Course. In the parts which survive, the ditch is 4–5 yards (3.7–4.6&nbsp;m) wide and up to 5 feet (1.5&nbsp;m) deep. Part of the earthwork is protected as a <a href="/wiki/Scheduled_Ancient_Monument" class="mw-redirect" title="Scheduled Ancient Monument">Scheduled Ancient Monument</a>. </p>

Процесс завершен с кодом выхода 0

0 голосов
/ 23 ноября 2018

p:not(h2 ~ p) получает каждый абзац на странице , в котором нет h2 перед тем же родительским элементом.Сюда входят вложенные абзацы, абзацы вне основного содержимого и т. Д., Поскольку ни один из этих абзацев не имеет тот же родительский элемент, что и сам h2.Вы не хотите их;вам нужны только абзацы, которые появляются перед элементами h2 внутри их родительского элемента.

Для этого вы хотите привязать внешний селектор p к родительскому элементу.Требуемый родительский элемент: .mw-parser-output:

.mw-parser-output > p:not(h2 ~ p)
...