读书人

httpclient怎么完整抓取php动态加载网

发布时间: 2013-09-08 15:21:21 作者: rapoo

httpclient如何完整抓取php动态加载网页
本人准备用海词的Web API接口http://dict.cn/mini.php?q=word 写一个本地客服端查词程序

用httpclient3.1访问后得到的是:

Define book : [buk]
正在加载<book>的翻译解释

例句与用法:
正在加载<book>的相关例句与用法

词形变化:
正在加载<book>的词形变化

加入生词本 看详细解释

而我想得到的是从浏览器直接打开的效果 :

Define book : [buk]
n.书, 本子
v.预订, 记录在案

例句与用法:
1. He was booked by the referee for foul play.
他因为动作犯规而被裁判记下姓名。
2. He's always careful to do things by the book.
他总是小心翼翼地按规章办事。
3. You'll have to book early if you want to see that fashion show.
你要想看那场时装表演的话,就得早点儿定座位。
4. He was booked on a charge of speeding.
他因超速开车而被记录在案。

词形变化:
名词:booker 动词过去式:booked 动词过去分词:booked 动词现在分词:booking 动词第三人称单数:books

加入生词本 看详细解释

请问在j2se中如何实现?
附代码:

import java.io.*; 

import org.apache.commons.httpclient.methods.*;
import org.apache.commons.httpclient.*;
import org.apache.commons.httpclient.params.HttpMethodParams;

class HC_t{

public static void main(String[] args) {
System.out.println("qgb");
HttpClient httpClient = new HttpClient();
GetMethod getMethod = new GetMethod("http://dict.cn/mini.php?q=book");
getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,
new DefaultHttpMethodRetryHandler());

try {
int statusCode = httpClient.executeMethod(getMethod);
if (statusCode != HttpStatus.SC_OK) {
System.err.println("Method failed: " + getMethod.getStatusLine());
}
byte[] responseBody = getMethod.getResponseBody();
FileOutputStream fos=new FileOutputStream("1.htm");
fos.write(responseBody);
//System.out.println(new String(responseBody));
}

catch (HttpException e) {
System.out.println("Please check your provided http address!");
e.printStackTrace();
}

catch (IOException e) {
e.printStackTrace();


}

finally {
getMethod.releaseConnection();
}
}

}

Java PHP httpclient 抓取网页 浏览器
[解决办法]
楼主的问题我可以使用htmlunit解决 htmlunit可以获取到页面js执行完成之后的代码 就是你说的浏览器渲染完的代码 参考这个博文 有不懂得可以继续咨询我
[解决办法]
估计你是没有把它页面需要的资源文件
想JS文件,swf文件什么的也弄下来
[解决办法]
htmlunit的js执行很奇怪 在你执行完
Page page = webClient.getPage("http://dict.cn/mini.php?q=book");
这行代码时 并不一定就是渲染完的页面 他会有一个差不多叫jsexcute的线程 你在线程堆栈里面找一下 他其实一直在运行 他负责执行js代码 但是我们没法知道到底时候能执行完 这就是htmlunit的一个问题 说到底 你在这行代码下面做一个线程sleep 5秒钟 然后在获取其返回页面数据试试
[解决办法]
你这个page和htmlpage是继承关系? 你这个代码怎么跟我给你的博客不太一样呢?
[解决办法]
引用:
楼主的问题我可以使用htmlunit解决 htmlunit可以获取到页面js执行完成之后的代码 就是你说的浏览器渲染完的代码 参考这个博文 有不懂得可以继续咨询我

最近我也在学习htmlunit,我模拟登陆最后返回的是当前页面 我不知道问题出在了哪里
求大神帮忙看看http://bbs.csdn.net/topics/390559708?page=1#post-395376261

读书人网 >Java Web开发

热点推荐