基础算法7:使用正则提取网页中a标签的链接和标题

简介:

先放出测试代码,然后再对几个关键点进行简单解释

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package  test;
 
import  java.util.regex.Matcher;
import  java.util.regex.Pattern;
 
public  class  Test1 {
 
     public  static  void  main(String[] args) {
         String str1 =  "<a href=\"http://www.zifangsky.cn/2015/10/hello-world/\" title=\"\" data-original-title=\"Hello World\">Hello World</a>" ;
         String str2 =  "<a href=\"http://banzhuanboy.com/363.html\" class=\"post-feature\" \">123</a>" ;
         String str3 =  " <a class=\"article-title\" href=\"/2015/12/17/Webstorm-Hotkeys-For-Mac/\">c</a>" ;
         String str4 =  " <a rel=\"bookmark\" title=\"Permanent Link to  黑客组织‘SkidNP’涂改了Phantom Squad的网站首页\" href='12/hack-30127.htm'>黑</a>" ;
         String str5 =  "<a href=\"http://www.imorlin.com/2015/12/24/1-3/\" title=\"\" data-original-title=\"2015圣诞节雪花代码[天猫+C店]\"> 2015圣诞节雪花代码[天猫+C店] <span class=\"label label-new entry-tag\">New</span> </a>" ;
         
         Pattern pattern = Pattern.compile( "<a.*?href=[\"']?((https?://)?/?[^\"']+)[\"']?.*?>(.+)</a>" );  
         Matcher matcher = pattern.matcher(str1);
         if (matcher.find()){
             String link = matcher.group( 1 ).trim();
             String title = matcher.group( 3 ).trim();
             if (!link.startsWith( "http" )){
                 if (link.startsWith( "/" ))
                     link =  "http://www.zifangsky.cn"  + link;
                 else 
                     link =  "http://www.zifangsky.cn"  + link;   
             }
             System.out.println( "link: "  + link);
             System.out.println( "title: "  + title);
         }
         
         
         
 
     }
 
}

解释:

1 选取了几个有代表性的a标签样式进行测试

2 关于正则匹配模式”<a.*?href=[\”‘]?((https?://)?/?[^\”‘]+)[\”‘]?.*?>(.+)</a>“的说明:

i)<a.*?href=    <a开头,中间紧跟着有0个或者多个字符,然后再跟着href= 

ii)[\”‘]?((https?://)?/? 一个或者0个的” 或者 ‘ ,然后再跟着0个或者一个的http://或者https:// ,再跟着0个或者1个的 /

iii)[^\”‘]+  表示1个以上的不包括’或者” 的任意字符

iv)[\”‘]?表示链接后面的’或者” 当然也可能没有

后面的可以根据前面的自己推理,就不解释了

3 matcher.group(1)表示取出链接,也就是第二个()的内容(PS:第一个()表示的是整个正则表达式,默认省略了),在正则中是这一段规则:((https?://)?/?[^\”‘]+)

4 matcher.group(3) 同理可知,对应的是这一段规则:(.+)

5 对于代码中的http://www.zifangsky.cn ,这是由于部分链接使用了相对路径,比如说:href=’12/hack-30127.htm’ 。这时我们就需要加上它的域名,当然需要根据实际情况来加。这里我就随便乱加了


本文转自 pangfc 51CTO博客,原文链接:http://blog.51cto.com/983836259/1729171,如需转载请自行联系原作者
相关文章
|
8月前
|
机器学习/深度学习 算法 TensorFlow
树叶识别系统python+Django网页界面+TensorFlow+算法模型+数据集+图像识别分类
树叶识别系统python+Django网页界面+TensorFlow+算法模型+数据集+图像识别分类
158 1
|
8月前
|
机器学习/深度学习 移动开发 算法
动物识别系统python+Django网页界面+TensorFlow算法模型+数据集训练
动物识别系统python+Django网页界面+TensorFlow算法模型+数据集训练
115 0
动物识别系统python+Django网页界面+TensorFlow算法模型+数据集训练
|
9月前
|
存储 算法 决策智能
(万字,细细阅读)竞赛算法入门必经算法模型(附带题目链接和模板)(下)
(万字,细细阅读)竞赛算法入门必经算法模型(附带题目链接和模板)(下)
56 0
|
9月前
|
算法 C++ 容器
(万字,细细阅读)竞赛算法入门必经算法模型(附带题目链接和模板)(上)
(万字,细细阅读)竞赛算法入门必经算法模型(附带题目链接和模板)(上)
32 0
|
8月前
|
机器学习/深度学习 算法 TensorFlow
交通标志识别系统python+TensorFlow+算法模型+Django网页+数据集
交通标志识别系统python+TensorFlow+算法模型+Django网页+数据集
83 0
|
8天前
|
机器学习/深度学习 人工智能 监控
算法金 | 奇奇怪怪的正则化
**摘要:** 本文深入浅出地介绍了正则化在机器学习中的作用,旨在防止过拟合,提高模型泛化能力。正则化通过添加惩罚项限制模型复杂度,包括L1(Lasso回归,产生稀疏解)、L2(Ridge回归,减少参数大小)、Elastic Net(结合L1和L2优点)以及Lp正则化等。其他方法如Early Stopping、Dropout和数据增强也是防止过拟合的有效手段。选择正则化方法要考虑数据特性、模型复杂性、计算资源和调参能力。正则化参数设置可通过交叉验证、网格搜索等方法优化。文章最后强调了正则化对控制模型复杂度和提升性能的重要性。
26 8
算法金 | 奇奇怪怪的正则化
|
23天前
|
存储 算法 NoSQL
数据结构和算法——哈希查找冲突处理方法(开放地址法-线性探测、平方探测、双散列探测、再散列,分离链接法)
数据结构和算法——哈希查找冲突处理方法(开放地址法-线性探测、平方探测、双散列探测、再散列,分离链接法)
28 1
|
23天前
|
存储 算法
数据结构和算法——散列表的性能分析(开放地址法的查找性能、期望探测次数与装填因子的关系、分离链接法的查找性能)
数据结构和算法——散列表的性能分析(开放地址法的查找性能、期望探测次数与装填因子的关系、分离链接法的查找性能)
21 0
|
11月前
|
机器学习/深度学习 算法 数据可视化
花朵识别系统python+TensorFlow+Django网页界面+深度学习模型+卷积网络算法【完整代码】
花朵识别系统,基于Python实现,深度学习卷积神经网络,通过TensorFlow搭建卷积神经网络算法模型,并对数据集进行训练最后得到训练好的模型文件,并基于Django搭建可视化操作平台。
181 0
|
8月前
|
机器学习/深度学习 算法 Java
算法宝典2——Java版本(此系列持续更新,这篇文章目前3道)(有题目的跳转链接)(此份宝典包含了二叉树的算法题)
算法宝典2——Java版本(此系列持续更新,这篇文章目前3道)(有题目的跳转链接)(此份宝典包含了二叉树的算法题)