火车头采集器常用正则表达式经验分享

作者:淘博客 2022-05-28 浏览:1068

导读: 作为一名站长,网站内容纯原创难度不小,一是需要坚持,二是要有知识储备,三是要持续输出内容,否则坚持不会太久。淘博客做站一直在经历这个痛苦的过程。有时使用火车头采集器借用一下他站内容进行充实未尝不可,但这个工具上手不易,有很多需要学习的地方。站长经过多年摸索,走过不少弯路,也收获不少知识。本文所讲常用...

作为一名站长,网站内容纯原创难度不小,一是需要坚持,二是要有知识储备,三是要持续输出内容,否则坚持不会太久。淘博客做站一直在经历这个痛苦的过程。有时使用火车头采集器借用一下他站内容进行充实未尝不可,但这个工具上手不易,有很多需要学习的地方。站长经过多年摸索,走过不少弯路,也收获不少知识。本文所讲常用正则表达式,是实践证明完全可行的,从站长本人火车采集器中使用的规则中摘录出来的。

火车头采集器正则表达式

所谓正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”))操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。正则表达式是一种文本模式,该模式描述在搜索文本时要匹配的一个或多个字符串。

大白话的解释:正则表达式就是套用程序内部公式,匹配目标内容,进行采集。也就是让采集器知道,我需要什么内容,哪些内容采集,哪些内容不符合要求而加以丢弃。以下所列正则表达是从本人使用的v9.8版本中摘取的,供各位看官参考。

一、匹配采集网址、域名、URL正则表达式

(一)匹配闭合标签内网址正则表达式: (?<content>[\s\S]*?)

释义:可匹配闭合标签内做任意内容,不仅仅是网址。写法:<a href="(?<content>[\s\S]*?)" target="_blank" >,可以匹配形如<a href="https://www.taoboke.com/" target="_blank" >中的“https://www.taoboke.com/”字符串。

(二)匹配含http或https包括www.的网址:(?<content>(http(s)?:\/\/)(www\.)([a-z0-9--]{1,200})\.([a-z]{2,10})(\.[a-z]{2,10})?)

释义:匹配形如https://www.weblog.com.cn或http://www.weblog.com.cn网址,其中(http(s)?表示匹配http或https,(www\.)表示匹配www.字符串。([a-z0-9--]{1,200})\.([a-z]{2,10})(\.[a-z]{2,10})?表示匹配weblog.com.cn长后缀域名,或者weblog.com顶级短后缀域名。

(三)匹配含或不含www.的网址正则表达式:(?<content>(http(s)?:\/\/)(www\.)?([a-z0-9--]{1,200})\.([a-z]{2,10})(\.[a-z]{2,10})?),可以匹配https://www.miaoshoulu.com.cn、https://www.miaoshoulu.com、https://miaoshoulu.com.cn、https://miaoshoulu.com等域名,灵活运用可以过滤掉二级域名网址。

(四)匹配域名正则表达式:(?<content>(www\.)?([a-z0-9--]{1,200})\.([a-z]{2,10})(\.[a-z]{2,10})?)

释义:匹配形如:

www.fawailian.com、miaoshoulu.com、weblog.com.cn三种域名,即带或不带www.和长后缀的域名,(www\.)?表示含或不含,([a-z0-9--]{1,200})\.([a-z]{2,10})表示匹配域名前缀.后缀的一部分如.com,(\.[a-z]{2,10})?表示匹配可能的长后缀第二部分如.cn(以weblog.com.cn为例)

(五)匹配长url表达式:(?<content>(http(s)?:\/\/)?(www\.)?[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+(:\d+)*(\/\w+\.\w+)*([\?&]\w+=\w*)*)

释义:可以匹配形如https://www.taoboke.com/yuminggongju/12.html等各项带参数或目录的url。

接下来以采集内容为例,提供各块内容采集的常用表达式

二、匹配采集内容正则表达式(以title标签为例)

(一)匹配采集指定字符串之前的标题正式表达式:<title>[^\u4e00-\u9fa5a-zA-Z0-9]*(?<content>[\s\S]*?)[^\u4e00-\u9fa5a-zA-Z0-9]</title>

释义:<title>标签内[^\u4e00-\u9fa5a-zA-Z0-9]*表示排除任意一个或多个开头不是数字字母中文的字符串,紧接着(?<content>[\s\S]*?)表示匹配任意内容,最后[^\u4e00-\u9fa5a-zA-Z0-9]表示截取到不是数字字母中文的任意某个字符串为止,其作用是防止采集到标题中的乱码或者不规范文字,减轻处理工作量。

比如:使用这个表达式采集标题<title>全站秒收录 - 秒收录_自动秒收录_网站秒收录</title>,只采集到最开头“全站秒收录”三个字,因为紧接着“ - ”不属于数字字母中文的字符串,属排除范围,那么截取到此为止,后面的“ - 秒收录_自动秒收录_网站秒收录”站点品牌词、目录词就不采集,同样减轻工作量。

(二)匹配采集含指定关键词文章标题正则表达式:(?<content>[\s\S]*?[seo|SEO|搜索|优化|排名|目录|关键词|外链|友链|链接|收录|索引]+[\s\S]*?)

释义:只要标签内含“seo、SEO、搜索、优化、排名、目录、关键词、外链、友链、链接、收录、索引”等任意一个关键词,就可以匹配采集,其用途是从众多文章中找出符合自身网站主题的文章。

采集关键词、描述适用同样原理。其他的慢慢补充。使用过程有任何问题,也与站长本人联系。
(三)符合字数的字符串添加新内容
正则表达式:(<p>[^<]{100,})(?=</p>)
释义:分组(<p>[^<]{100,}),即<p>标签内容超过100个字符,且最后是</p>的闭合标签,(?=</p>)表示不捕获</p>
替换表达式:$1替换字符串</p>
释义:$1表示引用正则表达式分组1,即:(<p>[^<]{100,})内容,"替换字符串"即新增加的内容,由此实现根据原文长度判断,添加新的内容。

(四)字数不够的参加内容

正则表达式:(^[\s\S]{1,199}$)

释义:分组(^[\s\S]{1,199}$),即^开头至结尾$之间的字符数不足200的情况,()表示分组,供后面引用。

替换表达式:$1【替换字符串】,$1即引用^[\s\S]{1,199}$的内容,并加上【替换字符串】,作为随机插入的定位串,配合随机插入增加内容。由此实现根据原文长度判断,添加新的内容。

三、预查的解释与应用

预查又称环视(Lookaround)、属于零宽断言(Zero-Length Assertions)的一种,有 4 个语法:

语法中文名方便记忆
(?=regex)肯定性前瞻匹配后面是什么,但不捕获
(?!regex)否定性前瞻匹配后面不是什么,但不捕获
(?<=regex)肯定性后顾匹配前面是什么,但不捕获
(?<!regex)否定性后顾匹配前面不是什么,但不捕获

正则是从左往右匹配的,向前看(前瞻)就是右边、正向,向后看(后顾)就是左边、反向

四、正则表达式(?!), (?:), (?=)的区别(正则预查)

QQ图片20221004104920.png

注:令站长头痛的根据采集内容自动分类的问题,笔者基本已经解决,详见“火车头采集如何实现自动分类入库发布?”这篇文章,供大家参考。

转载请注明出处:淘博客,如有疑问,请联系(6677869)。
本文地址:https://www.taoboke.com/jishujiaocheng/82.html

添加回复:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

咨询