正则表达式从HTML中匹配img标签的图片地址

   2023-02-08 学习力0
核心提示:目录前言分析正则表达式总结前言有玩过爬虫的人应该都有过在又臭又长的HTML中找寻信息的经历,虽然有各种工具和各种框架可以辅助查找,但是解析HTML的规则也是人想的,制定规则也是十分麻烦的。恰好在个人的项目中,需要从某个网站中爬取图片,好在需求比较简

前言

有玩过爬虫的人应该都有过在又臭又长的HTML中找寻信息的经历,虽然有各种工具和各种框架可以辅助查找,但是解析HTML的规则也是人想的,制定规则也是十分麻烦的。
恰好在个人的项目中,需要从某个网站中爬取图片,好在需求比较简单,所以试着使用正则表达式来解决。

分析

每个网站中展示图片的地方,无非就是img标签或者style中background-image和background,先解决img标签中的图片。
首先,地址在标签的src属性之中,所以找寻src的位置是必须的。但是不只有img标签拥有src属性,video和style也同样拥有src属性。因此,只匹配src的位置是不够,还得确保这个src的位置在img标签中。

然后,就是匹配src后面的地址,匹配地址的方法已经有许多文章描述过了,不再多说,但本文中用了一个比较取巧的方式去匹配。

总的思路就是先匹配src的位置,在获取图片地址。

正则表达式

  • 首先是匹配src的位置,既然是找位置,那就需要用的正则表达式中预查(?),因为需要的图片地址是在src后面,所以用反向肯定预查,所以初步确定正则表达式可写成:

/(?<=判断条件)/ 至于反向肯定预查的判断条件,就是在img之后的src,所以正则表达式改成如下: /(?<=(img src="))/ 之所以匹配src=", 是因为想要直接就匹配到地址的开头位置,于是就顺手加上。
但是,因为img和src之间可能还存在class或者其他自定义属性,所以还要加上这些可能存在字符的匹配。但是因为这些字符的种类比较多,如双引号"",英文、数字、甚至是中文等等,一一匹配过于麻烦,有个取巧的方式就是匹配非>。
众所周知,>在HTML中是一个标签的结尾,所以它不可能出现在img标签内的img字符和src字符的中间,所以匹配位置的正则表达式可写成: /(?<=(img[^>]*src="))/

正则表达式从HTML中匹配img标签的图片地址

可以看到,能够成功找到图片地址的开头位置。

  • 既然位置找到了,那剩下的就是匹配地址了。这里可以使用其他相关文章说的匹配地址的正则表达式,但是和上面一样,同样可以取巧。
    HTML标签中,图片地址是以双引号"开头和结尾的,上面的匹配位置已经匹配到图片开头的双引号之后,那么图片地址还剩下一个双引号,就是结尾的那个。
    那么,直接匹配所有连续不为"的字符不就可以了,思路可能有点复杂,但是写起来简单:

/[^"]*/

  • 因此,总的正则表达式为:

/(?<=(img[^>]*src="))[^"]*/g 结尾加个g是表示匹配所有符合条件的字符串,现在就可以匹配出图片地址了:

正则表达式从HTML中匹配img标签的图片地址

总结

原文地址:https://juejin.cn/post/7107036013582614536
 
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • javascript中正则表达式的基础语法
    


            
 
    javascript中正则表达式的基础语法
     ×目录[1]定义[2]特点[3]元字符[4]转义字符[5]字符组[6]量词[7]括号[8]选择[9]断言[10]模式[11]优先级[12]局限性前面的话  正则表达式在人们的印象中可能是一堆无法理解的字符,但就是这些符号却实现了字符串的高效操作。通常的情况是,问题本身并不复杂
    03-08
  • JavaScript正则表达式exec和test方法
    方法 exec(string): 对string进行正则处理,并返回匹配结果.exec方法返回的数组有3个属性,分别是input、index和lastIndex 。1 input 属性是整个被搜索的字符串。2 index属性是指匹配在整个被搜索字符串中的位置。3 lastIndex 属性是指匹配的子字符串的最后一
    03-08
  • 前端笔记之JavaScript(六)让人头疼的正则表达式
    前端笔记之JavaScript(六)让人头疼的正则表达
    1.1正则概述和体验正则表达式是被用来匹配字符串中的字符组合的模式,常用来做表单验证。在JavaScript中,正则表达式也是对象,是一种引用类型。案例:正确输入一个电话号码,010-12345678,用户输入正确返回“对”,错误返回“错” var tel = prompt("请输
    03-08
  • [转][python] 常用正则表达式爬取网页信息及分析HTML标签总结
    [转][python] 常用正则表达式爬取网页信息及分
    转载至:https://blog.csdn.net/Eastmount/article/details/51082253这篇文章主要是介绍Python爬取网页信息时,经常使用的正则表达式及方法。它是一篇总结性文章,实用性比较大,主要解决自己遇到的爬虫问题,也希望对你有所帮助~当然如果会Selenium基于自动化
    03-08
  • C#正则表达式提取HTML中IMG标签的SRC地址
    C#正则表达式提取HTML中IMG标签的SRC地址
    一般来说一个 HTML 文档有很多标签,比如“html”、“body”、“table”等,想把文档中的 img 标签提取出来并不是一件容易的事。由于 img 标签样式变化多端,使提取的时候用程序寻找并不容易。于是想要寻找它们就必须写一个非常健全的正则表达式,不然有可能
    03-08
  • 正则表达式去除所有标签html标签
    tempStr = tempStr.replace(/(([^]+))/ig,"").replace(/[\r\n]/g,""); //去除所有html标签/.去除所有换行符。tempStr = tempStr.replace(/\s+/g,'#'); //所有的空格替换成 # 
    03-08
  • 用正则表达式替换html标签
    下面的代码用于修改html文本中的img标记,修改后的html适用于lazyload方式的图片加载:protected string LazyPicProcess(string content) {Regex re = new Regex("\\s*img[\\s\\S]*?(?srcsrc[\\s]*=[\\s]*[\"|\'](?pic[\\s\\S]*?)[\"|\'])[\\s\\S]*?", RegexO
    03-08
  • 一文带你彻底搞懂JavaScript正则表达式
    一文带你彻底搞懂JavaScript正则表达式
    目录正则表达式的概述什么是正则表达式正则表达式的作用正则表达式的特点正则表达式在js中的使用创建正则表达式测试正则表达式 test正则表达式中的特殊字符正则表达式的组成边界符字符类量词符预定义类正则表达式的替换开发中常用正则表达式小结 正则表达式的
  • JQuery之正则表达式 js正则表达式
    1.定义正则表达式/.../  用于定义正则表达式/.../g 表示全局匹配/.../i 表示不区分大小写/.../m 表示多行匹配2.匹配正则表达式非全局模式,不分组  var pattern = /^Java\w*/m;var text = "JavaScript is more fun than JavaEE or JavaBeans!";pattern.exe
    02-08
点击排行