爬虫之正则解析
Posted 程序员唐丁
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了爬虫之正则解析相关的知识,希望对你有一定的参考价值。
一、什么是正则
正则表达式描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。
二、爬虫上什么场景下用正则
这个很难说,对于初学者或者一般的结构比较“规范”(也就是人家没想搞你)的网页数据,直接用XPath或者bs4就可以解析网页数据了,但是有时候爬虫你会发现数据不是在html中,也不是在json包中,而是在返回的js里。这个时候XPath或者bs4不能解决了,就只有采用正则了。当然,后期正则使用比较熟练的情况下,能正则就正则。因为正则入门的门槛相对于XPath或者bs4要高一点,但是都掌握的情况下,正则显然解析数据更快速。
三、正则实例介绍(匹配字符串中的邮箱)
import re
#待匹配的字符串
str_test = "唐丁的邮箱是donding@163.com,It's good"
#构造匹配的正则表达式
reg = r'[a-zA-Z0-9]+@163.com'
re.search(reg,str_test).group()
>>output:'donding@163.com'
这个不是适用所有字符串的邮箱匹配的,如果字符串全是英文肯定就不行了,匹配的正则表达式需要根据实际的字符串来灵活变化。
四、正则常用知识点
1、正则表达式中,如果直接给出字符,就是精确匹配。
例如: reg = “唐丁” ,可以匹配出字符串中含有的“唐丁”;
2、用\\d
可以匹配一个数字,\\w
可以匹配一个字母或数字
例如:‘00\\d’可以匹配
‘007’,但无法匹配
‘00A’;
‘\\d\\d\\d’可以匹配
‘010’;
‘\\w\\w\\d’可以匹配
‘py3’;
3、.
可以匹配任意字符
例如:'py.'
可以匹配'pyc'
、'pyo'
、'py!'
等等
4、*
表示任意个字符(包括0个),用+
表示至少一个字符,用?
表示0个或1个字符,用{n}
表示n个字符,用{n,m}
表示n-m个字符
例如:\\d{3}
表示匹配3个数字,例如'010'
;
\\s
可以匹配一个空格(也包括Tab等空白符),所以\\s+
表示至少有一个空格,例如匹配' '
;
\\d{3,8}
表示3-8个数字,例如'1234567'
;
5、[0-9a-zA-Z\\_]
可以匹配一个数字、字母或者下划线
6、[0-9a-zA-Z\\_]+
可以匹配至少由一个数字、字母或者下划线组成的字符串
7、[a-zA-Z\\_][0-9a-zA-Z\\_]*
可以匹配由字母或下划线开头,后接任意个由一个数字、字母或者下划线组成的字符串
8、[a-zA-Z\\_][0-9a-zA-Z\\_]{0, 19}
更精确地限制了变量的长度是1-20个字符(前面1个字符+后面最多19个字符)
9、D|d
可以匹配D或d,所以(P|p)ython
可以匹配'Python'
或者'python'
。
10、^
表示行的开头,^\\d
表示必须以数字开头
11、$
表示行的结束,\\d$
表示必须以数字结束
以上是关于爬虫之正则解析的主要内容,如果未能解决你的问题,请参考以下文章