学习进度06

正则表达式的学习:

https://www.bilibili.com/video/av19956343?p=128

#re模块简介

 re.match函数

原型:match(pattern,string,flags=0)

参数:

标志位flags值如下:

re.I 忽略大小写,影响 ^和$

re.L 做本地用户识别

re.M 多行匹配

re.S 匹配包括换行符在内的所有字符

re.U 根据Unicode字符集解析字符,影响\w \W \b \B

re.X 以更灵活的格式理解正则表达式

功能:尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功返回None

 

re.search函数

原型:match(pattern,string,flags=0)

功能:扫描整个字符串,并返回第一个成功的匹配

 

re.findall函数

原型:match(pattern,string,flags=0)

功能:扫描整个字符串,并返回结果列表

 

https://www.bilibili.com/video/av19956343?p=129

#正则表达式的元字符

[]是字符集合,表示匹配方括号中所包含的任意一个字符

[a-z]匹配任意小写字母

[0-9a-zA-Z_]匹配任意的数字、字母和下划线

[^sun]匹配除了sun之外的所有字符

\d匹配数字,效果同[0-9]

\D匹配非数字字符,效果同[^0-9]

\w同[0-9a-zA-Z_]

\W同[^0-9a-zA-Z_]

[ \f\n\r\t]

\S匹配任意非空白符,同[^ \f\n\r\t]

 

#边界字符

^行首匹配

$行尾匹配

\A匹配字符串开始,只匹配整个字符串的开头

\Z只匹配整个字符串的结束

\b匹配一个单词的边界,也就是指单词和空格间的位置

\B匹配非单词边界

 

https://www.bilibili.com/video/av19956343?p=131

(xyz)匹配小括号内的xyz,作为一个整体去匹配

 x?匹配0个或1个x

 x*匹配0个或任意多个x

 x+匹配至少一个x

 x{n}匹配确定的n个x(n是一个非负整数)

x{n,}匹配至少n个x

x{n,m}匹配至少n个最多m个x

x|y或

 

#特殊*? +? x? 最小匹配

匹配/* part */

模式r“//*.*/*/“

 

(?:x)类似xyz但不表示一个组

 

https://www.bilibili.com/video/av19956343?p=133

#字符串切割

str=”as asd  asd”

re.split(r” +”,str)

 

re.finditer函数

功能:与findall类似,返回的是一个迭代器

 

字符串的替换和修改

re.sub(pattern,rep1,string,count=0,flags=0)

re.subn(pattern,rep1,string,count=0,flags=0)

rep1 指定用来替换的字符

string 目标字符串

count 最多替换次数

区别:前者返回一个被替换的字符串,后者返回一个元组,第二个是次数

 

https://www.bilibili.com/video/av19956343?p=134

#提取子组

()

group(0)一直代表原始字符串

 

编译:当我们使用re时,模块会做两件事

  1. 编译re,如果不合法会报错
  2. 用编译后的re去匹配对象

compile(pattern,flags=0)

 

https://www.bilibili.com/video/av19956343?p=135

 

并完成了简单的爬虫,还不能动态爬取:

import urllib.request
import random
import json
import re
#取消证书验证
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
url="http://www.beijing.gov.cn/hudong/hdjl/com.web.search.replyMailList.flow"
#模拟请求头
agentList=[
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36"
    "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0"
    "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; SE 2.X MetaSr 1.0; SE 2.X MetaSr 1.0; .NET CLR 2.0.50727; SE 2.X MetaSr 1.0)"
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; 360SE)"
]
agentStr= random.choice(agentList)
req = urllib.request.Request(url)
req.add_header('User-Agent',agentStr)
response = urllib.request.urlopen(req)
pattern = re.compile('(.*?)', re.S)
results = pattern.findall(response.read().decode('utf-8'))
for result in results:
    print(result)

 

你可能感兴趣的:(学习进度06)