基础算法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,如需转载请自行联系原作者
相关文章
|
搜索推荐 算法 前端开发
音乐推荐与管理系统Python+Django网页界面+协同过滤推荐算法
音乐推荐与管理系统Python+Django网页界面+协同过滤推荐算法
136 1
音乐推荐与管理系统Python+Django网页界面+协同过滤推荐算法
|
搜索推荐 算法 前端开发
图书推荐管理系统Python+Django网页界面+协同过滤推荐算法
图书推荐管理系统Python+Django网页界面+协同过滤推荐算法
151 0
图书推荐管理系统Python+Django网页界面+协同过滤推荐算法
|
机器学习/深度学习 算法 TensorFlow
树叶识别系统python+Django网页界面+TensorFlow+算法模型+数据集+图像识别分类
树叶识别系统python+Django网页界面+TensorFlow+算法模型+数据集+图像识别分类
211 1
|
搜索推荐 算法 前端开发
旅游管理与推荐系统Python+Django网页平台+协同过滤推荐算法
旅游管理与推荐系统Python+Django网页平台+协同过滤推荐算法
259 0
|
3月前
|
机器学习/深度学习 算法 TensorFlow
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
交通标志识别系统。本系统使用Python作为主要编程语言,在交通标志图像识别功能实现中,基于TensorFlow搭建卷积神经网络算法模型,通过对收集到的58种常见的交通标志图像作为数据集,进行迭代训练最后得到一个识别精度较高的模型文件,然后保存为本地的h5格式文件。再使用Django开发Web网页端操作界面,实现用户上传一张交通标志图片,识别其名称。
120 6
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
|
3月前
|
前端开发 搜索推荐 算法
中草药管理与推荐系统Python+Django网页界面+推荐算法+计算机课设系统+网站开发
中草药管理与推荐系统。本系统使用Python作为主要开发语言,前端使用HTML,CSS,BootStrap等技术和框架搭建前端界面,后端使用Django框架处理应用请求,使用Ajax等技术实现前后端的数据通信。实现了一个综合性的中草药管理与推荐平台。具体功能如下: - 系统分为普通用户和管理员两个角色 - 普通用户可以登录,注册、查看物品信息、收藏物品、发布评论、编辑个人信息、柱状图饼状图可视化物品信息、并依据用户注册时选择的标签进行推荐 和 根据用户对物品的评分 使用协同过滤推荐算法进行推荐 - 管理员可以在后台对用户和物品信息进行管理编辑
92 12
中草药管理与推荐系统Python+Django网页界面+推荐算法+计算机课设系统+网站开发
|
2月前
|
人工智能 算法 JavaScript
无界SaaS与AI算力算法,链接裂变万企万商万物互联
本文介绍了一种基于无界SaaS与AI算力算法的商业模式的技术实现方案,涵盖前端、后端、数据库及AI算法等关键部分。通过React.js构建用户界面,Node.js与Express搭建后端服务,MongoDB存储数据,TensorFlow实现AI功能。提供了项目结构、代码示例及部署建议,强调了安全性、可扩展性和性能优化的重要性。
|
6月前
|
机器学习/深度学习 人工智能 监控
算法金 | 奇奇怪怪的正则化
**摘要:** 本文深入浅出地介绍了正则化在机器学习中的作用,旨在防止过拟合,提高模型泛化能力。正则化通过添加惩罚项限制模型复杂度,包括L1(Lasso回归,产生稀疏解)、L2(Ridge回归,减少参数大小)、Elastic Net(结合L1和L2优点)以及Lp正则化等。其他方法如Early Stopping、Dropout和数据增强也是防止过拟合的有效手段。选择正则化方法要考虑数据特性、模型复杂性、计算资源和调参能力。正则化参数设置可通过交叉验证、网格搜索等方法优化。文章最后强调了正则化对控制模型复杂度和提升性能的重要性。
73 8
算法金 | 奇奇怪怪的正则化
|
5月前
|
机器学习/深度学习 数据采集 监控
算法金 | DL 骚操作扫盲,神经网络设计与选择、参数初始化与优化、学习率调整与正则化、Loss Function、Bad Gradient
**神经网络与AI学习概览** - 探讨神经网络设计,包括MLP、RNN、CNN,激活函数如ReLU,以及隐藏层设计,强调网络结构与任务匹配。 - 参数初始化与优化涉及Xavier/He初始化,权重和偏置初始化,优化算法如SGD、Adam,针对不同场景选择。 - 学习率调整与正则化,如动态学习率、L1/L2正则化、早停法和Dropout,以改善训练和泛化。
50 0
算法金 | DL 骚操作扫盲,神经网络设计与选择、参数初始化与优化、学习率调整与正则化、Loss Function、Bad Gradient
|
6月前
|
存储 算法 NoSQL
数据结构和算法——哈希查找冲突处理方法(开放地址法-线性探测、平方探测、双散列探测、再散列,分离链接法)
数据结构和算法——哈希查找冲突处理方法(开放地址法-线性探测、平方探测、双散列探测、再散列,分离链接法)
208 1