
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语言获取网页标签中的内容等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)