您的当前位置:首页正文

VBA中的正则表达式(五)

2024-09-02 来源:步旅网
VBA中的正则表达式(五) VBA中的正则表达式(五)

——案例:网页内容抓取与解析

1. 案例思路

• 使用

VBA操作IE浏览器打开目标网站;

• 获取目标网站网页内容;

• 运用正则表达式解析网页内容,获取所需内容。

2. 目标网站

以银保监官网公示的保险专业中介许可证信息为目标网页,并提取某一中介机构的许可证信息。

网站截图 3. 网页内容获取代码及解析 Sub get_html() '1、输入网页地址

html_url = '/zj/WkCtBy/showLicenceInfo.do?id=1786' '2、创建一个IE浏览器对象,通过该对象可以操作IE浏览器 Set IE = CreateObject('InternetExplorer.Application') '3、操作IE浏览器

With IE

.Visible = False '设置浏览器属性,如是Ture则桌面运行,如是False则后台运行(不可见)

.navigate html_url '打开浏览器

While .readyState <> 4 Or .Busy = True DoEvents

Wend '等待网页数据加载完成

'以下三行代码的目的:程序等待2到5秒后运行,让网页加载完成

second_num = Application.RandBetween(2, 5) '生成一个2和5之间的随机整数

'生成距离当前时间2至5秒之后的时间 waitTime

=

TimeSerial(Hour(Now()),

Minute(Now()),

Second(Now()) + second_num)

Application.Wait waitTime '等到设定的时间,程序继续运行 html_text = .document.body.innerText '获取网页的关键信息 .Quit '关闭浏览器 End With

Set IE = Nothing '初始化IE对象 Debug.Print html_text End Sub

4. 关键信息在文本的显示及正则表达式的编写

获取的网页内容(片段)

机构编码:260883000000800

机构名称:鲲鹏保险经纪(海南)有限公司

机构住所:海南省海口市秀英区美华路8号商业一层 机构所在地:海南 发证日期:2022-04-02

正则表达式 .Pattern = '机构编码:\\s+[0-9]+' .Pattern = '机构名称:\\s+\\D\\S+' .Pattern = '机构住所:\\s+\\D\\S+' .Pattern = '机构所在地:\\s+\\D\\S+' .Pattern = '发证

获取的网页内容(片段) 正则表达式 日期:\\s+[0-9]{4}-[0-9]{2}-[0-9]{2}'

批准日期:2009-12-16

.Pattern = '批准日期:\\s+[0-9]{4}-[0-9]{2}-[0-9]{2}' .Pattern = '有效截止日期:\\s+[0-9]{4}-[0-9]{2}-[0-9]{2}' .Pattern = '发证机关:\\s+\\D\\S+' .Pattern = '流水号:\\s+[0-9]+'

有效截止日期:2024-10-01

发证机关:海南银保监局 流水号:00026068

业务范围:在全国区域内(港、澳、台除外)为投保人拟订投保方案、选择保险人、办理投保手续;协助被保险人

.Pattern = '业务

或受益人进行索赔;再保险经纪业务;为委托人提供防

范围:\\s\\S+'

灾、防损或风险评估、风险管理咨询服务;保险监督管理机构批准的其他业务。

• 正则表达式编写特点:关键字+文本特征

5. 完整代码及解析 Sub get_html() '1、输入网页地址

html_url = '/zj/WkCtBy/showLicenceInfo.do?id=1786' '2、创建一个IE浏览器对象,通过该对象可以操作IE浏览器 Set IE = CreateObject('InternetExplorer.Application') '3、操作IE浏览器 With IE

.Visible = False '设置浏览器属性,如是Ture则桌面运行,如是False则后台运行(不可见)

.navigate html_url '打开浏览器

While .readyState <> 4 Or .Busy = True DoEvents

Wend '等待网页数据加载完成

'以下三行代码的目的:程序等待2到5秒后运行,让网页加载完成

second_num = Application.RandBetween(2, 5) '生成一个2和5之间的随机整数

'生成距离当前时间2至5秒之后的时间 waitTime

=

TimeSerial(Hour(Now()),

Minute(Now()),

Second(Now()) + second_num)

Application.Wait waitTime '等到设定的时间,程序继续运行 html_text = .document.body.innerText '获取网页的关键信息 .Quit '关闭浏览器 End With

Set IE = Nothing '初始化IE对象

'4、创建正则表达式对象

Set re = CreateObject('vbscript.regexp') '5、处理文本 With re

.Global = True '可多次匹配 .Pattern = '机构编码:\\s+[0-9]+' Set code = .Execute(html_text)(0) Debug.Print code

.Pattern = '机构名称:\\s+\\D\\S+' Set orgname = .Execute(html_text)(0) Debug.Print orgname

.Pattern = '机构住所:\\s+\\D\\S+' Set orgaddress = .Execute(html_text)(0) Debug.Print orgaddress

.Pattern = '机构所在地:\\s+\\D\\S+' Set orglocation = .Execute(html_text)(0) Debug.Print orglocation

.Pattern = '发证日期:\\s+[0-9]{4}-[0-9]{2}-[0-9]{2}' Set licence_issued = .Execute(html_text)(0) Debug.Print licence_issued

.Pattern = '批准日期:\\s+[0-9]{4}-[0-9]{2}-[0-9]{2}' Set establishing_date = .Execute(html_text)(0) Debug.Print establishing_date

.Pattern = '有效截止日期:\\s+[0-9]{4}-[0-9]{2}-[0-9]{2}' Set expiration_date = .Execute(html_text)(0) Debug.Print expiration_date .Pattern = '发证机关:\\s+\\D\\S+'

Set issuing_authority = .Execute(html_text)(0) Debug.Print issuing_authority .Pattern = '流水号:\\s+[0-9]+'

Set serial_number = .Execute(html_text)(0) Debug.Print serial_number .Pattern = '业务范围:\\s\\S+'

Set business_Scope = .Execute(html_text)(0) Debug.Print business_Scope End With End Sub 6. 输出结果↓

机构编码:260883000000800

机构名称:鲲鹏保险经纪(海南)有限公司

机构住所:海南省海口市秀英区美华路8号商业一层 机构所在地:海南 发证日期:2022-04-02 批准日期:2009-12-16 有效截止日期:2024-10-01 发证机关:海南银保监局 流水号:00026068

业务范围:在全国区域内(港、澳、台除外)为投保人拟订投保方案、选择保险人、办理投保手续;协助被保险人或受益人进行索赔;再保险经纪业务;为委托人提供防灾、防损或风险评估、风险管理咨询服务;保险监督管理机构批准的其他业务。

因篇幅问题不能全部显示,请点此查看更多更全内容