Jousp解析Html内容

需求:需要获取另外网站页面的内容数据
前期想之前在前台用js来解析,发现有跨域问题,解决起来很麻烦。
所以决定在后台使用jousp解决

引用
https://blog.csdn.net/qq_37933685/article/details/85233318
此PO介绍十分详细,有需要的可以去仔细了解。

1、首先引用jousp的jar包,直接在pom.xml引入即可。

		 <dependency>
            <groupId>org.jsoup</groupId>
            <artifactId>jsoup</artifactId>
            <version>1.10.2</version>
 		</dependency>

首先连接到需要访问的url-------------Jsoup.connect()

try
{
    Document document = Jsoup.connect("http://www. weibo.com").get();
    System.out.println(document.title());
} 
catch (IOException e) 
{
    e.printStackTrace();
}

此后就可同样操作
//通过class查询
document.getElementsByClass(“page_nav page”)
以此获取相应的数据

寻找元素

  • getElementById(String id) getElementsByTag(String tag)

  • getElementsByClass(String className) getElementsByAttribute(String
    key) (及相关方法)

  • 元素的兄弟姐妹:siblingElements(),firstElementSibling(),
    lastElementSibling(),nextElementSibling(),previousElementSibling()

  • 图:parent(),children(),child(int index)

处理元素数据

  • attr(String key)获取和attr(String key, String value)设置属性
  • attributes() 获得所有属性
  • id(),className()和classNames()
  • text()获取和text(String value)设置文本内容
  • html()获取和html(String value)设置内部HTML内容
  • outerHtml() 获取外部HTML值
  • data()获取数据内容(例如script和style标签)
  • tag() 和 tagName()

操纵HTML和文本

  • append(String html), prepend(String html)
  • appendText(String text), prependText(String text)
  • appendElement(String tagName), prependElement(String tagName)
  • html(String value)

更多详尽请查阅api文档

贴一个Demo
获取Table内数据

Document waterdocument;
			try {
				waterdocument = Jsoup.connect(waterUrl).header("user-agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.80 Safari/537.36").get();
				//表格
				Elements waterelements = waterdocument.getElementsByClass("data_table");
				//select("table#table_style_e");
				for(Element element:waterelements){
					if(element.text()!=null&& !"".equals(element.text())){
						 Elements es = element.select("tr");
						 for(Element tdelement:es){
							 Elements tdes = tdelement.select("td");
							 for(int i = 0; i < tdes.size(); i++){
								
								//do something
							 }
						 }
					 }
				 }
				
			} catch (IOException e) {
				// TODO 自动生成的 catch 块
				e.printStackTrace();
			}

补上一个例子
在这里插入图片描述
我需要获取到2019年12月02日的text
但这个div 没有专属的class 。
顶部的class为itablist block
直接获取获取会把下面data_table中的数据一起打印出来,这不是我想要的。
所以采用remove()
反向获得年份的数据

Elements  elements = document.getElementsByClass("itablist block").first().children().select("div:not(.data_table)").remove();
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章