Java实训记录(4)

注释的代码可能是另一种方法或者我出错的时候

package day01;

import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;

import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class demo1 {
	// private static final ArrayList[] List = null;
	// private static final ArrayList[] List = null;
	// 创建日志对象
	private final Logger logger = LoggerFactory.getLogger(this.getClass());

	// HttpClient:http客户端 模拟浏览器向服务器发送HTTP/HTTPs请求并接收
	/*
	 * 通过httpClient对象去模拟浏览器,向服务器发送http请求,并接受服务器发过来的html页面
	 */
	@Test
	public void testGetBaiDu() throws ClientProtocolException, IOException {

		// //创建httpClient对象,假装打开了一个浏览器 .表示的 ()方法(函数,功能)
		CloseableHttpClient httpClient = HttpClients.createDefault();

		// CloseableHttpClient httpClient = HttpClient.createDefault();
		// 准备链接地址
		String url = "http://www.baidu.com";
		// 输入准备好的地址
		/*
		 * CloseableHttpResponse result(result的r不能大写)= HttpClient(H要小写h).execute(new
		 * HttpGet(url));
		 */
		CloseableHttpResponse result = httpClient.execute(new HttpGet(url));
		// 解析服务器返回的数据,得到html页面
		// 解析前,我们要做一个http状态码的判断,只有状态码是200的时候,我们才对result(返回的数据进行解析)
		if (result.getStatusLine().getStatusCode() == 200) {
			// if (Result.getStatusLine().getStatusCode() == 200) {
			// 我们才对result(返回的数据进行解析)
			// String html = EntityUtils.toString(Result.getEntity(), "utf-8"); Result的R要小写
			String html = EntityUtils.toString(result.getEntity(), "utf-8");
			logger.info(html);
		}
	}

	/*
	 * Jsoup工具 作用:对获取的html页面进行二次解析并提取具体数据 主要功能: 1.通过url解析html文件 和httpclinet类似。
	 * 2.使用dom对象,css选择器来提取数据。 (id class 标签 派生 伪类 选择器分组1) 3.操作html元素
	 * Jsoup可以通过链接来爬取网站数据,但是不建议使用 而是和httpclinet搭配使用 httplcinet爬取html jsoup解析html
	 * 因为jsoup的拓展性很差,jsoup没有连接池,不支持多线程 httpclient的拓展性很强,可以支持多线程 jsoup对DOM对象操作方法:
	 * 1.getElementsByTag 根据标签获取元素 2.getElementById 根据id获取元素 3.getElementsByClass
	 * 根据class获取元素
	 * 
	 */
	@Test
	public void testJsoup() throws IOException {
		// 1.通过URL解析html文件
		// 准备网址
		String url = "http://www.baidu.com";
		URL u = new URL(url);
		// new的时候就是new的自己(继承多态)
		// 用Jsoup解析URL得到html
		// ctrl+click
		// 方法的重载,方法名相同参数列表不同
		Document doc = Jsoup.parse(u, 5000);
		// 向服务器发送请求,接收返回数据,解析提取html页面,并打包成dom对象
		// 通过dom对象的根据标签获取元素功能
		Elements title = doc.getElementsByTag("title");
		// string类型
		/*
		 * +:当加号左右两边有一边是字符串时,则+有两个功能,1.字符串拼接2.类型转换,其他数据类型转换成string类型
		 */
		logger.info(title + "");
		logger.info(title.text());

	}

	/*
	 * public void aaa() public void aaa(string )
	 */
	/*
	 * jsoup解析把本地html文件练习 getElementsByTag getElementsById getElementsByClass
	 */
	@Test
	public void testGetGwc() throws IOException {
		// 通过io流中的文件流把桌面上的html文件取到java里(i:inputstream o:outputstream)(字节流低级流 字符流高级流)
		File file = new File("C:\\Users\\cheng\\Desktop\\实训\\gwc.html");
		ArrayList list = new ArrayList();
		Document doc = Jsoup.parse(file, "utf-8");
		// 通过tom对象解析html对象,并提取想要的数据
		Elements tr = doc.getElementsByTag("tr");
		for (int i = 1; i <= tr.size(); i++) {
			if (0 == i) {
				continue;
			}
			Elements td = tr.get(i - 1).getElementsByTag("td");
			list.add(td.text());
			System.out.println(td);// 输出所有包含td的

		}
	}
}
/*
 * for (String o :ArrayList<>) {
 * 
 * System.out.println(o); }
 * 
 * }catch(
 * 
 * IOException e) { // TODO: handle exception e.printStackTrace(); }
 */

//爬取静态页面
package day01;

import java.io.IOException;

import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class demo1111 {
	// 创建日志对象
	private final Logger logger = LoggerFactory.getLogger(this.getClass());

	/*
	 * 通过httpClient对象去模拟浏览器,向服务器发送http请求,并接收服务器返回过来的html页面
	 */
	@Test
	public void testGetBaiDu() throws ClientProtocolException, IOException {
		// 创建httpClient对象,假装打开了一个浏览器 .表示的 ()方法(函数,功能)
		CloseableHttpClient httpClient = HttpClients.createDefault();
		// 准备链接地址
		String url = "http://www.baidu.com";
		// 输入准备好的地址,回车,并接收服务器返回给我们的数据(包含html页面,和响应的相关信息,状态码等)
		CloseableHttpResponse result = httpClient.execute(new HttpGet(url));
		// 解析服务器返回的数据,得到我们要的html页面
		// 解析前,我们要做一个http状态码的判断,只有状态码是200的时候,我们才对result(返回的数据进行解析)
		if (result.getStatusLine().getStatusCode() == 200) {
			// 我们才对result(返回的数据进行解析)
			String html = EntityUtils.toString(result.getEntity(), "utf-8");
			logger.info(html);
		}

	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值