微信小程序开发抽取HTML中数据的最快方法是正则表达式,而不是循环

做项目的过程中,刚好用到这个变量,因为用微信小程序获取了网页源数据,但是是一堆HTML文档代码,若用循环来处理抽取里面我想要的信息,太过于复杂,所以着手用正则表达式来做。

方法如下:

一、从网页上获取源数据(HTML文档)

在js文件中,关键代码如下:

Page({
  data: {
    csdn: {}//用于存储获取的html文档
  },
 首先设置你想获取信息的网址
 var url = 'https://blog.csdn.net'; 
 然后用 wx.request这个接口来访问该网址,并获取网页源代码
 wx.request({
      url: url,
      data: {
             },
      method: 'GET',//get是从服务器上获取数据,post是向服务器传送数据。浏览器用GET请求来获取一个html页面/图片/css/js等资源;用POST来提交一个<form>表单,并得到一个结果的网页          
      success: function (res) {
        that.setData({ csdn: res.data)});
      },
    })
    })

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

用这种方法得到的变量csdn值如下,由于数据量太大,只截取了部分代码

ic/common/toolbar/js/m_toolbar-1.1.1.js" id="m-toolbar-tpl-scriptId" prod="blog"></script>
    <svg xmlns="http://www.w3.org/2000/svg" style="width:0; height:0; visibility:hidden; position: absolute;display: none"><defs><polygon id="SVGID_5_" points="41.8,34 41.8,56 38.2,56 38.2,34 28.5,43.2 24,43.2 40,28.1 56,43.2 51.5,43.2 			"/> </defs><symbol id="icon-close" viewBox="0 0 1024 1024">
    <path d="M896 0L512 384 128 0 0 128l384 384L0 896l128 128 384-384 384 384 128-128-384-384 384-384z" p-id="9079" fill="#cccccc"/>
  </symbol>
  <symbol id="icon-top" viewBox="0 0 80 80">
    <circle class="st0" cx="40" cy="40" r="40"/> <g> <g> <rect x="24" y="24" class="st1" width="32" height="3.5"/> </g> <g>  <use xlink:href="#SVGID_5_" style="overflow:visible;fill-rule:evenodd;clip-rule:evenodd;fill:#FFFFFF;"/> <clipPath id="SVGID_1_"> <use xlink:href="#SVGID_5_" style="overflow:visible;"/> </clipPath> </g> </g> 
  </symbol>
</svg>    <nav class="d-flex">
    <div class="nav-mask">
        <div class="warp">
                    <a class="btn-nav" onclick="changeNav($(this))" data-href="/" data-category="home">博客推荐</a>
                                                                        <a class="btn-nav" onclick="changeNav($(this))" data-href="/nav/watchers" data-category="watchers">动态</a>
                                        <a class="btn-nav" onclick="changeNav($(this))" data-href="/nav/career" data-category="career">程序人生</a>
                                        <a class="btn-nav" onclick="changeNav($(this))" data-href="/nav/python" data-category="python">Python</a>
                                        <a class="btn-nav" onclick="changeNav($(this))" data-href="/nav/java" data-category="java">Java</a>
                                        <a class="btn-nav" onclick="changeNav($(this))" data-href="/nav/ai" data-category="ai">百万人学AI</a>
                                                                                                        <a class="btn-nav" onclick="changeNav($(this))" data-href="/nav/web" data-category="web">前端</a>
                                        <a class="btn-nav" onclick="changeNav($(this))" data-href="/nav/arch" data-category="arch">架构</a>
                                        <a class="btn-nav" onclick="changeNav($(this))" data-href="/nav/blockchain" data-category="blockchain">区块链</a>
                                        <a class="btn-nav" onclick="changeNav($(this))" data-href="/nav/db" data-category="db">数据库</a>
                                        <a class="btn-nav" onclick="changeNav($(this))" data-href="/nav/5g" data-category="5g">5G</a>
                                        <a class="btn-nav" onclick="changeNav($(this))" data-href="/nav/game" data-category="game">游戏开发</a>
                                        <a class="btn-nav" onclick="changeNav($(this))" data-href="/nav/mobile" data-category="m

 
 
  • 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

二、用正则表达式匹配想要的信息

1.什么是正则表达式

说白了就是一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。

2.正则表达式常用语法

