注释的代码可能是另一种方法或者我出错的时候
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);
}
}
}