Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / распарсить страничку, вытянуть данные. HALP / 25 сообщений из 32, страница 1 из 2
01.03.2016, 19:34
    #39182995
wolfio
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
распарсить страничку, вытянуть данные. HALP
Здравствуйте.

я нуб в яве. Хочу распарсить простую http://example.com/about.html#contacts и получить в процессе буковки строчками со странички в консоль. Нагуглил пару десятков разных примеров и слепил нечто, но оно не работает.

буду очень благодарен за наводящие подсказки и точечную отправку к нужному источнику.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
package MyPackage.MyTest1;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;

public class TryToReadFromURL
{

    public static void main(String[] args) throws Exception
    {
        // Set the http proxy to webcache.mydomain.com:8080
        System.setProperty("http.proxyHost", "10.10.255.42");
        System.setProperty("http.proxyPort", "8080");

        //URL url = new URL("https://tv.yandex.ru/213?grid=main&period=now");
        URL url = new URL("http://example.com/about.html#contacts");

        System.out.println("Protocol: " + url.getProtocol());
        System.out.println("Port: " + url.getPort());
        System.out.println("Host: " + url.getHost());
        System.out.println("File: " + url.getFile());
        System.out.println("Ext: " + url.toExternalForm());
        System.out.println("User: " + url.getUserInfo());

        URLConnection urlCon = url.openConnection();
/*        System.out.println("Date: " + urlCon.getDate());
        System.out.println("Type: " + urlCon.getContentType());
        System.out.println("Exp: " + urlCon.getExpiration());
        System.out.println("Last M: " + urlCon.getLastModified());
        System.out.println("Length: " + urlCon.getContentLength());
  */
        
        BufferedReader reader = new BufferedReader(new InputStreamReader(urlCon.getInputStream()));

        String tmp = reader.readLine();
        while (!tmp.isEmpty())
        {
            System.out.println(tmp);
            tmp = reader.readLine();
        }

        System.clearProperty("http.proxyHost");
    }
}
...
Рейтинг: 0 / 0
01.03.2016, 19:38
    #39183002
grasoff.net
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
распарсить страничку, вытянуть данные. HALP
python
Код: python
1.
2.
3.
4.
5.
import urllib

uo = urllib.urlopen("http://example.com/about.html#contacts")
contacts = uo.read()
print contacts
...
Рейтинг: 0 / 0
01.03.2016, 19:39
    #39183003
grasoff.net
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
распарсить страничку, вытянуть данные. HALP
wolfioНагуглил пару десятков разных примеров и слепил нечто, но оно не работает http://stackoverflow.com/questions/4328711/read-url-to-string-in-few-lines-of-java-code
...
Рейтинг: 0 / 0
01.03.2016, 20:16
    #39183025
wolfio
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
распарсить страничку, вытянуть данные. HALP
grasoff.net,

а причем тут питон?
сайт stackoverflow.com действительно очень клевый, когда ты уже прожженный и искушенный кодер. но мне там многое не понятно, и возможности задать там вопрос не имею - ограничен интернет.

вариант, который там набрал макс. голосов мне не ясен - я не вижу куда введена ссылка. Так же мне среда говорит, что класса URLConnectionReader нет в ней (это если смотреть самый заплюсованный вариант).

В общем, на примерах других у меня получается каша. Если можно, я хотел бы критики именно моего примера.
...
Рейтинг: 0 / 0
01.03.2016, 23:09
    #39183115
JulT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
распарсить страничку, вытянуть данные. HALP
Jsoup можно попробовать:
Код: java
1.
2.
3.
String html = "<p> <span> foo </span> <em> bar <a> foobar </a> baz </em> </p>";
Document doc = Jsoup.parse(html);
System.out.println(doc.text());
...
Рейтинг: 0 / 0
02.03.2016, 06:10
    #39183183
grasoff.net
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
распарсить страничку, вытянуть данные. HALP
wolfioвариант, который там набрал макс. голосов мне не ясен - я не вижу куда введена ссылка. Так же мне среда говорит, что класса URLConnectionReader нет в ней (это если смотреть самый заплюсованный вариант).ссылка передаётся параметром командной строки
класс там есть

1. cd c:\
2. mkdir .\temp\urlreader
3. notepad.exe
4. [Ctrl + A] [Ctrl + C] [Ctrl + V] вот того самого примера
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
import java.net.*;
import java.io.*;

public class URLConnectionReader {
    public static String getText(String url) throws Exception {
        URL website = new URL(url);
        URLConnection connection = website.openConnection();
        BufferedReader in = new BufferedReader(
                                new InputStreamReader(
                                    connection.getInputStream()));

        StringBuilder response = new StringBuilder();
        String inputLine;

        while ((inputLine = in.readLine()) != null) 
            response.append(inputLine);

        in.close();

        return response.toString();
    }

    public static void main(String[] args) throws Exception {
        String content = URLConnectionReader.getText("http://lenta.ru/");
        System.out.println(content);
    }
}



