——案例:网页内容抓取与解析
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
业务范围:在全国区域内(港、澳、台除外)为投保人拟订投保方案、选择保险人、办理投保手续;协助被保险人或受益人进行索赔;再保险经纪业务;为委托人提供防灾、防损或风险评估、风险管理咨询服务;保险监督管理机构批准的其他业务。
因篇幅问题不能全部显示,请点此查看更多更全内容