【爬虫系列】第二部分 网页解析Jsoup
2017-11-23 15:37
645 查看
Jsoup是一款Java的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。
在爬虫采集网页领域主要作用是用HttpClient获取到网页后,使用Jsoup提取网页中需要的信息,Jsoup支持类似Jquery、CSS选择器,来获取需要的数据,使用非常方便。
下面结合代码简单展示如何使用Jsoup获取需要的页面数据。
一、Jsoup 入门demo
[java] view
plain copy
public class JsoupHello {
public static void main(String[] args) throws Exception{
CloseableHttpClient httpclient = HttpClients.createDefault(); // 创建httpclient实例
HttpGet httpget = new HttpGet("http://www.cnblogs.com/"); // 创建httpget实例
CloseableHttpResponse response = httpclient.execute(httpget); // 执行get请求
HttpEntity entity=response.getEntity(); // 获取返回实体
String content=EntityUtils.toString(entity, "utf-8");
response.close(); // 关闭流和释放系统资源
Document doc=Jsoup.parse(content); // 解析网页 得到文档对象
Elements elements=doc.getElementsByTag("title"); // 获取tag是title的所有DOM元素
Element element=elements.get(0); // 获取第1个元素
String title=element.text(); // 返回元素的文本
System.out.println("网页标题是:"+title);
Element element2=doc.getElementById("site_nav_top"); // 获取id=site_nav_top的DOM元素
String navTop=element2.text(); // 返回元素的文本
System.out.println("口号:"+navTop);
}
}
1、使用httpClient 获取网页
2、使用jsoup parse解析网页,并根据丰富的getElement方法按照不同的属性获取元素值
二、常用查找dom元素方法
1、根据标签名(tagName)查找dom
[java] view
plain copy
Elements elements= doc.getElementsByTag("title"); //获取tag是title的所有dom元素
Element element= elements.get(0); //获取第一个
System.out.println(element.text());//输出元素txt值
2、根据元素Id查找
[java] view
plain copy
Element elementById=doc.getElementById("footer");
System.out.println(elementById.text());
3、根据class 名查找
[java] view
plain copy
Elements elementsByClass=doc.getElementsByClass("post_item");
for(Element e:elementsByClass)
{
System.out.println(e.html());
}
4、根据attribute属性名查找
[java] view
plain copy
//根据属性名(如:id,width) 查询dom
Elements elementsByAttr=doc.getElementsByAttribute("width");
for(Element e2:elementsByAttr)
{
System.out.println(e2.toString());
}
5、根据attribute和attributeValue共同查找
[java] view
plain copy
//根据属性名&值共同查找dom
Elements elementsByAttrValue=doc.getElementsByAttributeValue("width", "142");
System.out.println(elementsByAttrValue.toString());
三、使用Jsoup选择器查找dom元素
1、class类选择器使用
[java] view
plain copy
//class 使用. 中间空格
Elements eleLinks= doc.select(".post_item .post_item_body h3 a");
for(Element el:eleLinks)
{
System.out.println(el.text());
}
2、带有href超链接的a标签查找
[java] view
plain copy
//css语法 带有href 属性的a元素
Elements elea= doc.select("a[href]");
for(Element ea:eleLinks)
{
System.out.println(ea.toString());
}
3、查找图片标签
[java] view
plain copy
//img图片
Elements imgs= doc.select("img[src$=.png]");//查找img标签,后缀为png的所有图片dom
for(Element ea:imgs)
{
System.out.println(ea.toString());
}
4、根据dom Id查找元素
[java] view
plain copy
//根据dom id获取元素 ,text返回a的中文文本信息,html返回a标签链接信息
Element eleId=doc.select("#friend_link").first();
System.out.println("##############纯文本"+eleId.text());
System.out.println("##############纯文本"+eleId.html());
5、获取dom元素中指定属性值
[java] view
plain copy
Elements eleLinks= doc.select(".post_item .post_item_body h3 a");
for(Element el:eleLinks)
{
System.out.println("***********************标题是"+el.text()); //获取所有文本
System.out.println("***********************连接是"+el.attr("href")); //获取所有博客链接 dom a 里的属性值
}
在爬虫采集网页领域主要作用是用HttpClient获取到网页后,使用Jsoup提取网页中需要的信息,Jsoup支持类似Jquery、CSS选择器,来获取需要的数据,使用非常方便。
下面结合代码简单展示如何使用Jsoup获取需要的页面数据。
一、Jsoup 入门demo
[java] view
plain copy
public class JsoupHello {
public static void main(String[] args) throws Exception{
CloseableHttpClient httpclient = HttpClients.createDefault(); // 创建httpclient实例
HttpGet httpget = new HttpGet("http://www.cnblogs.com/"); // 创建httpget实例
CloseableHttpResponse response = httpclient.execute(httpget); // 执行get请求
HttpEntity entity=response.getEntity(); // 获取返回实体
String content=EntityUtils.toString(entity, "utf-8");
response.close(); // 关闭流和释放系统资源
Document doc=Jsoup.parse(content); // 解析网页 得到文档对象
Elements elements=doc.getElementsByTag("title"); // 获取tag是title的所有DOM元素
Element element=elements.get(0); // 获取第1个元素
String title=element.text(); // 返回元素的文本
System.out.println("网页标题是:"+title);
Element element2=doc.getElementById("site_nav_top"); // 获取id=site_nav_top的DOM元素
String navTop=element2.text(); // 返回元素的文本
System.out.println("口号:"+navTop);
}
}
1、使用httpClient 获取网页
2、使用jsoup parse解析网页,并根据丰富的getElement方法按照不同的属性获取元素值
二、常用查找dom元素方法
1、根据标签名(tagName)查找dom
[java] view
plain copy
Elements elements= doc.getElementsByTag("title"); //获取tag是title的所有dom元素
Element element= elements.get(0); //获取第一个
System.out.println(element.text());//输出元素txt值
2、根据元素Id查找
[java] view
plain copy
Element elementById=doc.getElementById("footer");
System.out.println(elementById.text());
3、根据class 名查找
[java] view
plain copy
Elements elementsByClass=doc.getElementsByClass("post_item");
for(Element e:elementsByClass)
{
System.out.println(e.html());
}
4、根据attribute属性名查找
[java] view
plain copy
//根据属性名(如:id,width) 查询dom
Elements elementsByAttr=doc.getElementsByAttribute("width");
for(Element e2:elementsByAttr)
{
System.out.println(e2.toString());
}
5、根据attribute和attributeValue共同查找
[java] view
plain copy
//根据属性名&值共同查找dom
Elements elementsByAttrValue=doc.getElementsByAttributeValue("width", "142");
System.out.println(elementsByAttrValue.toString());
三、使用Jsoup选择器查找dom元素
1、class类选择器使用
[java] view
plain copy
//class 使用. 中间空格
Elements eleLinks= doc.select(".post_item .post_item_body h3 a");
for(Element el:eleLinks)
{
System.out.println(el.text());
}
2、带有href超链接的a标签查找
[java] view
plain copy
//css语法 带有href 属性的a元素
Elements elea= doc.select("a[href]");
for(Element ea:eleLinks)
{
System.out.println(ea.toString());
}
3、查找图片标签
[java] view
plain copy
//img图片
Elements imgs= doc.select("img[src$=.png]");//查找img标签,后缀为png的所有图片dom
for(Element ea:imgs)
{
System.out.println(ea.toString());
}
4、根据dom Id查找元素
[java] view
plain copy
//根据dom id获取元素 ,text返回a的中文文本信息,html返回a标签链接信息
Element eleId=doc.select("#friend_link").first();
System.out.println("##############纯文本"+eleId.text());
System.out.println("##############纯文本"+eleId.html());
5、获取dom元素中指定属性值
[java] view
plain copy
Elements eleLinks= doc.select(".post_item .post_item_body h3 a");
for(Element el:eleLinks)
{
System.out.println("***********************标题是"+el.text()); //获取所有文本
System.out.println("***********************连接是"+el.attr("href")); //获取所有博客链接 dom a 里的属性值
}
相关文章推荐
- 爬虫系列(二)——网页解析Jsoup
- 【Java Utility】Jsoup网页爬虫工具--文档解析及转换【二】
- 【Java Utility】Jsoup网页爬虫工具--将String解析成Document【三】
- java 爬虫 网页解析(Jsoup)
- 【Java Utility】Jsoup网页爬虫工具--解析HTML语句片段【四】
- 爬虫解析出来的网页中文部分都是乱码(运用的模块requests, BeautifulSoup)
- Android将网页做成app-- Jsoup网络解析框架
- 网页爬虫进阶系列之美团店铺信息爬虫制作
- 解析网页(KMP算法实现部分)
- android中使用JSOUP如何解析网页数据详述
- HtmlUnit、Httpclient、Jsoup爬取网页信息并解析
- 【网络爬虫】【java】微博爬虫(四):数据处理——jsoup工具解析html、dom4j读写xml
- 使用RCurl爬虫爬取网页内容htmlParse解析时出现乱码
- 左手用R右手Python系列16——XPath与网页解析库
- Storyboard全解析-第二部分
- 【Python爬虫系列】内容解析之BeautifulSoup
- 【Java Utility】Jsoup网页爬虫工具--设置Element的HTML内容【十二】
- 关于Jsoup解析https网页的问题
- WCF 4.0 进阶系列 – 第十四章 检测服务和路由消息(第二部分)
- 网络爬虫初步:从访问网页到数据解析