2016-02-02 2 views
0

Я пытаюсь разобрать и обработать HTML с помощью jsoup. Он работает отлично для большинства URL-адресов, но не работает. напримерОшибка Jsoup на некоторых сайтах

Это работает:

Document document = Jsoup.connect("https://www.yahoo.com/politics/time-to-take-sanders-seriously-1342599418519606.html") 
     .userAgent("Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11 Firefox/19.0") 
     .timeout(10*1000) 
     .get(); 

Это не удается:

Document document = Jsoup.connect("http://www.sciencedaily.com/releases/2016/02/160201215944.htm") 
     .userAgent("Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11 Firefox/19.0") 
     .timeout(10*1000) 
     .get(); 

Где я мог бы неправильно?

Спасибо.

+1

Какова ошибка, которую вы получаете для второго примера? –

+0

@sparky без ошибок. Ничего не возвращается. вещь объяснение по luksch имеет смысл –

ответ

1

Эта страница является обычной HTML. Я не знаю, как это объяснить, но если вы измените свой запрос на запрос POST, вы получите то, что хотите, хотя мой браузер (Firefox) получает страницу с запросом GET.
Я попытался добавить все заголовки, которые отправил браузер - HOST, ACCEPT и т. Д., Но только изменение запроса на POST выполнило эту работу.

1

Кажется, что во втором примере вы получаете короткий HTML-код, в котором нет ничего особенного, кроме некоторого JavaScript. Таким образом, страница работает нормально. Вероятно, проблема заключается в том, что JavaScript не выполняется, что выходит за рамки JSoup, поскольку Jsoup не может выполнить JavaScript.

Для этого вам понадобится другой подход, например. Selenium Webdriver или HTMLUnit.

+0

'Selenium Webdriver' или' HTMLUnit' выглядит как перебор. Трюк состоит в том, чтобы использовать 'post()' вместо 'get()', как предложено @TDG –

+0

Я рад, что это сработало для вас. – luksch

Смежные вопросы