c regex解析html,Jsoup和正则表达式解析html

本文介绍了如何使用Jsoup解析HTML文档以获取body部分的数据,以及利用正则表达式提取script标签内的信息。通过Jsoup的select方法选择特定元素,并通过attr和text方法获取属性值和文本内容。同时,使用正则表达式处理script内容,通过零宽断言和分组匹配获取所需数据,展示了在网页数据爬取过程中的实用技巧。
摘要由CSDN通过智能技术生成

一、解析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)、获取标签的值

295,420

String shopId = tdEle.attr("id");

String text = tdEle.text();

6)、获取

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})

参考文章

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值