2014-01-24 2 views
0

Я пытаюсь скопировать результаты поиска ключевых слов из ответов Yahoo, в моем случае, «алкогольная зависимость». Я использую Jsoup и модификацию URL, чтобы просматривать страницы результатов поиска, чтобы очистить результаты. Тем не менее, я замечаю, что, хотя я добавил URL для результатов «Новые», он продолжает показывать результаты «Релевантность», и, что еще хуже, результаты не совсем то же, что и в браузере.Скребок Yahoo Ответы с Jsoup

Например, URL-адрес для новейших результатов: http://answers.yahoo.com/search/search_result?p=alcohol+addiction&s=1&sort=new

И для соответствующих результатов, URL-адрес является: http://answers.yahoo.com/search/search_result?p=alcohol+addiction&s=1&sort=rel

И "1" изменится на 2, 3, 4, и т.д. когда вы переходите на следующую страницу (на странице 10 результатов).

Вот что мне делать, чтобы очистить страницу:

String urlID = ""; 
String end = "&sort=new"; 
String glob = "http://answers.yahoo.com/search/search_result?p=alcohol+addiction&s="; 
Integer forumID = 0; 

while(nextPageIsThere){ 
    forumID++; 
    System.out.println("Now extracting the page: "+forumID); 
    try { 
     urlID = glob+forumID+end; 
     System.out.println(urlID); 
     exdoc = Jsoup.connect(urlID).get(); 
     java.util.Date date= new java.util.Date(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

... 

Что еще более запутанной, даже если я увеличить число страниц, а на выходе системы показывает, что URL меняется на:

http://answers.yahoo.com/search/search_result?p=alcohol+addiction&s=2&sort=new

и

http://answers.yahoo.com/search/search_result?p=alcohol+addiction&s=3&sort=new

все еще царапает ту же страницу, что и на странице 1 снова и снова. Я знаю, что мой код не ошибается. Я отлаживал его часами. Я думаю, что это что-то связано с Jsoup.connect и/или Yahoo Answer, возможно, блокируя ботов? В то же время, я не думаю, что это действительно так.

Кто-нибудь знает, почему это может произойти?

+1

На странице использует javascript для загрузки страниц. Jsoup не может справиться с этим. – alkis

+0

alkis: Спасибо. Какое обходное решение? Мой соавтор уведомил меня, что проблема могла быть в &, которая прервала URL. Замена &% 26 в URL-адресе работала, но все равно это не то же самое, что при использовании браузера. –

+1

Посмотрите на веб-драйвер htmlunit или selenium. Они содержат среду выполнения js (браузер без браузера), поэтому они могут выполнять js, а затем анализировать данные. – alkis

ответ

1

JSoup работает только со статическим HTML, они не могут анализировать динамические страницы, подобные этому, где контент загружается после загрузки страницы с помощью запроса Ajax или модификации JavaScript.

Попробуйте прочитать эту страницу с помощью HTMLUnit, этот анализатор поддерживает страницы JS.

У него довольно хорошая поддержка JavaScript (которая постоянно совершенствуется) и может работать даже с довольно сложными библиотеками AJAX, имитируя Firefox или Internet Explorer в зависимости от конфигурации, которую вы хотите использовать.

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