网络爬虫之正则表达式Python

1、什么是正则表达式

正则表达式是一种进行数据筛选的表达式

 

2、原子

原子是正则表达式中最基本的组成单位,每个正则表达式中至少要包含一个原子。常见的原子类型有:

a、普通字符作为原子

b、非打印字符作为原子

c、通用字符作为原子

d、原子表

 

 

实战操作:

     导入模块:

                    import re

 

import re

>>>pat="yue"

>>>url="http://yum.iqianyue.com"

>>>result1=re.search(pat,url)#search函数从某个字符串中寻找符合规则的内容  表达式相当于内容规则  第一个参数对应规格,第二个参数是总的字符串

>>>print(result1)

<_sre.SRE_Matchobject; span=(16, 19), match='yue'>

>>>url2="http://dasdasdas.com"

>>>result2=re.search(pat,url2)

>>>print(result2)

None

 

b、非打印字符作为原子

import re

\t          #制表符  用于对齐

\n # 换行符

\w #通用字符  能够匹配任意的字母数字下划线

\d  #匹配任意一十进制数字

\W #匹配与\w相反的字符   匹配除了字母数字下划线以外任意字符

\s #匹配任意一个空白字符

\D  #匹配除了十进制数字外的任意字符

 

原子表:

pat="pyth[jsz]n"#   匹配pyth[中间或是j或是s或是中的一个]n

>>>string="dgsfastgvepythjnagkle"

>>>result5=re.search(pat,string)

>>>print(result5)

<_sre.SRE_Matchobject; span=(10, 16), match='pythjn'>

 

 

 

 

3、元字符

*:  “s*” 匹配0次1次或多次前面字符    "ssss"

?:"s?"     匹配0次或1次  "ss"   "s"

+ :"s+"   匹配1次或多次 ,不匹配0次

.    :  匹配除了换行符外所有字符

{3}   :  匹配前面的原子恰好出现了3次   t{3}

 

{n,}:  前面的原子至少出现了n次

{n,m}:前面的原子至少出现了n次  至多出现了m次

 

()提取中间的内容

4、模式修正符

模式修正符,即可以在不改变正则表达式的情况下,通过模式修正符改变正则表达式的含义,从而实现一些匹配结果的调整等功能。

 

I :忽略大小写

M :进行多行匹配

L:本地化识别匹配

U:根据Unicode  字符 解析字符

S: 指的是点也 匹配换行符

 

 

import re

pat1="python"

pat2="python"

string="dgdfdskdjasgPythonhkloe"

rst1=re.search(pat1,string)

rst2=re.search(pat2,string,re.I)

print(rst1)

print(rst2)

 

 

5、贪婪模式与懒惰模式

贪婪模式就是尽可能多的去匹配                              懒惰模式是尽可能少的去匹配

import re

pat1="p.*y"#贪婪模式

pat2="p.*?y"#懒惰模式

string="dgdfdskdjasgpyddadadythonhykloe"

rst1=re.search(pat1,string)

rst2=re.search(pat2,string)

print(rst1)

print(rst2)

 

<_sre.SRE_Matchobject; span=(12, 27), match='pyddadadythonhy'>

<_sre.SRE_Matchobject; span=(12, 14), match='py'>

 

 

6、正则表达式函数

正则表达式函数有:

 re.match()函数  从字符串头开始匹配,如果字符串首字母不匹配 直接返回None  

 re.search()在给定字符串从左向右进行搜索   只能给出一个结果

 re.sub()函数

 

全局匹配函数:

 re.compile(pat).findall(string)

 

7、常见正则匹配实例

匹配.com  或 .cn网址   匹配电话号码

import re

pat1="[a-zA-Z]+://[^\s]*[.com|.cn]"

 

string='hadah'

rst1=re.compile(pat1).findall(string)

 

print(rst1)

 

 

 

8、爬取csdn的一个课程 ,并自动提取出qq群

import re

importurllib.request

pat="QQ:(.*?)"

 

data=urllib.request.urlopen("https://edu.csdn.net/courses").read()

 

rst1=re.compile(pat).findall(str(data))

 

print(rst1)

 

 

 

9、提取出版社信息

 

 

 

 

 

你可能感兴趣的:(Python,Web)