Eclipse中Java做⽹络爬⾍基本⽅法基本⽅法分为两⼤步,第⼀步即利⽤HttpClient建⽴⽹络连接并发送请求,第⼆步即利⽤HtmlParser解析⽹页。
1.利⽤HttpClient建⽴⽹络连接(并获得整个⽹页的内容)
⾸先,我们必须安装好 HttpClient。
HttpClient 可以在下载
HttpClient ⽤到了 Apache Jakarta common 下的⼦项⽬ logging,可以从这个地址下载到 common logging,从下载后的压缩包中取出 commons-logging.jar 加到 CLASSPATH 中
HttpClient ⽤到了 Apache Jakarta common 下的⼦项⽬ codec,可以从这个地址下载到最新的 common codec,从下载后的压缩包中取出 jar 加到 CLASSPATH 中
参考连接
需要导⼊的3个包如下图所⽰:
⽰例代码如下,请求的http地址根据实际情况改动:
package SeanCrawler;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import org.apachemons.httpclient.HttpClient;
import org.apachemons.httpclient.HttpException;
import org.apachemons.httpclient.HttpStatus;
import org.hods.GetMethod;
javaparser野外public class HttpClientTest{
public static void main(String[] argv){
/
/连接http服务器端
HttpClient httpClient=new HttpClient();
byte[] responseBody = null;
GetMethod getMethod=new GetMethod("localhost/raw_dataset/2013-2014autumn.htm"); try{
int uteMethod(getMethod);
if(statusCode!=HttpStatus.SC_OK){
}
//byte[] ResponseBody();
//System.out.println(new String(responseBody));
//当⽹页内容数据量⼤时推荐使⽤
InputStream ResponseBodyAsStream();
if (in != null) {
byte[] tmp = new byte[4096];
int bytesRead = 0;
ByteArrayOutputStream buffer = new ByteArrayOutputStream(1024);
while ((bytesRead = in.read(tmp)) != -1) {
buffer.write(tmp, 0, bytesRead);
}
responseBody = ByteArray();
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();
}catch(Exception ex){
System.out.println("Error:"+ex.toString());
}finally{
}
}
}
2.利⽤HtmlParser解析获取的⽹页,取得感兴趣的元素内容
需要下载htmllexer.jar和htmlparser.jar两个包并导⼊项⽬,如下图所⽰
在有了前⾯的httpclient对整个⽹页内容的获取后,在添加htmlparser对⽹页解析获取想要的数据,使⽤⽰例代码如下:
//下⾯⽤html解析⽹页
Parser parser=new Parser();
ateParser(new String(responseBody,"gb2312"),"gb2312");//原⽹站编码格式gb2312
NodeFilter filter1=new HasAttributeFilter("class","new_table");//设置过滤器,这⾥的意思是设定具有class属性且属性值为new_table的过滤器
NodeList actAllNodesThatMatch(filter1);//抓取所有通过过滤器的⽹页DOM节点
for (int i=0; i<list.size(); i++) {//基于设定的过滤器我知道抓取的是⼀个table元素,实际情况就需要你根据你想要的元素内容设置⾃⼰的过滤器(这是关键) TableTag table = (TableTag) list.elementAt(i);
TableRow[] rows = Rows();//遍历table元素内各个tr乃⾄td
for (int r=1; r<rows.length; r++) {
TableRow tr = rows[r];
TableColumn[] td = tr.getColumns();
//可以通过诸如td[1].toPlainTextString()来访问到td内的元素值及某处表格数据值
}
}
参考连接
总结:以上就是⼤题思路,变化较多的就在于HtmlParser解析⽹页各种元素时实⽤的过滤⽅法,这个需要多时间才能熟练掌握。mark⼀记,⾃⼰也是学习的过
程~
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论