2016-08-22 1 views
0

Я работаю в Android и с использованием Jsoup для того, чтобы выучить некоторые данные из Интернета. Я не могу найти точное имя class, где комментарий лежит в нижеприведенном коде. Я пробовал с disqus_thread, dsq-content, ul-dsq-comments и dsq-comment-body, перейдя на исходную страницу URL-адреса, но никто не вернул комментарии.Невозможно найти точное имя класса для поиска Комментарии URL-адреса с помощью jsoup

public static void main(String[] args) { 
      Document d; 
      Elements lin = null; 
      String url = "http://blogs.tribune.com.pk/story/39090/i-hate-materialistic-people-beta-but-i-love-my-designer-clothes/"; 
      try { 
       d = Jsoup.connect(url).timeout(20*1000).userAgent("Chrome").get(); 
       lin = d.getElementsByClass("dsq-comment-body"); 
       System.out.println(lin); 
      } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      int i=0; 
      for(Element l :lin){ 
       System.out.println(""+i+ " : " +l.text()); 
       i++; 
      } 
} 
+0

см. Этот родственный вопрос: http://stackoverflow.com/a/39174441/1661938 –

ответ

0

Это потому, что HTML, который составляет комментарии, генерируется динамически после загрузки страницы с использованием Javascript. Когда страница загружена, комментарий HTML не существует, поэтому Jsoup не может его получить.

Чтобы разжиться замечания у вас есть 3 варианта:

1) Использование веб-искатель, который может выполнить JavaScript. Здесь популярны Selenium Webdriver (http://www.seleniumhq.org/projects/webdriver/) и PhantomJS (http://phantomjs.org/). Первая работает, подключаясь к реализации браузера (например, Mozilla Firefox) и открывая браузер программно. Последний не открывает браузер и выполняет javascript, используя Webkit.

2) Перехватите сетевой трафик при открытии сайта (здесь вы, вероятно, можете использовать вкладку встроенной сети вашего браузера) и найдите запрос, который извлекает комментарии. Сделайте этот запрос самостоятельно и извлеките соответствующие данные в свое приложение. Имейте в виду, что это не сработает, если сервер, обслуживающий комментарии, требует какой-либо проверки подлинности.

3) Если комментарии обслуживаются специализированным провайдером с открытым доступом API, то может быть возможно извлечь их через этот API. Сайт, с которым вы связались, использует Disqus для обработки раздела комментариев, чтобы можно было подключиться к их API и получить их таким образом.

+0

Я создаю веб-искатель, который будет работать с Android-приложением. Если я перейду к опции ** 1 **, которую вы предложили, то как насчет открытия браузера? В Android-приложении? – waqas

+0

Драйвер Android для Selenium устарел. Для Android вы должны использовать appium (http://appium.io/) или Selendroid (http://selendroid.io/). См. Этот вопрос: http://stackoverflow.com/questions/18727677/is-selenium-testing-worthwhile-on-mobile-devices. Они работают, открывая WebView, который поддерживает выполнение javascript (хотя он не включен в конфигурации по умолчанию). – Soggiorno

+0

Я не хочу открывать браузер и не хочу открывать веб-представление. Есть ли какой-либо метод в 'Android', который извлекает данные' Javascript' без браузера и веб-просмотра? – waqas