Java爬虫项目实战案例四之 Jsoup
使用
1. Jsoup
简介
Jsoup
是一款java的HTML解析器,可直接解析某个URL地址,HTML文本内容。它提供了一套非常简便的API,可通过DOM,CSS以及类似jQuery的操作方法来取出数据和操作数据。
在爬取到网页之后,就需要使用Jsoup
进行网页的解析。
2. 代码
public static void test3() throws IOException{
CloseableHttpClient httpClient = HttpClients.createDefault();//创建httpClient实例
HttpGet httpGet = new HttpGet("网址"); //创建httpGet实例
HttpHost proxy = new HttpHost("114.235.22.147", 9000);
RequestConfig config = RequestConfig
.custom()
.setProxy(proxy)
.setConnectTimeout(10000)//连接超时
.setSocketTimeout(10000)//读取超时
.build();
httpGet.setHeader("User-Agent","Mozilla/5.0 (Windows NT 10.0; WOW64; rv:63.0) Gecko/20100101 Firefox/63.0");
CloseableHttpResponse response = httpClient.execute(httpGet);//指向http get请求
HttpEntity entity = response.getEntity();//获取返回实体
//System.out.println("网页内容:"+ EntityUtils.toString(entity,"utf-8"));//获取网页内容
System.out.println("Content-Type :"+entity.getContentType());//获取内容类型
System.out.println("Status : "+response.getStatusLine());//判断响应状态
String content = EntityUtils.toString(entity);
//way 1:
Document docment = Jsoup.parse(content);
Elements elements = docment.getElementsByTag("title");
Element speciEle = elements.get(0);
String title = speciEle.text();
System.out.println("网页标题是:"+title);
//way 2
Element site_nav_top = docment.getElementById("site_nav_top");
String slogan = site_nav_top.text();
System.out.println("slogan :" + slogan);
response.close();
httpClient.close();
}
3.执行结果
4.代码详解
- 获取信息方式1
//way 1:
Document docment = Jsoup.parse(content);
Elements elements = docment.getElementsByTag("title");
Element speciEle = elements.get(0);
String title = speciEle.text();
System.out.println("网页标题是:"+title);
-
content是上文的entity得到
-
通过Jsoup解析content,得到一个Document对象
-
每个Document对象中包涵很多元素,但是我们只需要Tag = 'title’的集合,注意这里是集合。所以如果需要某个具体的值,就需要指定集合中元素的下标,这里取下标为0 的Element。【这时取到的就是Element,而是不Elements】
-
然后通过取出来的Element对象获取其中的文本。最后输出
-
获取信息方式2
//way 2
Element site_nav_top = docment.getElementById("site_nav_top");
String slogan = site_nav_top.text();
System.out.println("slogan :" + slogan);
- 获取content,获取document同方式1
- 通过document对象,找到其中id ='site_nav_top’的内容,注意,因为在一个html页面中,id具有唯一性,所以这里找到的值就是唯一值。
- 输出即可