Соскребание экрана Java с помощью JTidy - анализ значений HTML
Итак, что я пытаюсь сделать, это очистить веб-страницу IMDB для данных из веб-серий. Проблема в том, что когда я конвертирую страницу в объект DOM и пытаюсь получить значения, это не так просто, как кажется.
Например: я использую getElementsByTagName("h1") -> он возвращает 1 значение, поэтому я знаю, какое значение я могу получить (в данном случае имя шоу). Но когда я хочу извлечь рейтинг шоу, он погружается в Div и его очень трудно найти. Поэтому я пытаюсь использовать getElementById(идентификатор элемента), чтобы получить элемент (div) этого идентификатора, чтобы я мог сократить поиск.
Но он возвращает нулевое значение? Какой самый простой способ очистить такую страницу?
Вот фрагмент кода public final class IMDBExtractor {private String imdbId;
public IMDBExtractor(String imdbId) {
this.imdbId = imdbId;
}
public synchronized TvShow extractTvShow() throws IOException {
TvShow show = new TvShow();
//access imdb url
URL url = new URL("http://www.imdb.com/title/" + imdbId);
URLConnection uc = url.openConnection();
uc.addRequestProperty("User-Agent",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)");
uc.connect();
//Tidy up HTML
Tidy tidy = new Tidy();
tidy.setXmlOut(true);
tidy.setShowWarnings(false);
Document doc = tidy.parseDOM(uc.getInputStream(), null);
//Set show attributes
show.setImdbId(imdbId);
show.setTitle(extractSeriesName(doc));
show.setRating(extractRating(doc));
return show;
}
private String extractSeriesName(Document doc) throws IOException {
return doc.getElementsByTagName("h1").item(0).getChildNodes().item(0).getNodeValue();
}
private Double extractRating(Document doc) throws IOException {
System.out.println(doc.getElementById("content-2-wide").getNodeName());
return null;
}
}
Страница, которую я пытаюсь поцарапать в этом случае: Стрелка
Все страницы IMDB имеют одинаковый макет, так что это не проблема, вы, ребята, знаете легкий путь?