简易基础的Java爬虫程序——HttpClient&Jsoup

date:2018.05.06

java爬虫

其他:URLConnection

包含的jar包:

httpclient-4.0.1.jar

httpcore-4.0.1.jar(处理核心的http协议)

httpmime-4.0.1.jar

commons-codec(处理与编码有关的问题的项目)

commons-logging-1.1.3.jar(处理与日志记录有关的问题的项目)

commons-io-1.4.jar(方便处理与io相关的需求)

HttpClient相关jar包下载地址:http://hc.apache.org/downloads.cgi

HttpClient使用方法如下:

  1. 创建HttpClient对象。

  2. 创建请求方法的实例,并指定请求URL。如果发送GET请求,创建HttpGet对象,如果发送POST请求,创建HttpPost对象。

  3.发送请求参数,调用HttpGet、HttpPost共同setParam(HttpParams Params)方法添加请求参数。HttpPost对象也可调用setEntity(HttpEntity entity)

       4. 调用HttpClient对象的execute(HttpUriRequest request)发送请求,该方法返回一个HttpResponse。

  5. 调用HttpResponse相关方法获取相应内容。

package myCrawler;

import java.io.IOException;

import org.apache.http.HttpHost;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.conn.params.ConnRouteParams;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.CoreConnectionPNames;
import org.apache.http.util.EntityUtils;

public class MyHttpClient {
    /***
     * 需求:使用HttpClient爬取网站数据
     * @param args
     * @throws IOException 
     * @throws ClientProtocolException 
     */
    public static void main(String[] args) throws ClientProtocolException, IOException{
        //创建HttpClient对象
        HttpClient hClient=new DefaultHttpClient();
        
        //设置响应的时间,设置传输源码的时间
        //设置代理服务器,防止被网站识别IP,加入黑名单
//        hClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 10000)//连接超时
//        .setParameter(CoreConnectionPNames.SO_TIMEOUT, 10000)//传输超时
//        .setParameter(ConnRouteParams.DEFAULT_PROXY, new HttpHost("代理服务器",端口号));
        //get请求,创建get请求对象
        HttpGet hget=new HttpGet("https://www.2345.com/");
        //向网站发送请求,获取HTML源码
        HttpResponse response=hClient.execute(hget);
        //使用response返回的结果,使用工具类将网页实体转换成字符串,需指定网页编码
        String content=EntityUtils.toString(response.getEntity(),"gb2312");
        //输出
        System.out.println(content);
    }
}

Jsoup

一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。通过Jsoup的jar包中的方法将Html解析成Document。得到的数据封装成自己的实体类。将实体中的数据在页面加载出来。

package myCrawler;


import java.io.IOException;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class MyJsoup {
	/*
	 * 使用Jsoup解析网页源码
	 */
	public static void main(String[] args) throws IOException {
		//使用Jsoup向服务器发送请求,文档对象
		Document doc = Jsoup.connect("https://www.2345.com/").get();
		//使用Jsoup类似于css、jquery的选择器的方式获取元素节点
//		Elements elements=doc.getElementsByTag("a");//使用代码程序的方式解析,获取纯文本
//		System.out.println(element.text());
	//Ctrt+F
		
		Elements elements=doc.select("ul.cont-list a");
		//循环元素
		for(Element element:elements){
			//attr("")方法获取便签属性
//			Elements elements1 = element.children();
//            String targetUrl = elements1.get(0).getElementsByTag("a").attr("href");
//				//获取图片
//            String img = elements1.get(0).getElementsByTag("img").first().attr("data-src");
//            if (img.contains(".jpg")) {
//                int a = img.indexOf(".jpg");
//                img = img.substring(0, a + 4);
//            }
			System.out.println(element.text()+":"+element.attr("href"));
		}
		
		
	}
}
HttpClient&Jsoup

HttpClient模拟浏览器发出请求,Jsoup解析HttpClient请求返回的HTML网页获取所要数据。

httpClient不仅可以发送get请求,而且可以发送post请求,提交表单,传送

文件,还比如jsoup最强大的地方在于它支持仿jquery的选择器

package myCrawler;

import java.io.IOException;

import org.apache.http.HttpResponse;
import org.apache.http.ParseException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;

public class HttpClientNJsoup {
	/*
	 * 结合HttpClient和Jsoup实现爬虫程序
	 */
	public static void main(String[] args) throws ParseException, IOException {
		//创建HttpClient对象
				HttpClient hClient=new DefaultHttpClient();
				
				//get请求,创建get请求对象
				HttpGet hget=new HttpGet("https://www.2345.com/");
				//向网站发送请求,获取HTML源码
				HttpResponse response=hClient.execute(hget);
				//使用response返回的结果,使用工具类将网页实体转换成字符串,需指定网页编码
				String content=EntityUtils.toString(response.getEntity(),"gb2312");
				//使用Jsoup解析
				Document doc =Jsoup.parse(content);
				//使用元素选择器选择网页内容,返回一个元素
				Elements elements=doc.select("ul.cont-list a");
				System.out.println(elements.text());
	}
}

感想:第一次在网上写的笔记,写得不是很好。可能对于别人来说是很简单的一段程序,自己慢慢的敲出来。可能未来用不到,但希望能记录点什么。-----xxj


猜你喜欢

转载自blog.csdn.net/xuxuan1997/article/details/80212849