python安全攻防---爬虫基础--re解析数据

0x01 re基础

使用re模块,必须先导入re模块

import re
  • findall():匹配所有符合正则的内容,返回的是一个列表
import re

str = "我的电话:10086,女朋友电话:11011"
list = re.findall('\d+',str)
print(list)

python安全攻防---爬虫基础--re解析数据_第1张图片

  • finditer():匹配所有符合的内容,返回的是迭代器,使用group可取到内容
import re

str = "我的电话:10086,女朋友电话:11011"
ite = re.finditer('\d+',str)
for i in ite:
    print(i.group())

在这里插入图片描述

  • search():只匹配一个,返回的是match对象,获得匹配数据要使用group()
import re

str = "我的电话:10086,女朋友电话:11011"
ite = re.search('\d+',str)
print(ite.group())

在这里插入图片描述

  • match():只在开头匹配
import re

str = "我的电话:10086,女朋友电话:11011"
ite = re.match('\d+',str)
print(ite.group())

python安全攻防---爬虫基础--re解析数据_第2张图片
将10086放在字符串最前面就可以匹配了

  • compile():预加载正则表达式
import re

str = "我的电话:10086,女朋友电话:11011"

com = re.compile('\d+')
lst = com.findall(str)
print(lst)

python安全攻防---爬虫基础--re解析数据_第3张图片

0x02 案例

案例1

获取下面字符串里面的名字和ID:

'''
金城武
胡歌
彭于晏
阿祖
'''

程序:

import re

str = '''
金城武
胡歌
彭于晏
阿祖
'''
com = re.compile("
(?P.*?)
"
) result = com.finditer(str) for i in result: print(i.group('id'),i.group('name'))

在预编译中有(?P\d+),(?P)是告诉处理器,括号里面的内容需要注意,我需要单独拿出来,<>里面是告诉处理器,这里拿出来的内容叫什么名字,后面可以根据这个名字对(?P)匹配的内容单独处理,比如后面group('id')直接根据名字取出数据
python安全攻防---爬虫基础--re解析数据_第4张图片

案例2

爬取豆瓣电影top250的电影名、导演、时间
程序:

import re
import requests

url = 'https://movie.douban.com/top250'

headers = {
     'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18362'}
response = requests.get(url=url,headers=headers)
content = response.text

obj = re.compile('
  • .*?
    .*?
    ' '.*?(?P.*?).*?' '

    (?P.*?)   .*?
    (?P.*?) ',re.S) result = obj.finditer(content) for it in result: print(it.group("name")) print(it.group('name2').strip()) print(it.group('age').strip())

  • 结果:
    python安全攻防---爬虫基础--re解析数据_第5张图片
    compile中的re.S是让.匹配任何字符,换行符也匹配

    你可能感兴趣的:(python安全攻防)