美文网首页
Jsoup和正则表达式解析html

Jsoup和正则表达式解析html

作者: weisen | 来源:发表于2019-07-19 16:50 被阅读0次

一、解析html

背景:最近有个需求,需要爬取某个页面的数据,将整个页面的html爬取下来后,对html作解析,然后保存特定的数据到数据库中。经过了解,最后决定body部分的html使用jsoup来获取,script部分则使用正则表达式来获取。

1、使用Jsoup解析

1)、获取doc

Document doc = Jsoup.parse(htmlStr);
Document doc = Jsoup.connect("http://url.html").get();

2)、直接下级,中间不能断层

 Elements tableEle = doc.select("div.content > div.row > div.class1.class2");
 Elements trList = tableEle.select("table > tbody > tr");

3)、中间有断层,可使用

 Elements tableEle = doc.select("div.content").select("div.class1.class2");

4)、也可以用属性

Elements tableEle = doc.select("div[id=tab1]").select("div[class=content]")

5)、获取标签的值

<td class="text-center" id="17909">295,420</td>
String shopId = tdEle.attr("id");
String text = tdEle.text();

6)、获取<script>标签下的数据

 String scriptStr = doc.head().data();

2、使用正则表达式解析

1)、将换行符制表符回车符报警符都替换掉

 String handleScript = scriptStr.replaceAll("\\r|\\t|\\n|\\a","");

2)、需要获取var option1 = {}里面的值

String option1Regex = "var option1 =(.*?) var myChart1";
Pattern pattern = Pattern.compile(p, Pattern.DOTALL);
Matcher m = pattern.matcher(content);
if (m.find()) {
    String result = StringUtils.trim(m.group(1));
}

这里需要了解一下m.group的方法,m.group()等于m.group(0),获取的是匹配整个正则的结果,m.group(1)是分组里面的内容,因为是用括号()来分组的,所以获取的就是匹配()里面的内容

3)、获取option1里面data的数据

 String option1DateReg ="(?<=xAxis:.{0,500}data:\\s{0,100}\\[).*?(?=,\\s{0,100}\\])";
 Pattern pattern = Pattern.compile(p, Pattern.DOTALL);
 Matcher m = pattern.matcher(content);
 if (m.find()) {
 String result = StringUtils.trim(m.group());
 }

这里了解一下零宽断言

用于查找在某些内容(但并不包括这些内容)之前或之后的东西,也就是说它们像\b,^,$那样用于指定一个位置,这个位置应该满足一定的条件(即断言),因此它们也被称为零宽断言

(?<=exp)需要提取的内容(?=exp)

例如:(?<=\s)\d+(?=\s)匹配以空白符间隔的数字(再次强调,不包括这些空白符)

注意:零宽断言中条件如果有多个空白,不能写成(?<=\s+?)\d+(?=\s*?)

因为:java 正则 <=断言的限制, 需要有最大值,

应写出

(?<=\s{0,65535})\d+(?=\s{0,65535})

参考文章

jsoup
Java使用正则表达式取网页中的一段内容
Java中用正则表达式截取字符串

相关文章

  • 记一次jsoup的使用

    Jsoup是用于解析HTML,就类似XML解析器用于解析XML。 Jsoup它解析HTML成为真实世界的HTML。...

  • HTML&XML解析器--Jsoup

    HTML&XML解析器 一.Jsoup概述 Jsoup简介jsoup是一款Java的HTML解析器,可直接解析某个...

  • Java爬虫之Jsoup 基础语法

    Jsoup介绍: Jsoup 是一个 Java 的开源HTML解析器,可直接解析某个URL地址、HTML文本内容。...

  • Jsoup实战_1_选择器

    Jsoup简介 jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了...

  • Android 使用 jsoup 解析 html

    一、什么是jsoup jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它...

  • 没壁纸用了?用Jsoup写一个图片爬虫吧!

    1. Jsoup Jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供...

  • 【Jsoup】HTML解析器,轻松获取网页内容

    Jsoup简介 jsoup 是一款Java的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一...

  • 爬虫之Jsoup

    Jsoup简介jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一...

  • jsoup完整教程

    jsoup jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套...

  • java爬虫基础--jsoup

    java爬虫框架---jsoup 在实际的开发过程中,jsoup仅仅作为对html界面解析的工具 一、解析URL ...

网友评论

      本文标题:Jsoup和正则表达式解析html

      本文链接:https://www.haomeiwen.com/subject/kpyslctx.html