目录
3.2在线检查网站 https://regex101.com/
3.2.1点-匹配所有字符 表示要匹配除了换行符之外的任何[单个字符。
3.2.2星号.重复匹配任意次*表示匹配前面的子表达式任意次,包括0次。
3.2.3加号.重复匹配多次+表示匹配前面的子表达式-次或多次,不包括0次。
3.2.4花括号~匹配指定次数花括号表示前面的字符匹配指定的次数
3.2.7方括号-匹配某几种类型方括号表示要匹配某几种类型的字符。编辑
3.2.8正则表达式可以设定[单行模式和多行模式}如果是单行模式,表示匹配整个文本的开头位置。如果是多行模式,表示匹配文本每行的开头位置。
3.2.9括号-组选择括号称之为正则表达式的组选择。是从正则表达式 匹配的内容里面扣取出其中的某些部分
一、数据解析
1.1聚焦爬虫:爬取页面中指定的页面内容
1.2数据解析分类: 正则 bs4 xpath
1.3原理
1.4编码流程
指定urL
发起请求
获取响应数据
数据解析
持久化存储
二、图片数据爬取
import requests
url = "https://image.baidu.com/search/albumsdetail?tn=albumsdetail&word=%E5%9F%8E%E5%B8%82%E5%BB%BA%E7%AD%91%E6%91%84%E5%BD%B1%E4%B8%93%E9%A2%98&fr=searchindex_album%20&album_tab=%E5%BB%BA%E7%AD%91&album_id=7&rn=30"
imgdata = requests.get(url=url).content
with open('./12.jpg','wb') as fp:
fp.write(imgdata)
三、正则表达式
3.1一般形式:又臭又长
content = '''Python3高级开发工程师上海互教教育科技有 限公司.上海-浦东新区 2万/月02-18满员
测试开发工程师(C++/python)上海 墨鹛数码科技有限公司上海-浦东新区 2.5万/每月02- 18未满员
Python3开发工程师上海德拓信 息技术股份有限公司上海-徐汇区 1.3万/每月02-18剩余11人
测试开发工程师(Python)赫里普(上海)信息科技有限公司上海-浦东新区 1.1万/每月02-18剩余5人
Python高级开发工程师上海行动教育科技 股份有限公司上海-闵行区 2.8万1月02-18剩余255人
python开发工程师上海优似腾软件开发有 限公司上海-浦东新区 2.5万/每月02-18满员'''
#将文本内容按行放入列表
lines = content.splitlines()
for line in lines:
#查找.万/月’在字符串中什么地方
pos2 = line.find('万/月')
if pos2 < 0:
#查找*万/每月在字符串中什么地方
pos2 = line.find('万/每月')
#都找不到
if pos2 < 0:
continue
#执行到这里,说明可以找到薪资关键字
#接下来分析薪资数字的起始位置
#方法是找到pos2前面薪资数字开始的位置
idx = pos2-1
#只要是数字或者小数点,就继续往前面找
while line[idx].isdigit() or line[idx]=='.':
idx -= 1
#现在idx指向薪资数字前面的那个字,
#所以薪资开始的索引就是idx+1
pos1=idx+1
print(line[pos1:pos2])
正则表达形式:
content = '''Python3高级开发工程师上海互教教育科技有 限公司.上海-浦东新区 2万/月02-18满员
测试开发工程师(C++/python)上海 墨鹛数码科技有限公司上海-浦东新区 2.5万/每月02- 18未满员
Python3开发工程师上海德拓信 息技术股份有限公司上海-徐汇区 1.3万/每月02-18剩余11人
测试开发工程师(Python)赫里普(上海)信息科技有限公司上海-浦东新区 1.1万/每月02-18剩余5人
Python高级开发工程师上海行动教育科技 股份有限公司上海-闵行区 2.8万1月02-18剩余255人
python开发工程师上海优似腾软件开发有 限公司上海-浦东新区 2.5万/每月02-18满员'''
import re
p = re.compile(r'([\d.]+)万/每{0,1}月')
for one in p.findall( content):
print(one)
3.2在线检查网站 https://regex101.com/
3.2常见语法
3.2.0普通字符:直接匹配·
元字符:它们出现在正则表达式字符串中,不是表示直接匹配他们,而是表达一 些特别的含义。
这些特殊的元字符包括下面这些:
. * + ? \ [ ] ^ $ { } | ( )
3.2.1点-匹配所有字符
表示要匹配除了换行符之外的任何[单个字符。
content = '''Python3高级开发工程师上海互教教育科技有限公司.上海-浦东新区 2万/月02-18满员
测试开发工程师(C++/python)上海 墨鹛数码科技有限公司上海-浦东新区 2.5万/每月02- 18未满员
Python3开发工程师上海德拓信息技术股份有限公司上海-徐汇区 1.3万/每月02-18剩余11人
测试开发工程师(Python)赫里普(上海)信息科技有限公司上海-浦东新区 1.1万/每月02-18剩余5人
Python高级开发工程师上海行动教育科技股份有限公司上海-闵行区 2.8万1月02-18剩余255人
python开发工程师上海优似腾软件开发有限公司上海-浦东新区 2.5万/每月02-18满员'''
import re
p = re.compile(r'........公司')
for one in p.findall( content):
print(one)
3.2.2星号.重复匹配任意次
*表示匹配前面的子表达式任意次,包括0次。
content = '''苹果,是绿色的
橙子,是橙色的
香蕉,是黄色的
乌鸦,是黑色的'''
import re
p = re.compile(r',.*')
for one in p.findall( content):
print(one)
●紧跟在.后面,表示任意字符可以出现任意次,所以整个表达式的意思就是在逗号后面
的所有字符,包括逗号
3.2.3加号.重复匹配多次
+表示匹配前面的子表达式-次或多次,不包括0次。
3.2.4花括号~匹配指定次数
花括号表示前面的字符匹配指定的次数
特殊/d{ }表示数字出现
3.2.5贪婪模式与非贪婪模式
贪婪模式:* + ? 都是贪婪的,会尽可能多匹配
非贪婪模式:r'.*?'
3.2.6反斜杠N在正则表达式中有多种用途。
转义
反斜杠后面接一些字符, 表示匹配某种种类型的一个字符
3.2.7方括号-匹配某几种类型
方括号表示要匹配某几种类型的字符。
注意:1.一些元字符在方括号内失去了魔法,变得和普通字符一样了,例如 .
2.如果在方括号中使用^表示非方括号里面的字符集合。
3.2.8正则表达式可以设定[单行模式和多行模式}
如果是单行模式,表示匹配整个文本的开头位置。
如果是多行模式,表示匹配文本每行的开头位置。
^表示匹配文本的开始位置
第二参数:re.S单行模式匹配
re.M多行模式
re.A Ascii
$表示匹配文本的结束位置。
3.2.9括号-组选择
括号称之为正则表达式的组选择。是从正则表达式 匹配的内容里面扣取出其中的某些部分
content = '''苹果,是绿色色色的
橙子,是橙色的
香蕉,是绿色的
乌鸦,是绿'''
import re
p = re.compile(r'^(.*),',re.M)
for one in p.findall(content):
print(one)
3.2.10使用正则表达式切割字符串
import re
names = '关羽;张飞,赵云,马超,黄忠 李逵'
namelist = re.split(r'[;,\s]\s*', names)
print (namelist)
3.2.11指定替换函数
四、正则解析案例
分页