2015-12-20 2 views
1

Я новичок в jsoup, и мне нужно его использовать, но вот проблема. Просто просматривается ограниченное количество ссылок. Я ползаю http://shais.net/, и я просто вижу 35 абс url, хотя у него есть как минимум 430 ссылок. Вот мой код:Jsoup просто обходит ограниченное количество ссылок

public static void main(String[] args) throws SQLException, IOException { 

     PreparedStatement statement = db.Connection.connection.prepareStatement("truncate record;"); 
     statement.execute(); 

     processPage("http://shais.net/");//TODO 


    } 

    public static void processPage(String URL) throws SQLException, IOException { 

     String sql = "select * from Record where URL = '"+URL+"'"; 
     PreparedStatement select = db.Connection.connection.prepareStatement(sql); 
     ResultSet result = select.executeQuery(); 
     if(result.next()){ 

     }else{ 
      sql = "insert into record"+" (URL) values"+"('"+URL+"')"; 
      PreparedStatement statement = db.Connection.connection.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS); 
      statement.execute(); 

      org.jsoup.nodes.Document doc =Jsoup.connect("http://shais.net/").header("Accept-Encoding", "gzip, deflate")//TODO 
        .userAgent("Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0") 
        .maxBodySize(0) 
        .timeout(600000).get(); 

      if(doc.text().contains("research")){ 

       System.out.println(URL); 

      } 


      Elements questions = doc.select("a[href]"); 
      for(Element link:questions){ 
      if(link.attr("href").contains("shais.net")) 
        processPage(link.attr("abs:href")); 
        System.out.println(link.attr("abs:href")); 

      } 


     } 

    } 

Пожалуйста, помогите мне в этом, где проблема.
Спасибо.

ответ

0

На сайте, который вы пытаетесь загрузить, используется Javascript для создания DOM. JSoup dos не выполняет JavaScript, поэтому вы не видите ссылки.

Вы можете использовать селен-webdriver вместе с HTMLUnit или phantomjs для доступа к странице. Или вы пытаетесь идентифицировать вызовы AJAX, которые делает сайт, и называть их напрямую JSoup.

Другой распространенной причиной недостающей информации в документе JSoup может быть размер документа. По умолчанию Jsoup ограничивает размер каждого принятого документа до 1M. Если вы хотите получить более крупные сайты, вам может потребоваться повысить этот лимит, используя Jsoup.connect(URL).maxBodySize(0), но вы это уже делаете.

+0

спасибо. Для этого сайта https://globerunner.com/ также указывается 26 ссылок. И есть ли какой-либо другой API или инструмент, который я могу использовать с Java? Благодарю. –

+0

@MustafaMohammadi, вы можете проверить, откуда загружается веб-сайт JavaScript, используя инструменты разработчика браузеров, а затем напрямую загружать его в свой код. – JonasCz

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