几种网页爬取的方法与实现(Java)
一、通过HttpClient(apache commons-httpclient)方式,获许网页内容,并解析出需要的东西。
这种方法相对比较简单,因为commons-httpclient已经做了很好的封装,简单的代码如下:
// 构造HttpClient的实例
HttpClient httpClient = new HttpClient();
HttpClientParams clientParams = new HttpClientParams();
// 隐藏自己请求相关的信息
clientParams.setParameter("http.useragent",
"Mozilla/4.0 (compatible; FIREFOX 9.0; IBM AIX 5)");
clientParams.setHttpElementCharset("GBK");
HttpState httpState = new HttpState();
httpClient.setParams(clientParams);
httpClient.getParams().setParameter(
HttpClientParams.HTTP_CONTENT_CHARSET, "GBK");
httpClient.setState(httpState);
clientParams.setVersion(HttpVersion.HTTP_1_1);
if (useProxy) // 使用代理
{
httpClient.getHostConfiguration().setProxy(proxyIp, port);
}
这里需要注意的是记得设置http.useragent属性,默认会显示为httpclient代理,很多网站为了防止被恶意爬取,最简单的方式就是判断useragent属性。
二、第一种方式最简单,但是也最容易被网站禁止掉,因为这种方式是不会执行javascript的,这样就很容易被网站通过javascript做标识识别出来,同时获取的数据如果是通过javascript计算来的,也会比较麻烦。
那么,我们来看第二种方式,通过模拟真正的browser来获取网页内容,并执行javascript,目前大部分流行的浏览器内核都是开放的,比如webkit,下面我们以mozilla引擎为例,实现如下:
首先,我们会用到xulrunner,这是使用mozilla引擎的xul浏览器,在这里我们用来替代mozilla实现。
下载xulrunner后,解压缩到相应目录
在代码中进行配置。
static {
Mozilla.getInstance().initialize(new File("D:\\xulrunner"));
System.setProperty("org.eclipse.swt.browser.XULRunnerPath",
"D:\\xulrunner");
}
将代码中的xulrunner目录位置修改为你解压缩的位置。
我们使用SWT来实现界面,SWT的Browser控件可以使用多个浏览器引擎,设置如下
相关文档:
首先要说的是,Hibernate中ORM里对应的映射文件BEAN,必须实现序列化.因为BEAN里的数据需要存入数据库(要转化为二进制保存),进行存取工作.
JAVA类的数据 ,如果要进行相关的存储工作(如写文件,网络传输,写数据库等),那么这个数据的类 就必须实现序列化接口 (java.io.Serializab ......
JAVA 中URL链接中文参数乱码的若干处理方法,现在整理收录如下:
方法一:
http://xxx.do?ptname='我是中国人'
String strPtname = request.getParameter("ptname");
strPtname = new String(strPtname.getBytes("ISO-8859-1"), "UTF-8");
方法二:
<%@ page contentTy ......
/**
* 对图片裁剪,并把裁剪完蛋新图片保存 。
*
* @param srcpath: 被裁减的图片完整路径
* @param tarpath: 已裁减的新图片保存完整的路径
* @param x: 裁减矩形区域左上顶点水平位移
* @param y: 裁减矩形区域左上顶点垂直位移
* @param width: 裁减矩形区域的宽度
* @param height: 裁减矩形 ......
在Suse10.1下安装EOS5.3,界面按钮凡中文都是方格,可在终端查看中文都是好的,网上搜了好几天,终于弄明白原因。
EOS5.3使用的是jdk1.4.2,在suse下没有jdk默认要求的中文字体,需要做额外的配置,修改方法如下:
1.使用su命令切换为root用户,再使用cd命令切换到jdk安装路径下的jre;例如:
......