Java Извлечение информации из Википедии - PullRequest
0 голосов
/ 14 апреля 2020

Я недавно использую Jsoup Не могли бы вы помочь мне извлечь информацию из этой страницы википедии, чтобы иметь только звездные имена? Структура страницы (подведение итогов) такова:

<table class="infobox vevent" style="width:22em;font-size:90%;"><tbody><tr><th colspan="2" class="summary" style="text-align:center;font-size:125%;font-weight:bold;font-size:110%;font-style:italic;">Pulp Fiction</th></tr><tr><td colspan="2" style="text-align:center"><a href="/wiki/File:Pulp_Fiction_(1994)_poster.jpg" class="image"><img alt="Pulp Fiction (1994) poster.jpg" src="//upload.wikimedia.org/wikipedia/en/3/3b/Pulp_Fiction_%281994%29_poster.jpg" decoding="async" width="220" height="327" class="thumbborder" data-file-width="220" data-file-height="327" /></a><div style="font-size:95%;padding:0.35em 0.35em 0.25em;line-height:1.25em;">Theatrical release poster</div></td></tr><tr><th scope="row" style="white-space:nowrap;padding-right:0.65em;">Directed by</th><td><a href="/wiki/Quentin_Tarantino" title="Quentin Tarantino">Quentin Tarantino</a></td></tr><tr><th scope="row" style="white-space:nowrap;padding-right:0.65em;">Produced by</th><td><a href="/wiki/Lawrence_Bender" title="Lawrence Bender">Lawrence Bender</a></td></tr><tr><th scope="row" style="white-space:nowrap;padding-right:0.65em;">Written by</th><td>Quentin Tarantino</td></tr><tr><th scope="row" style="white-space:nowrap;padding-right:0.65em;">Story by</th><td><div class="plainlist">
<ul><li>Quentin Tarantino</li>
<li><a href="/wiki/Roger_Avary" title="Roger Avary">Roger Avary</a></li></ul>
</div></td></tr><tr><th scope="row" style="white-space:nowrap;padding-right:0.65em;">Starring</th><td><div class="plainlist">
<ul><li><a href="/wiki/John_Travolta" title="John Travolta">John Travolta</a></li>
<li><a href="/wiki/Samuel_L._Jackson" title="Samuel L. Jackson">Samuel L. Jackson</a></li>
<li><a href="/wiki/Uma_Thurman" title="Uma Thurman">Uma Thurman</a></li>
<li><a href="/wiki/Harvey_Keitel" title="Harvey Keitel">Harvey Keitel</a></li>
<li><a href="/wiki/Tim_Roth" title="Tim Roth">Tim Roth</a></li>
<li><a href="/wiki/Amanda_Plummer" title="Amanda Plummer">Amanda Plummer</a></li>
<li><a href="/wiki/Maria_de_Medeiros" title="Maria de Medeiros">Maria de Medeiros</a></li>
<li><a href="/wiki/Ving_Rhames" title="Ving Rhames">Ving Rhames</a></li>
<li><a href="/wiki/Eric_Stoltz" title="Eric Stoltz">Eric Stoltz</a></li>
<li><a href="/wiki/Rosanna_Arquette" title="Rosanna Arquette">Rosanna Arquette</a></li>
<li><a href="/wiki/Christopher_Walken" title="Christopher Walken">Christopher Walken</a></li>
<li><a href="/wiki/Bruce_Willis" title="Bruce Willis">Bruce Willis</a></li></ul>
</div></td></tr><tr><th scope="row" style="white-space:nowrap;padding-right:0.65em;">Cinematography</th><td><a href="/wiki/Andrzej_Seku%C5%82a" title="Andrzej Sekuła">Andrzej Sekuła</a></td></tr><tr><th scope="row" style="white-space:nowrap;padding-right:0.65em;">Edited by</th><td><a href="/wiki/Sally_Menke" title="Sally Menke">Sally Menke</a></td></tr><tr><th scope="row" style="white-space:nowrap;padding-right:0.65em;"><div style="padding:0.1em 0;line-height:1.2em;">Production<br />companies </div></th><td><div style="vertical-align:middle;"><div class="plainlist">
<ul><li><a href="/wiki/A_Band_Apart" title="A Band Apart">A Band Apart</a></li>
<li><a href="/wiki/Jersey_Films" class="mw-redirect" title="Jersey Films">Jersey Films</a></li></ul>
</div></div></td></tr><tr><th scope="row" style="white-space:nowrap;padding-right:0.65em;">Distributed by</th><td><a href="/wiki/Miramax_Films" class="mw-redirect" title="Miramax Films">Miramax Films</a></td></tr><tr><th scope="row" style="white-space:nowrap;padding-right:0.65em;"><div style="padding:0.1em 0;line-height:1.2em;white-space:normal;">Release date</div></th><td><div class="plainlist">
<ul><li>May&#160;21,&#160;1994<span style="display:none">&#160;(<span class="bday dtstart published updated">1994-05-21</span>)</span>&#32;(<a href="/wiki/1994_Cannes_Film_Festival" title="1994 Cannes Film Festival">Cannes</a>)</li>

