几种网页爬取的方法与实现(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控件可以使用多个浏览器引擎,设置如下
相关文档:
import java.awt.Desktop;
import java.io.File;
import java.io.IOException;
public class TestDesktop {
public static void main(String[] a) {
try {
Desktop desktop = null;
if (Desktop.isDesktopSupported()) {
desktop = Desktop.getDesktop();
}
desktop.open(new File("/hom ......
import java.util.Properties;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class SendMail {
/**
* @param args
*/
public static void main ......
作者:cleverpig(作者的Blog:http://blog.matrix.org.cn/page/cleverpig
)
原文:http://www.matrix.org.cn/resource/article/44/44055_Java+Annotation+Reflect.html
关键字:java,annotation,reflect
阅读提示:文中提到的程序成员或者程序元素是一个概念,指组成程序代码的单元:如类、方法、成员变量。
一、Annotatio ......
/**
* 对图片裁剪,并把裁剪完蛋新图片保存 。
*
* @param srcpath: 被裁减的图片完整路径
* @param tarpath: 已裁减的新图片保存完整的路径
* @param x: 裁减矩形区域左上顶点水平位移
* @param y: 裁减矩形区域左上顶点垂直位移
* @param width: 裁减矩形区域的宽度
* @param height: 裁减矩形 ......
JAVA反射机制
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
Java反射机制主要提供了以下功能: 在运行时判断任意一个对象所属 ......