java的爬虫是不是只能抓到实际存在的数据?对于动态数据好像抓不到?

java代码

import java.io.*;
import java.net.*;
public class CatchPage {
 public static void main(String[] args) {
  // 定义即将访问的链接
  String url = "http://127.0.0.1:8080/Tests3/admin/login.jsp";
  // 定义一个字符串用来存储网页内容
  String result = "";
  // 定义一个缓冲字符输入流
  BufferedReader in = null;
  try {
   // 将string转成url对象
   URL realUrl = new URL(url);
   // 初始化一个链接到那个url的连接
   URLConnection connection = realUrl.openConnection();
   // 开始实际的连接
   connection.connect();
   // 初始化 BufferedReader输入流来读取URL的响应
   in = new BufferedReader(new InputStreamReader(
     connection.getInputStream(),"utf-8"));
   // 用来临时存储抓取到的每一行的数据
   String line;
   while ((line = in.readLine()) != null) {
    //遍历抓取到的每一行并将其存储到result里面
    result += line;
   }
  } catch (Exception e) {
   System.out.println("发送GET请求出现异常!" + e);
   e.printStackTrace();
  }
  // 使用finally来关闭输入流
  finally {
   try {
    if (in != null) {
     in.close();
    }
   } catch (Exception e2) {
    e2.printStackTrace();
   }
  }
  System.out.println(result);
 }
}

这是html代码

<!DOCTYPE html>
<html>
<head>
  <title></title>
</head>
<body>
  <div id="dataContainer">
    
    
  </div>
</body>
</html>

dataContainer的div里面的内容是ajax从后台接口获取出来显示的 。

但是我用java爬虫好像 只能抓到如下代码

<!DOCTYPE html>
<html>
<head>
  <title></title>
</head>
<body>
  <div id="dataContainer">
    
    
  </div>
</body>
</html>

有没有办法把dataContainer的div里面的数据也一起抓出来?

阅读 4.3k
4 个回答

需要用httpclient来模拟浏览器请求,来获取。也可以用jsoup, spring resttemplate

找到填充dataContainer的ajax代码,直接请求那个就可以了
一起抓就需要让一个完整的浏览器来请求页面,处理js代码了,比如.net下的webbrowser控件

两个办法,一个找到中间内容ajax的链接,直接请求该链接来获取内容。
一个通过phantomjs,也就是浏览器方式,页面完全加载了,通过浏览器API获取网页内容

自己写就要找AJAX路径了。。。框架的爬虫简单WebCollector

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题