Как я могу извлечь, например, Джона Траволту без выписки Роджера Авари?

Я пытался таким образом, но я не удалось поставить атрибуты"Starring" и извлечь только их. В своем коде я извлек весь текст из таблицы, но мне нужны только символы, обозначенные атрибутами "Starring".

public static void main(String[] args) throws IOException {
final Document document = Jsoup.connect("https://en.wikipedia.org/wiki/Pulp_Fiction").get();
String connectionUrl = "jdbc:sqlserver://localhost:1433;databaseName=Attore;integratedSecurity=true;";
for(Element row : document.select("table.infobox li a")) {

     String at = row.text();
     System.out.println(at);
}

Спасибо

Ответы [ 2 ]

0 голосов
/ 15 апреля 2020

Попробуйте следующее:

document.select("table.infobox tr:contains(Starring) div.plainlist li a")

Объяснение:

table.infobox // select the table with the class name infobox
tr:contains(Starring)  // finds tr elements containing the text "Starring"
div.plainlist li a  // finally find in obove selected tr all a tags in a li tag inside the div with a class name plainlist
0 голосов
/ 15 апреля 2020

Используется онлайн доступная Java -Библиотека для разбора HTML. Документами для этой библиотеки может быть Google'd для перечисленных пакетов JAR-файлов. ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ, я помогаю разработать Java - HTML.

import Torello.HTML.*;
import Torello.HTML.NodeSearch.*;
import Torello.Java.FileRW;

import java.util.Vector;
import java.io.IOException;

public class TheGimp
{
    public static void main(String[] argv) throws IOException
    {
        // Load the page-html into a string (in memory)
        String              html    = FileRW.loadFileToString("PulpFiction.html");

        // parse the html-string into vectorized-html (TagNode's and TextNode's)
        Vector<HTMLNode>    page    = HTMLPage.getPageTokens(html, false);

        // Find the explicit vector-index of the TextNode that just says "Starring"
        int                 pos     = TextNodeFind.first(page, TextComparitor.EQ, "Starring");

        // Find the start-index and end-index of the <UL>...</UL> (un-ordered list) that
        // IMMEDIATELY FOLLOWS the position computed in the previous step.
        DotPair             list    = TagNodeFindInclusive.first(page, pos, -1, "ul");

        // Build an "Inclusive Iterator" (iterates sublists) of each "<LI>...</LI>" elemnt
        HNLIInclusive       liIter  = TagNodeInclusiveIterator.iter(page, list.start, list.end, "li");

        // Print out the contents of each List-element returned by the iterator.
        while (liIter.hasNext()) System.out.println(Util.textNodesString(liIter.next()));
    }
}

Приведенная выше программа выдает этот вывод:

@cloudshell:~$ java TheGimp
John Travolta
Samuel L. Jackson
Uma Thurman
Harvey Keitel
Tim Roth
Amanda Plummer
Maria de Medeiros
Ving Rhames
Eric Stoltz
Rosanna Arquette
Christopher Walken
Bruce Willis
...