如何用java抓取ajax页面的内容

如何用java抓取ajax页面的内容,第1张

ajax页面是动态生成了,直接抓不到。不过也不是没有途径的,通常找到该ajax通道地址还是能获取到里面的内容的。

从ajax所在页面可以找到蛛丝马迹,当然每个页面都不一样,所以你别问我要死方法。

我给你指个思路:用火狐浏览器,监控页面信息,当你点击请求时,会有通道地址信息出现。

当然你获得通道信息知识相对某一个请求的,你还得分析出它们的通式。

我拿sina新闻网举个例子你可能好理解一点:某国内新闻,标题,正文,日期我都从爬取的页面获得了,但我还想获得评论的信息(评论是动态生成的)。于是,我解析爬取页面的<meta name="sudameta"> 因为这个标签有改新闻评论通道的两个信息:channel和newsid。等等等等

就是这种思路,最后找到评论页面。比如title------------中纪委:部分干部不想抓不会抓不敢抓致问题拖炸|中纪委|问责_新浪新闻

拼出的评论通道是comment5newssinacomcn/page/infoformat=json&channel=gn&newsid=1-1-31456214&group=0&compress=1&ie=gbk&oe=gbk&page=1&page_size=10

然后你去解析这个页面内容,再转码就可以得到评论内容了。

我这么说不知道你明白怎么做了不?

这是我做网络爬虫的一点点心得,曾经尝试了各种方法,包括引入第三方jar也没很好的结局,最终才获得这么些心得,毫无保留的分享给你了。

谢谢

通过request俩获取,以下是request的方法介绍:

getParameterNames():取得客户端所发出的请求参数名称

getParameter():可以让您指定请求参数名称,以取得对应的设定值

getServerName():请求的服务器

getProtocol():使用协议

getMethod():请求方法

getServerPort():请求端口号

getContextPath():Context路径

getServletPath(): Servlet路径

getRequestURI():URI路径

getQueryString():查询字符串

getRemoteAddr():使用者主机IP

getRemotePort():使用者使用端口号

新浪的那个天气的值是通过js动态加载的,原始html页面是<div id="SI_Weather_Wrap" class="now-wea-wrap clearfix"></div> 。

而jsoup只是对html进行解析,所以是找不到js动态生成的哪些信息的。

public static String SendGET(String url,String param){

   String result="";//访问返回结果

   BufferedReader read=null;//读取访问结果

   

   try {

    //创建url

    URL realurl=new URL(url+""+param);

    //打开连接

    URLConnection connection=realurlopenConnection();

     // 设置通用的请求属性

             connectionsetRequestProperty("accept", "/");

             connectionsetRequestProperty("connection", "Keep-Alive");

             connectionsetRequestProperty("user-agent",

                     "Mozilla/40 (compatible; MSIE 60; Windows NT 51;SV1)");

             //建立连接

             connectionconnect();

          // 获取所有响应头字段

             Map<String, List<String>> map = connectiongetHeaderFields();

             // 遍历所有的响应头字段,获取到cookies等

             for (String key : mapkeySet()) {

                 Systemoutprintln(key + "--->" + mapget(key));

             }

             // 定义 BufferedReader输入流来读取URL的响应

             read = new BufferedReader(new InputStreamReader(

                     connectiongetInputStream(),"UTF-8"));

             String line;//循环读取

             while ((line = readreadLine()) != null) {

                 result += line;

             }

   } catch (IOException e) {

    eprintStackTrace();

   }finally{

    if(read!=null){//关闭流

     try {

      readclose();

     } catch (IOException e) {

      eprintStackTrace();

     }

    }

   }

    

   return result; 

 }

如果是访问testhtml最终转到talkbackapk,那么无论是用浏览器还是java访问都会转至talkbackapk(请求时权限拦截除外),java只是作为客户端调用者,请求testhtml的响应结果是由服务器决定的。

File input = new File("/tmp/inputhtml");

Document doc = Jsoupparse(input, "UTF-8", "IP");

看看这个代码,调用 doctext() 方法即可。

以上就是关于如何用java抓取ajax页面的内容全部的内容,包括:如何用java抓取ajax页面的内容、java如何获取浏览器的访问网址及其内容、java语言获取网页标签中的内容等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9793616.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-02
下一篇2023-05-02

发表评论

登录后才能评论

评论列表(0条)

    保存