Java_爬虫,如何抓取Js动态生成数据的页面?

时间:2021-11-06 08:33:52
很多网站是用js或Jquery 生成数据的,到后台获取到数据以后,用 document.write()或者("#id").html="" 的方式 写到页面中,这个时候用浏览器查看源码是看不到数据的。

HttpClient是不行的,看网上说HtmlUnit,说  可以获取后台js加载完后的完整页面,但是我按照文章上说的 写了 ,都不好使。

求解答,其中典型的就是这个链接的页面,怎么能在java程序中获取其中的数据?

http://xinjinqiao.tprtc.com/admin/main/flrpro.do 

8 个解决方案

#1


没人遇到过这个问题吗

#2


试试 
String s= "http://xinjinqiao.tprtc.com/admin/main/pro!lrprolist.do";
 URL url = new URL(s);
 HttpURLConnection http = (HttpURLConnection) url.openConnection();
 http.setDoOutput(true);  
 http.setDoInput(true);  
         http.setRequestMethod("POST");  
 http.connect();  
 OutputStreamWriter out = new OutputStreamWriter(http.getOutputStream(), "UTF-8"); 

 String input = "name=flr&nowpage=1&pagesize=10"; 
 
 out.append(input);  
         out.flush();  
         out.close();  
         int length = (int) http.getContentLength();
         System.out.println(length);
       BufferedReader reader = new BufferedReader(new InputStreamReader(http.getInputStream()));
   String line;
   StringBuffer buffer = new StringBuffer();
   while ((line = reader.readLine()) != null) {
   buffer.append(line);
   }
   reader.close();
   http.disconnect();
   System.out.println(buffer.toString());

#3


   很好, 学习了 

#4


引用 2 楼 rui888 的回复:
试试 
String s= "http://xinjinqiao.tprtc.com/admin/main/pro!lrprolist.do";
 URL url = new URL(s);
 HttpURLConnection http = (HttpURLConnection) url.openConnection();
 http.setDoOutput(true);  
 http.setDoInput(true);  
         http.setRequestMethod("POST");  
 http.connect();  
 OutputStreamWriter out = new OutputStreamWriter(http.getOutputStream(), "UTF-8"); 

 String input = "name=flr&nowpage=1&pagesize=10"; 
 
 out.append(input);  
         out.flush();  
         out.close();  
         int length = (int) http.getContentLength();
         System.out.println(length);
       BufferedReader reader = new BufferedReader(new InputStreamReader(http.getInputStream()));
   String line;
   StringBuffer buffer = new StringBuffer();
   while ((line = reader.readLine()) != null) {
   buffer.append(line);
   }
   reader.close();
   http.disconnect();
   System.out.println(buffer.toString());




谢谢,所以你是 直接找出js的请求地址,然后获取 后台的json数据的方式?
看来不能解析js,或者说 获取js执行完的 页面 了。

那问一下,你是怎么找到这个地址的?
我看firedebug里 只有一个当前页面的网络请求啊?
Java_爬虫,如何抓取Js动态生成数据的页面?

你是看的js代码?

#5


代码可以看到, 你也可以抓包看看。

#6


看firedebug的XHR

#7


该回复于2015-11-13 11:16:17被管理员删除

#8


该回复于2016-10-14 09:04:25被管理员删除

#1


没人遇到过这个问题吗

#2


试试 
String s= "http://xinjinqiao.tprtc.com/admin/main/pro!lrprolist.do";
 URL url = new URL(s);
 HttpURLConnection http = (HttpURLConnection) url.openConnection();
 http.setDoOutput(true);  
 http.setDoInput(true);  
         http.setRequestMethod("POST");  
 http.connect();  
 OutputStreamWriter out = new OutputStreamWriter(http.getOutputStream(), "UTF-8"); 

 String input = "name=flr&nowpage=1&pagesize=10"; 
 
 out.append(input);  
         out.flush();  
         out.close();  
         int length = (int) http.getContentLength();
         System.out.println(length);
       BufferedReader reader = new BufferedReader(new InputStreamReader(http.getInputStream()));
   String line;
   StringBuffer buffer = new StringBuffer();
   while ((line = reader.readLine()) != null) {
   buffer.append(line);
   }
   reader.close();
   http.disconnect();
   System.out.println(buffer.toString());

#3


   很好, 学习了 

#4


引用 2 楼 rui888 的回复:
试试 
String s= "http://xinjinqiao.tprtc.com/admin/main/pro!lrprolist.do";
 URL url = new URL(s);
 HttpURLConnection http = (HttpURLConnection) url.openConnection();
 http.setDoOutput(true);  
 http.setDoInput(true);  
         http.setRequestMethod("POST");  
 http.connect();  
 OutputStreamWriter out = new OutputStreamWriter(http.getOutputStream(), "UTF-8"); 

 String input = "name=flr&nowpage=1&pagesize=10"; 
 
 out.append(input);  
         out.flush();  
         out.close();  
         int length = (int) http.getContentLength();
         System.out.println(length);
       BufferedReader reader = new BufferedReader(new InputStreamReader(http.getInputStream()));
   String line;
   StringBuffer buffer = new StringBuffer();
   while ((line = reader.readLine()) != null) {
   buffer.append(line);
   }
   reader.close();
   http.disconnect();
   System.out.println(buffer.toString());




谢谢,所以你是 直接找出js的请求地址,然后获取 后台的json数据的方式?
看来不能解析js,或者说 获取js执行完的 页面 了。

那问一下,你是怎么找到这个地址的?
我看firedebug里 只有一个当前页面的网络请求啊?
Java_爬虫,如何抓取Js动态生成数据的页面?

你是看的js代码?

#5


代码可以看到, 你也可以抓包看看。

#6


看firedebug的XHR

#7


该回复于2015-11-13 11:16:17被管理员删除

#8


该回复于2016-10-14 09:04:25被管理员删除