5. Save as c:\temp\urlreader\URLConnectionReader.java
6. javac URLConnectionReader.java
7. java URLConnectionReader
8. и получаешь в процессе буковки строчками со странички в консоль
...
Рейтинг: 0 / 0
02.03.2016, 06:12
    #39183184
grasoff.net
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
распарсить страничку, вытянуть данные. HALP
wolfioа причем тут питон?java не очень хороший язык для обучения
...
Рейтинг: 0 / 0
02.03.2016, 10:20
    #39183313
wolfio
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
распарсить страничку, вытянуть данные. HALP
grasoff.net,
спасибо, я попробую.
а почему не очень хорош для обучения? у меня по ходу обучения пока что все получалось :/
...
Рейтинг: 0 / 0
02.03.2016, 10:21
    #39183315
lleming
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
распарсить страничку, вытянуть данные. HALP
grasoff.netpython
Код: python
1.
2.
3.
4.
5.
import urllib

uo = urllib.urlopen("http://example.com/about.html#contacts")
contacts = uo.read()
print contacts



+1
...
Рейтинг: 0 / 0
02.03.2016, 10:25
    #39183322
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
распарсить страничку, вытянуть данные. HALP
wolfioа почему не очень хорош для обучения?
видимо у кого-то вызывает трудности
...
Рейтинг: 0 / 0
02.03.2016, 10:25
    #39183323
lleming
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
распарсить страничку, вытянуть данные. HALP
на питоне очень здорово на коленке прототипы делать или мелкие утилиты,
которые можно хоть в консоли python, запускать и отлаживать.

over 1000 библиотек и биндингов ко всему
...
Рейтинг: 0 / 0
02.03.2016, 10:26
    #39183325
grasoff.net
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
распарсить страничку, вытянуть данные. HALP
wolfioу меня по ходу обучения пока что все получалосьну, вот с получением контента по ссылке не очень )
...
Рейтинг: 0 / 0
02.03.2016, 11:26
    #39183445
grasoff.net
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
распарсить страничку, вытянуть данные. HALP
wolfioа почему не очень хорош для обучения?по статистике )
...
Рейтинг: 0 / 0
02.03.2016, 11:34
    #39183463
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
распарсить страничку, вытянуть данные. HALP
Существуют три вида лжи: ложь, наглая ложь и статистика ( С )
...
Рейтинг: 0 / 0
02.03.2016, 14:45
    #39183799
namidp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
распарсить страничку, вытянуть данные. HALP
Попробуй так -
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
public void getTextURL(String address) throws MalformedURLException, IOException {
        Authenticator authenticator = new Authenticator() {

            public PasswordAuthentication getPasswordAuthentication() {
                return (new PasswordAuthentication(PROXY_LOGIN,
                        PROXY_PSW.toCharArray()));
            }
        };
        Authenticator.setDefault(authenticator);

        URL url = new URL(address);
        Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(PROXY_ADDRESS, PROXY_PORT));
        URLConnection c = url.openConnection(proxy);
        c.setRequestProperty("User-Agent", "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2");
        StringBuilder sb;
        try (BufferedReader br = new BufferedReader(new InputStreamReader(c.getInputStream()))) {
            String s;
           
            while ((s = br.readLine()) != null) {

                System.out.println(s);

            }
        }
       
    }
...
Рейтинг: 0 / 0
03.03.2016, 10:30
    #39184537
wolfio
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
распарсить страничку, вытянуть данные. HALP
grasoff.net,
спасибо! получилось благодаря вашему разъяснению. Только настройки прокси вставил еще, иначе нет подключения.


Ребят, вот знаете есть баян, про то, что на иностранных форумах задаешь ответ, и тебе пытаются сразу помочь, а на наших форумах, первые три скажут что тебе это не нужно, еще 5ро скажут что надо делать совсем не так или это бессмысленно, и только последний поможет, когда уже тема потеряет актуальность) это не про мой случай, конечно, но все же правда)

всем спасиба!))
...
Рейтинг: 0 / 0
03.03.2016, 15:50
    #39185105
