Я пытаюсь сделать свою первую программу на Java. Цель состоит в том, чтобы написать программу, которая просматривает веб-сайт и загружает файл для меня. Однако я не знаю, как использовать Java для взаимодействия с Интернетом. Может ли кто-нибудь сказать мне, какие темы искать/читать или рекомендовать некоторые хорошие ресурсы?
Использование Java для вывода данных с веб-страницы?
Ответ 1
Простейшим решением (без зависимости от сторонней библиотеки или платформы) является создание экземпляра URL-адреса, указывающего на веб-страницу/ссылку, которую вы хотите загрузить, и чтение содержимого с использованием потоков.
Например:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
public class DownloadPage {
public static void main(String[] args) throws IOException {
// Make a URL to the web page
URL url = new URL("http://stackoverflow.com/questions/6159118/using-java-to-pull-data-from-a-webpage");
// Get the input stream through URL Connection
URLConnection con = url.openConnection();
InputStream is =con.getInputStream();
// Once you have the Input Stream, it just plain old Java IO stuff.
// For this case, since you are interested in getting plain-text web page
// I'll use a reader and output the text content to System.out.
// For binary content, it better to directly read the bytes from stream and write
// to the target file.
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String line = null;
// read each line and write to System.out
while ((line = br.readLine()) != null) {
System.out.println(line);
}
}
}
Надеюсь, что это поможет.
Ответ 2
Основы
Посмотрите на них, чтобы построить решение более или менее с нуля:
- Начните с основ: Учебник по Java глава по сети, в том числе Работа с URL-адресами
- Сделайте вещи проще для себя: Apache HttpComponents (включая HttpClient)
Легко склеенные и сшитые материалы
У вас всегда есть возможность вызова внешних инструментов из Java с помощью exec()
и подобных методов. Например, вы можете использовать wget
или cURL
.
Hardcore Stuff
Тогда, если вы хотите перейти к более полноценным вещам, к счастью, необходимость в автоматическом веб-тестировании дала нам очень практические инструменты для этого. Посмотрите:
- HtmlUnit (мощный и простой)
- Selenium, Selenium-RC
- WebDriver/Selenium2 (все еще в работе)
- JBehave с JBehave Web
Некоторые другие библиотеки целенаправленно написаны с учетом веб-лома:
Некоторые способы обхода
Java - это язык, но также и платформа, на которой работают многие другие языки. Некоторые из них интегрируют большой синтаксический сахар или библиотеки, чтобы легко создавать скребки.
Отъезд:
- Groovy (и его XmlSlurper)
- или Scala (с большой поддержкой XML, представленной здесь и здесь)
Если вы знаете отличную библиотеку для Ruby (JRuby с текстом о соскабливании с помощью JRuby и HtmlUnit) или Python (Jython), или вы предпочитаете эти языки, а затем даете своим портам JVM шанс.
Некоторые дополнения
Некоторые другие подобные вопросы:
Ответ 3
Здесь мое решение использует фразы URL
и try with resources
, чтобы поймать исключения.
/**
* Created by mona on 5/27/16.
*/
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
public class ReadFromWeb {
public static void readFromWeb(String webURL) throws IOException {
URL url = new URL(webURL);
InputStream is = url.openStream();
try( BufferedReader br = new BufferedReader(new InputStreamReader(is))) {
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
}
catch (MalformedURLException e) {
e.printStackTrace();
throw new MalformedURLException("URL is malformed!!");
}
catch (IOException e) {
e.printStackTrace();
throw new IOException();
}
}
public static void main(String[] args) throws IOException {
String url = "https://madison.craigslist.org/search/sub";
readFromWeb(url);
}
}
Вы можете дополнительно сохранить его в файл на основе ваших потребностей или проанализировать его с помощью библиотек XML
или HTML
.