学习进度06

Posted kt-xb

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了学习进度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

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 ]

S匹配任意非空白符,同[^ f ]

 

#边界字符

^行首匹配

$行尾匹配

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

只匹配整个字符串的结束

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

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(<div.*?class="o-font3 col-md-12 pb-3".*?span.*?>(.*?)</span>, re.S)
results = pattern.findall(response.read().decode(utf-8))
for result in results:
    print(result)

 

以上是关于学习进度06的主要内容,如果未能解决你的问题,请参考以下文章

假期周进度报告06

从mysql的片段中加载ListView

面向对象程序设计学习进度条

本周学习进度8

本周学习进度9

本周学习进度7