(1)/表示正则表达式的开始与结束
(2)++号代表前面的字符必须至少出现一次(1次或多次)
例如:runoo+b,可以匹配 runoob、runooob、runoooooob 等。
(3)*表示字符可以不出现,也可以出现一次或者多次(0次、或1次、或多次)。
例如:runoo*b,可以匹配 runob、runoob、runoooooob 等,* 号代表
(4)? 问号代表前面的字符最多只可以出现一次(0次、或1次)
colou?r 可以匹配 color 或者 colour。
(5)\s匹配任何空白字符,包括空格、制表符、换页符等等。
(6)\S匹配任何非空白字符。
(7)[标记一个中括号表达式的开始。要匹配 [,请使用 \[。
(8)() 括号里面是组, 可以提取组内的内容
(9)[\s\S]*?
是完全通配的意思;[ ]”是范围描述符。 \s是指空白,包括空格、换行、tab缩进等所有的空白,而\S刚好相反,这样一正一反下来,就表示所有的字符,完全的,一字不漏的。 例如:
<span id="ctext">([\s\S]*?)</span> 意思就是匹配所有在两个<span>中间有0个或多个任意字符的字符串. 并把内容部分生成个组

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

更多的语法可以查询菜鸟教程https://www.runoob.com/regexp/regexp-syntax.html

3.写出正则表达式

下面列举出我在项目中常用到的一种

    let my_reg =/<td class='colorize'>([\s\S]*?)<\/td>/gmi;
  • 1
  • 2

这是抓取网页HTML信息种最常用的一种写法,直接用标签+全匹配,
则下面这句HTML标签内容中的“被抓内容”就会被匹配出来。

...
<td class='colorize'>被抓内容</td> 
...

 
 
  • 1
  • 2
  • 3

后面的参数如下

  • g表示匹配尽可能多
  • i: 忽略大小写
  • 参数m表明可以进行多行匹配,但是这个只有当使用^和$模式时才会起作用,在其他的模式中,加不加入m都可以进行多行匹配(其实说多行的字符串也是一个普通字符串)

4.抽取数据------.exec()函数

在微信小程序中通过以下**.exec()函数**进行匹配,将结果放入数组

data_we_want = my_reg.exec(page)

 
 
  • 1

关于返回值数组data_we_want :

  • 此数组的第 0 个元素是与正则表达式相匹配的文本
  • 第 1 个元素是与 RegExpObject 的第 1 个子表达式相匹配的文本(如果有的话)
  • 第 2 个元素是与 RegExpObject 的第 2 个子表达式相匹配的文本(如果有的话),以此类推

除了数组元素和 length 属性之外,exec() 方法还返回两个属性:

  • index 属性声明的是匹配文本的第一个字符的位置。
  • input 属性则存放的是被检索的字符串 string。

5.全局循环抽取

用这种方面你会发现,虽然配置了全局匹配,也就是加了参数gmi,但是有可能只匹配了一次,也就是返回值数组中只有一个元素,后续就不匹配了,原因是还要再加循环才行。方法如下:

  var data=[];  
  while ((tmp_reg =  my_reg.exec(page)) != null) {      
      data.push(util.regular(tmp_reg[1]));     
      }

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

这种方法会将page页面中的所有元素匹配一遍,但有时你会发现第一个元素老是匹配不到,这是因为.lastIndex 参数刚开始不为零。

这个参数代表以为指针位置,每次都从这个位置开始匹配,所以刚开始需要清零。

优化后,代码如下:

  var data=[];  
  my_reg.lastIndex = 0;   
  while ((tmp_reg =  my_reg.exec(page)) != null) {      
      data.push(util.regular(tmp_reg[1]));     
      }

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

在while循环内部lastIndex 并没有清零,所以每循环一次拿出一个匹配数组,我们只要第1个元素tmp_reg[1],这是我们匹配到的文本,然后下一次循环匹配会按照lastIndex的位置继续往后匹配。

三、几种常用正则表达式示例

var names = /^[\u4E00-\u9FA5A-Za-z]+$/; //姓名
var phonetel = /^(((13[0-9]{1})|(15[0-9]{1})|(18[0-9]{1})|(17[0-9]{1}))+\d{8})$/; //手机号
var emailnums = /^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+(.[a-zA-Z0-9-]+)*.[a-zA-Z0-9]{2,6}$/; //邮箱
var idCard = /(\d{15}$)|(^\d{18}$)|(\d{17}(\d|X|x)$)/; //身份证

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  •                     <li class="tool-item tool-active is-like "><a href="javascript:;"><svg class="icon" aria-hidden="true">
                            <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#csdnc-thumbsup"></use>
                        </svg><span class="name">点赞</span>
                        <span class="count">1</span>
                        </a></li>
                        <li class="tool-item tool-active is-collection "><a href="javascript:;" data-report-click="{&quot;mod&quot;:&quot;popu_824&quot;}"><svg class="icon" aria-hidden="true">
                            <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#icon-csdnc-Collection-G"></use>
                        </svg><span class="name">收藏</span></a></li>
                        <li class="tool-item tool-active is-share"><a href="javascript:;" data-report-click="{&quot;mod&quot;:&quot;1582594662_002&quot;}"><svg class="icon" aria-hidden="true">
                            <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#icon-csdnc-fenxiang"></use>
                        </svg>分享</a></li>
                        <!--打赏开始-->
                                                <!--打赏结束-->
                                                <li class="tool-item tool-more">
                            <a>
                            <svg t="1575545411852" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5717" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M179.176 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z" p-id="5718"></path><path d="M509.684 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z" p-id="5719"></path><path d="M846.175 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z" p-id="5720"></path></svg>
                            </a>
                            <ul class="more-box">
                                <li class="item"><a class="article-report">文章举报</a></li>
                            </ul>
                        </li>
                                            </ul>
                </div>
                            </div>
            <div class="person-messagebox">
                <div class="left-message"><a href="https://blog.csdn.net/weixin_42197396">
                    <img src="https://profile.csdnimg.cn/0/B/A/3_weixin_42197396" class="avatar_pic" username="weixin_42197396">
                                            <img src="https://g.csdnimg.cn/static/user-reg-year/1x/2.png" class="user-years">
                                    </a></div>
                <div class="middle-message">
                                        <div class="title"><span class="tit"><a href="https://blog.csdn.net/weixin_42197396" data-report-click="{&quot;mod&quot;:&quot;popu_379&quot;}" target="_blank">过千山</a></span>
                                            </div>
                    <div class="text"><span>发布了25 篇原创文章</span> · <span>获赞 15</span> · <span>访问量 2599</span></div>
                </div>
                                <div class="right-message">
                                            <a href="https://im.csdn.net/im/main.html?userName=weixin_42197396" target="_blank" class="btn btn-sm btn-red-hollow bt-button personal-letter">私信
                        </a>
                                                            <a class="btn btn-sm  bt-button personal-watch" data-report-click="{&quot;mod&quot;:&quot;popu_379&quot;}">关注</a>
                                    </div>
                            </div>
                    </div>
    
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果您下载了本程序,但是该程序存在问题无法运行,那么您可以选择退款或者寻求我们的帮助(如果找我们帮助的话,是需要追加额外费用的)。另外,您不会使用资源的话(这种情况不支持退款),也可以找我们帮助(需要追加额外费用) 爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集信息。其主要功能是访问网页、提取数据并存储,以便后续分析或展示。爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的工作流程包括以下几个关键步骤: URL收集: 爬虫从一个或多个初始URL开始,递归或迭代地发现新的URL,构建一个URL队列。这些URL可以通过链接分析、站点地图、搜索引擎等方式获取。 请求网页: 爬虫使用HTTP或其他协议向目标URL发起请求,获取网页的HTML内容。这通常通过HTTP请求库实现,如Python的Requests库。 解析内容: 爬虫对获取的HTML进行解析,提取有用的信息。常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本、图片、链接等。 数据存储: 爬虫将提取的数据存储到数据库、文件或其他存储介质,以备后续分析或展示。常用的存储形式包括关系型数据库、NoSQL数据库、JSON文件等。 遵守规则: 为避免对网站造成过大负担或触发反爬虫机制,爬虫需要遵守网站的robots.txt协议,限制访问频率和深度,并模拟人类访问行为,如设置User-Agent。 反爬虫应对: 由于爬虫的存在,一些网站采取了反爬虫措施,如验证码、IP封锁等。爬虫工程师需要设计相应的策略来应对这些挑战。 爬虫在各个领域都有广泛的应用,包括搜索引擎索引、数据挖掘、价格监测、新闻聚合等。然而,使用爬虫需要遵守法律和伦理规范,尊重网站的使用政策,并确保对被访问网站的服务器负责。
如果您下载了本程序,但是该程序存在问题无法运行,那么您可以选择退款或者寻求我们的帮助(如果找我们帮助的话,是需要追加额外费用的)。另外,您不会使用资源的话(这种情况不支持退款),也可以找我们帮助(需要追加额外费用) 爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集信息。其主要功能是访问网页、提取数据并存储,以便后续分析或展示。爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的工作流程包括以下几个关键步骤: URL收集: 爬虫从一个或多个初始URL开始,递归或迭代地发现新的URL,构建一个URL队列。这些URL可以通过链接分析、站点地图、搜索引擎等方式获取。 请求网页: 爬虫使用HTTP或其他协议向目标URL发起请求,获取网页的HTML内容。这通常通过HTTP请求库实现,如Python的Requests库。 解析内容: 爬虫对获取的HTML进行解析,提取有用的信息。常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本、图片、链接等。 数据存储: 爬虫将提取的数据存储到数据库、文件或其他存储介质,以备后续分析或展示。常用的存储形式包括关系型数据库、NoSQL数据库、JSON文件等。 遵守规则: 为避免对网站造成过大负担或触发反爬虫机制,爬虫需要遵守网站的robots.txt协议,限制访问频率和深度,并模拟人类访问行为,如设置User-Agent。 反爬虫应对: 由于爬虫的存在,一些网站采取了反爬虫措施,如验证码、IP封锁等。爬虫工程师需要设计相应的策略来应对这些挑战。 爬虫在各个领域都有广泛的应用,包括搜索引擎索引、数据挖掘、价格监测、新闻聚合等。然而,使用爬虫需要遵守法律和伦理规范,尊重网站的使用政策,并确保对被访问网站的服务器负责。
如果您下载了本程序,但是该程序存在问题无法运行,那么您可以选择退款或者寻求我们的帮助(如果找我们帮助的话,是需要追加额外费用的)。另外,您不会使用资源的话(这种情况不支持退款),也可以找我们帮助(需要追加额外费用) 前后端分离,Json通信,Springboot后端,,持久层mybatis。注:因前后端分离,该仓库不含后台管理系统的前端,但实现了后台管理系统的接口。 爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集信息。其主要功能是访问网页、提取数据并存储,以便后续分析或展示。爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的工作流程包括以下几个关键步骤: URL收集: 爬虫从一个或多个初始URL开始,递归或迭代地发现新的URL,构建一个URL队列。这些URL可以通过链接分析、站点地图、搜索引擎等方式获取。 请求网页: 爬虫使用HTTP或其他协议向目标URL发起请求,获取网页的HTML内容。这通常通过HTTP请求库实现,如Python的Requests库。 解析内容: 爬虫对获取的HTML进行解析,提取有用的信息。常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本、图片、链接等。 数据存储: 爬虫将提取的数据存储到数据库、文件或其他存储介质,以备后续分析或展示。常用的存储形式包括关系型数据库、NoSQL数据库、JSON文件等。 遵守规则: 为避免对网站造成过大负担或触发反爬虫机制,爬虫需要遵守网站的robots.txt协议,限制访问频率和深度,并模拟人类访问行为,如设置User-Agent。 反爬虫应对: 由于爬虫的存在,一些网站采取了反爬虫措施,如验证码、IP封锁等。爬虫工程师需要设计相应的策略来应对这些挑战。 爬虫在各个领域都有广泛的应用,包括搜索引擎索引、数据挖掘、价格监测、新闻聚合等。然而,使用爬虫需要遵守法律和伦理规范,尊重网站的使用政策,并确保对被访问网站的服务器负责。
如果您下载了本程序,但是该程序存在问题无法运行,那么您可以选择退款或者寻求我们的帮助(如果找我们帮助的话,是需要追加额外费用的)。另外,您不会使用资源的话(这种情况不支持退款),也可以找我们帮助(需要追加额外费用) 爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集信息。其主要功能是访问网页、提取数据并存储,以便后续分析或展示。爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的工作流程包括以下几个关键步骤: URL收集: 爬虫从一个或多个初始URL开始,递归或迭代地发现新的URL,构建一个URL队列。这些URL可以通过链接分析、站点地图、搜索引擎等方式获取。 请求网页: 爬虫使用HTTP或其他协议向目标URL发起请求,获取网页的HTML内容。这通常通过HTTP请求库实现,如Python的Requests库。 解析内容: 爬虫对获取的HTML进行解析,提取有用的信息。常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本、图片、链接等。 数据存储: 爬虫将提取的数据存储到数据库、文件或其他存储介质,以备后续分析或展示。常用的存储形式包括关系型数据库、NoSQL数据库、JSON文件等。 遵守规则: 为避免对网站造成过大负担或触发反爬虫机制,爬虫需要遵守网站的robots.txt协议,限制访问频率和深度,并模拟人类访问行为,如设置User-Agent。 反爬虫应对: 由于爬虫的存在,一些网站采取了反爬虫措施,如验证码、IP封锁等。爬虫工程师需要设计相应的策略来应对这些挑战。 爬虫在各个领域都有广泛的应用,包括搜索引擎索引、数据挖掘、价格监测、新闻聚合等。然而,使用爬虫需要遵守法律和伦理规范,尊重网站的使用政策,并确保对被访问网站的服务器负责。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值