正则表达式解析网页

·  阅读 908

正则表达式解析网页

首先将源代码变成字符串,然后用正则表达式匹配想要的数据

模式描述模式描述
.匹配任意字符,除了换行符\s匹配空白字符
*匹配前一个字符0或多次\S匹配任何非空白字符
+匹配前一个字符1或多次\d匹配数字,[0~9]
匹配前一个字符0或1次\D匹配任何非数字,[ ^0~9 ]
匹配字符串开头\w匹配字母数字,[A-Za-z0-9]
$匹配字符串结尾\W匹配非字母数字,[ ^A-Za-z0-9 ]
( )匹配括号内的表达式,也表示一个组[ ]用来表示一组字符

re.match 只能从字符串的起始位置进行匹配

语法格式

re.match(pattern,string,flags=0)
复制代码

pattern:正则表达式

string:要匹配的字符串

flags:正则表达式的匹配方式

import re
s="aaa bbb ccc ddd eee"
m=re.match(r'(.*) ccc (.*? )',s)
# 匹配整个字符串的结果
print(m.group(0))
# (.*)的结果
print(m.group(1))
# (.*? )的结果
print(m.group(2))
# 结果列表
print(m.groups())
复制代码

image-20211205162024126

re.search 扫描整个字符串 返回第一个成功的匹配

s="aaa bbb ccc ddd eee"
m1=re.match('ccc',s)
m2=re.search('ccc',s)
print(m1)
print(m2)
复制代码

image-20211205175200704

re.findall 找到所有匹配的结果,并且以列表的形式返回

import re
s="aaa12313bbb6788ccc56789ddd eee"
m=re.findall('[0-9]+',s)
print(m)
复制代码

image-20211205184936683

解析网页

获取博客的标题

分析html

image-20211205190212413

编写正则表达式

<h4 data-v-6fe2b6a7>(.*?)</h4>
获取h4标签中间的标题
复制代码
使用requests获取网页源代码
利用正则表达式解析网页
复制代码
import re
import requests
headers={
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:94.0) Gecko/20100101 Firefox/94.0'
}
url='https://blog.csdn.net/weixin_42403632'
html=requests.get(url,headers=headers)
titles=re.findall('<h4 data-v-6fe2b6a7>(.*?)</h4>',html.text)
for i in titles:
    print(i)
print(len(titles))
复制代码

image-20211205190851220

分类:
后端
收藏成功!
已添加到「」, 点击更改