Чтение HTML из URL в Java против Python - PullRequest
0 голосов
/ 26 февраля 2019

Я пытаюсь прочитать HTML-код с определенного URL-адреса и сохранить его в строке для анализа.Я сослался на предыдущий пост , чтобы выручить меня.Когда я распечатываю прочитанное, я получаю только специальные символы.

Вот мой Java-код (с опущенным try / catches), который читает с URL и печатает:

String path = "https://html1-f.scribdassets.com/913q5pjrsw60h9i4/pages/106-6b1bd15200.jsonp";
URL url = new URL(path);
InputStream in = url.openStream();

BufferedReader bw = new BufferedReader(new InputStreamReader(in, "UTF-8");

String line;            
while ((line = bw.readLine()) != null) {
    System.out.println(line);
}

Вывод программы:

�ĘY106-6b1bd15200.jsonpmP�r� �Ƨ�!�%m�vD"��Ra*��w�%����ݳ�sβ��MK�d�9+%�m��l^��މ����:����  ���8B�Vce�.A*��x$FCo���a�b�<����Xy��m�c�>t����� �Z������Gx�o�   �J���oKe�0�5�kGYpb�*l����+|�U���-�N3��jBp�R�z5Cۥjh��o�;�~)����~��)~ɮhy��<c,=;tHW���'�c�=~�w���

Ожидаемый результат:

window.page106_callback(["<div class=\"newpage\" id=\"page106\" style=\"width: 902px; height:1273px\">\n<div class=image_layer style=\"z-index: 1\">\n<div class=ie_fix>\n<img class=\"absimg\" style=\"left:18px;top:27px;width:860px;height:1077px;clip:rect(1px 859px 1076px 1px)\" orig=\"http://html.scribd.com/913q5pjrsw60h9i4/images/106-6b1bd15200.jpg\"/>\n</div>\n</div>\n</div>\n\n"]);

Сначала я подумал, что это проблема с разрешениями или чем-то, что каким-то образом зашифровало поток, но мой друг написал небольшой скрипт на Python, чтобы сделать то же самое, и этоработал, тем самым исключая это.Вот что он написал:

import requests

link = 'https://html1-f.scribdassets.com/913q5pjrsw60h9i4/pages/106- 
6b1bd15200.jsonp'
f = requests.get(link)
text = (f.text)
print(text)

Итак, вопрос в том, почему версия Java не может правильно читать и печатать с этого конкретного URL-адреса? Обратите внимание, что я пытался протестировать некоторые другие URL-адресас разных сайтов и те работали нормально.Может быть, я должен выучить Python.

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

@ Морис Перри прав, я пробовал с кодом ниже

String url = "https://html1-f.scribdassets.com/913q5pjrsw60h9i4/pages/106-6b1bd15200.jsonp";

URL obj = new URL(url);
HttpURLConnection con = (HttpURLConnection) obj.openConnection();

BufferedReader in = new BufferedReader(
        new InputStreamReader(new GZIPInputStream(con.getInputStream())));
String inputLine;
StringBuffer response = new StringBuffer();

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

System.out.println(response.toString());
0 голосов
/ 26 февраля 2019

Ответ кодируется в gzip.Вы можете сделать:

        InputStream in = new GZIPInputStream(con.getInputStream());
...