js正则表达式之爬虫

前言
通过爬虫爬去网页的dom之后就需要用正则来获取相关的信息,下面来说下正则表达式在爬虫中的应用
匹配

对于Html来说,一般需要匹配的就是相应DOM结构,比如标签属性,内容和数目之类的。
拿一个简单的标签来说比如username,我们想要拿到username这个内容来用正则实现。
这里要先补充一些需要使用的或者比较关键的正则关键词:
  • 自定义匹配多种字符 - [ ]
    • 使用方括号 [ ] 包含一系列字符,能够匹配其中任意一个字符。
    • 用 [^ ] 包含一系列字符,则能够匹配其中字符之外的任意一个字符。
    • 虽然可以匹配其中任意一个,但是只能是一个,不是多个。
  • 修饰匹配次数 - {}?+*
    • {n} - 表达式重复n次,比如:”/w{2}” 相当于 “/w/w”;”a{5}” 相当于 “aaaaa”
    • {m,n} - 表达式至少重复m次,最多重复n次,比如:”ba{1,3}”可以匹配 “ba”或”baa”或”baaa”
    • {m,} - 表达式至少重复m次,比如:”/w/d{2,}”可以匹配 “a12”,”_456”,”M12344”…
    • ? - 匹配表达式0次或者1次,相当于 {0,1},比如:”a[cd]?”可以匹配 “a”,”ac”,”ad”
    • + - 表达式至少出现1次,相当于 {1,},比如:”a+b”可以匹配 “ab”,”aab”,”aaab”…
    • ***** - 表达式不出现或出现任意次,相当于 {0,},比如:”/^*b”可以匹配 “b”,”^^^b”…
  • 用于group的字符 - ()
    • 在被修饰匹配次数的时候,括号中的表达式可以作为整体被修饰
    • 取匹配结果的时候,括号中的表达式匹配到的内容可以被单独得到
  • 用于扩展表达式含义
    • g:代表可以进行全局匹配
    • i:代表不区分大小写匹配
    • m:代表可以进行多行匹配
上面几个概念就是我们所需要的所有东西了。
接下里开始匹配span标签并且取出里面的内容
username

使用下面的正则即可,其中非贪婪模式很简单的避免了多个相同标签时匹配不正确的问题
/(.*?)<\/span>/

如果要取出某些属性的标签比如
username

则可以使用如下正则
/(.*?)<\/span>/

这样就能够简单快速解决html里面各种标签的数据获取问题
筛选
对于匹配出来的数据,如果我们需要全局匹配,可以使用String.match(RegExp)方法。不过该方法只能获取一次的匹配结果,如果需要匹配大段文本中多次的结果就需要使用RegExp.exec(string)方法进行匹配。
var html = 'abc'; var reg = /(.*?)<\/span>/g; var result; while ((result = reg.exec(html)) != null){ console.log(result[1],result[2]) } //sp_1 a //sp_2 b //sp_3 c

【js正则表达式之爬虫】这样,对于绝大部分网页内容分析筛选的工作都可以使用简单的正则快速的完成了。

    推荐阅读