Ну, я в значительной степени пытаюсь выяснить, как вытянуть информацию от веб-страницы и принести ее в мою программу (в Java).
Например, если бы я знаю точную страницу, я хочу информацию от ради простоты страница объекта Best Buy, как я получил бы соответствующую информацию, в которой я нуждаюсь прочь той страницы? Как заголовок, цена, описание?
Что это обработало бы даже быть названным? Я понятия не имею, должны были даже начать исследовать это.
Править: Хорошо, я запускаю тест для JSoup (тот, отправленный BalusC), но я продолжаю получать эту ошибку:
Exception in thread "main" java.lang.NoSuchMethodError: java.util.LinkedList.peekFirst()Ljava/lang/Object;
at org.jsoup.parser.TokenQueue.consumeWord(TokenQueue.java:209)
at org.jsoup.parser.Parser.parseStartTag(Parser.java:117)
at org.jsoup.parser.Parser.parse(Parser.java:76)
at org.jsoup.parser.Parser.parse(Parser.java:51)
at org.jsoup.Jsoup.parse(Jsoup.java:28)
at org.jsoup.Jsoup.parse(Jsoup.java:56)
at test.main(test.java:12)
У меня действительно есть Apache палатой общин
Используйте парсер HTML, например Jsoup. Я отдаю ему предпочтение перед другими HTML парсерами, доступными в Java, поскольку он поддерживает jQuery, как CSS селекторы. Кроме того, его класс, представляющий список узлов, Elements
, реализует Iterable
, так что вы можете перебирать их в расширенном цикле for (поэтому нет необходимости возиться с многословными Node
и NodeList
, как в обычном Java DOM-парсере).
Вот базовый пример запуска (просто поместите последний Jsoup JAR файл в classpath):
package com.stackoverflow.q2835505;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class Test {
public static void main(String[] args) throws Exception {
String url = "https://stackoverflow.com/questions/2835505";
Document document = Jsoup.connect(url).get();
String question = document.select("#question .post-text").text();
System.out.println("Question: " + question);
Elements answerers = document.select("#answers .user-details a");
for (Element answerer : answerers) {
System.out.println("Answerer: " + answerer.text());
}
}
}
Как вы уже догадались, это печатает ваш собственный вопрос и имена всех отвечающих.
Это называется screen scraping, в Википедии есть статья о более специфическом web scraping. Это может быть серьезной проблемой, потому что там есть уродливый, беспорядочный, сломанный, если не для браузера, HTML, так что удачи.
Я бы использовал JTidy - он похож на JSoup, но я плохо знаю JSoup. JTidy обрабатывает сломанный HTML и возвращает документ w3c, поэтому вы можете использовать его в качестве источника XSLT для извлечения действительно интересующего вас контента. Если вы не знаете XSLT, то вы можете также использовать JSoup, как документ Модель приятнее работать, чем w3c.
РЕДАКТИРОВАТЬ: Быстрый просмотр веб-сайта JSoup показывает, что JSoup действительно может быть лучшим выбором. Кажется, он поддерживает селекторы CSS для извлечения материалов из документа. С этим может быть намного проще работать, чем с XSLT.
Вы можете использовать парсер html (много полезных ссылок здесь: java html parser).
Этот процесс называется "захват содержимого сайта". Для дальнейшей инверсии выполните поиск 'grab website content java'.
Вы, вероятно, захотите посмотреть на HTML, чтобы увидеть, можете ли вы найти строки, которые уникальны и находятся рядом с вашим текстом, затем вы можете использовать смещения строк/символов, чтобы добраться до данных.
Может быть неудобно в Java, если нет классов XML, подобных тем, что есть в System.XML.Linq
в C#.
Посмотрите на библиотеку cURL. Я никогда не использовал ее в Java, но уверен, что для нее должны быть привязки. По сути, вы посылаете cURL-запрос на страницу, которую хотите "соскрести". Запрос вернет строку с исходным кодом страницы. Далее вы будете использовать regex для анализа любых данных, которые вы хотите получить из исходного кода. Вот, в общем, как вы собираетесь это делать.
Решение JSoup отличное, но если вам нужно извлечь что-то действительно простое, может быть проще использовать регулярное выражение или String.indexOf
As другие уже упоминали, что процесс называется очисткой