wolfio
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
распарсить страничку, вытянуть данные. HALP
ааа ребят ((

подключение то работает, но только для http://, а я хочу данные выгрести из https://

на stackoverflow пожалуйста не посылайте (
...
Рейтинг: 0 / 0
03.03.2016, 15:56
    #39185119
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
распарсить страничку, вытянуть данные. HALP
wolfioааа ребят ((

подключение то работает, но только для http://, а я хочу данные выгрести из https://

на stackoverflow пожалуйста не посылайте (
По HTTPS тоже будет работать, если на сервере валидный сертификат.
В противном случае надо сертификат качнуть самому и добавить в JKS, либо отключить валидацию SSL в HTTP вообще.
...
Рейтинг: 0 / 0
03.03.2016, 16:04
    #39185128
wolfio
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
распарсить страничку, вытянуть данные. HALP
Blazkowicz,

вы не могли бы поподробнее немного? не силен в веб разработке пока.

1. где качнуть сертификат, и что такое JKS?
2. как отключить SSL в HTTP? и на чем, кроме работы консольной проги это скажется?
...
Рейтинг: 0 / 0
03.03.2016, 16:08
    #39185138
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
распарсить страничку, вытянуть данные. HALP
wolfio,

Вот такой грязных хак
http://stackoverflow.com/a/19723687
Влияет на всю JVM, если вы только свою консоль запускаете, то больше ни на что не повлияет.
...
Рейтинг: 0 / 0
03.03.2016, 16:19
    #39185154
wolfio
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
распарсить страничку, вытянуть данные. HALP
Blazkowicz,
действительно, какая грязь )

ну а если серьезно, вы не могли бы мне как новичку немного больше воды дать?

Если я отключаю таким хаком (точнее меняю SSL на TLS), я типа перевожу трафик в незашифрованный? Т.е. если инфу тяну не конфиденциальную, то угрозы как бы нет, условно говоря. Верно?

В результате у меня вышел вот такой код
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
package MyPackage.MyTest1;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import javax.net.ssl.*;
import java.security.cert.X509Certificate;

public class TryToReadFromURL
{

    public static void main(String[] args) throws Exception
    {

        SSLContext sc = SSLContext.getInstance("TLS");
        sc.init(null, new TrustManager[] { new TrustAllX509TrustManager() }, new java.security.SecureRandom());
        HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
        HttpsURLConnection.setDefaultHostnameVerifier( new HostnameVerifier(){
            public boolean verify(String string,SSLSession ssls) {
                return true;
            }
        });
        // Set the http proxy to webcache.mydomain.com:8080
        System.setProperty("http.proxyHost", "10.10.255.42");
        System.setProperty("http.proxyPort", "8080");
        System.setProperty("https.proxyHost", "10.10.255.42");
        System.setProperty("https.proxyPort", "8080");

        URL url = new URL("https://tv.yandex.ru/213?grid=main&period=now");
        //URL url = new URL("http://www.codecrete.net/UnwrapIt");

        System.out.println("Protocol: " + url.getProtocol());
        System.out.println("Port: " + url.getPort());
        System.out.println("Host: " + url.getHost());
        System.out.println("File: " + url.getFile());
        System.out.println("Ext: " + url.toExternalForm());
        System.out.println("User: " + url.getUserInfo());

        URLConnection urlCon = url.openConnection();
        System.out.println("Date: " + urlCon.getDate());
        System.out.println("Type: " + urlCon.getContentType());
        System.out.println("Exp: " + urlCon.getExpiration());
        System.out.println("Last M: " + urlCon.getLastModified());
        System.out.println("Length: " + urlCon.getContentLength());
        BufferedReader reader = new BufferedReader(new InputStreamReader(urlCon.getInputStream()));

        String tmp = reader.readLine();
        while (!tmp.isEmpty())
        {
            System.out.println(tmp);
            tmp = reader.readLine();
        }

        System.clearProperty("http.proxyHost");
    }
    /**
     * DO NOT USE IN PRODUCTION!!!!
     * This class will simply trust everything that comes along.
     * @author frank
     */
    public static class TrustAllX509TrustManager implements X509TrustManager {
        public X509Certificate[] getAcceptedIssuers() {
            return new X509Certificate[0];
        }

        public void checkClientTrusted(java.security.cert.X509Certificate[] certs,
                                       String authType) {
        }

        public void checkServerTrusted(java.security.cert.X509Certificate[] certs,
                                       String authType) {
        }

    }
}



В результате, программка выдает мне ошибочку NullPointerException , ссылающуюся на строку while (!tmp.isEmpty())
почему? что-то написано не верно?
...
Рейтинг: 0 / 0
03.03.2016, 16:40
    #39185182
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
распарсить страничку, вытянуть данные. HALP
wolfioя типа перевожу трафик в незашифрованный?
трафик остаётся зашифрованным, проверка достоверности источника отключается

что касается NullPointerException - readLine возвращает null в конце потока
...
Рейтинг: 0 / 0
03.03.2016, 16:59
    #39185206
wolfio
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
распарсить страничку, вытянуть данные. HALP
Изопропил,

спасибо ра разьяснение.

Уважаемые знатоки, можете еще подсказаньку дать - страничка выгрузилась в XML виде.
Про парсинг сходу ничего не знаю пока, скопировал в блокнот с поддержкой XML, и он говорит, что распарсить не может по тегам.
Есть ли в яве средства для парсинга битого XML?
...
Рейтинг: 0 / 0
03.03.2016, 17:04
    #39185212
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
распарсить страничку, вытянуть данные. HALP
wolfio,

HTML не является подмножством XML.
...
Рейтинг: 0 / 0
03.03.2016, 17:24
    #39185245
wolfio
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
распарсить страничку, вытянуть данные. HALP
Blazkowicz,
да, вы правы, я снова сказал не то, что имел ввиду :)

как распарсить HTML ?))
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / распарсить страничку, вытянуть данные. HALP / 25 сообщений из 32, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]