• 按键公众号 :
按键精灵电脑版
立即下载

软件版本:2014.06
软件大小:22.9M
更新时间:2021-12-03

按键精灵安卓版
立即下载

软件版本:3.7.2
软件大小:46.2M
更新时间:2023-05-10

按键精灵iOS版
立即下载

软件版本:1.8.0
软件大小:29.2M
更新时间:2023-03-21

按键手机助手
立即下载

软件版本:3.8.0
软件大小:262M
更新时间:2023-05-30

快捷导航

登录 后使用快捷导航
没有帐号? 注册

发新话题 回复该主题

网页数据采集脚本如何实现?详解来了!附源码哦~ [复制链接]

1#
-教程最后附按键源码,欢迎新手学习-
在抖音上关注“按键精灵”(抖音号:GUKOOHOT),我们将不定期发布各类办公中、生活里会用到的脚本小技巧,本篇教程小视频,已发布于抖音,欢迎观看!


平常办公中经常需要从网页上摘取信息,填入excel,如果采集的信息多的话,还真是费时费力。那么这项工作如何让按键精灵来帮你搞定呢?往下看……

(本教程以按键论坛会员专区帖子信息录入为例子)

一、脚本思路


脚本大致分为两个部分:获取网页上的信息,把信息填入EXCEL表格
1、打开浏览器,进入目标网站
2、提取网页的信息,解析出需要的标题、链接、作者、时间等信息
3、打开EXCEL表格,填入对应的信息


二、插件命令

这次需要用到两个插件:【神梦填表】【懒人Office】
您所在的用户组无法下载或查看附件
您所在的用户组无法下载或查看附件


1、【神梦填表】插件是用来对IE、Chrome浏览器进行操作的命令库,先来看下这次会用到的命令
命令名称:谷歌_启动
命令功能:启动谷歌浏览器,并且将命令库内核切换为谷歌内核,可以使用的命令:以{方法_}和{网页_}开头的,还有{接码_}开头的
命令参数:参数1【必选】:字符串,浏览器路径
返回值:字符串,返回浏览器所有标识符,标识符用"||"分隔

命令名称:方法_网页打开
命令功能:在当前标签页打开Url指定的网页
命令参数:参数1【必选】:字符串,打开链接
返回值:无

命令名称:方法_取状态
命令功能:获得当前网页的状态
命令参数:无
返回值:整数型,返回网页状态:0=未初始化;1=正在载入;2=载入完成;3=解析交互;4=全部完成


命令名称:网页_执行JS
命令功能:在当前网页中执行一段JS脚本,支持获取返回值
命令参数:参数1【必选】:整数型,执行类型;
类型:0表示执行JS不带返回值,
1表示执行JS并返回返回值,需要JS中有 return 语句
参数2【必选】:字符串,JS脚本语句
返回值:字符串型,返回特征字符串

命令名称:网页_取元素信息
命令功能:获取网页元素指定属性的信息
命令参数:参数1【必选】:字符串,网页元素属性类型:
参数2【必选】:字符串,元素特征
返回值:字符串,获取到的网页元素的值

插件中的方法有很多,详细的命令使用方法和范例可以到附件中的插件帮助文件里查看。

2、【懒人Office】插件中用到了读写EXCEL命令的,相关命令可以直接到附件中查看,或者可以看看上一篇的教程:
如何用脚本进行EXCEL数据对比?详解来了!【附按键源码】


三、脚本实现
先获取下界面上的一些配置信息。
  1. // 初始化配置
  2. Dim ChromePath, ExcelPath
  3. // 这里需要换成自己本机上的谷歌浏览器路径
  4. ChromePath = "C:\Program Files\Google\Chrome\Application\chrome.exe"
  5. ExcelPath = Form1.BrowseBox1.Path
复制代码
通过插件来打开浏览器并且等待网页的加载完成。
  1. // 打开谷歌浏览器
  2. ret = 神梦_网页填表.谷歌_启动(ChromePath)
  3. If ret = "" Then
  4. TracePrint "启动失败,请先彻底关闭谷歌浏览器,再启动脚本!"
  5. ExitScript
  6. Else
  7. TracePrint "启动成功!"
  8. End If
  9. // 等待网页的加载完成
  10. Call 神梦_网页填表.方法_网页打开("http://bbs.anjian.com/showforum-219-1.aspx")
  11. Do
  12. Delay 500
  13. Loop Until 神梦_网页填表.方法_取状态() = 4
复制代码
接下来就开始获取网页里帖子的信息了,需要先来获取一下帖子的数量,这里是用执行JS的方法来获取的。
  1. // 通过执行JS来获取当页帖子的数量
  2. Dim PostCount
  3. PostCount = Cint(神梦_网页填表.网页_执行JS(1, "return document.getElementsByClassName('ordinarytheme').length"))
  4. TracePrint PostCount
复制代码
通过分析网页的结构,可以发现每条帖子所需要的信息都是在一个tbody标签里的,所以我们可以获取每个tbody里的内容,然后用正则表达式来解析获取出想要的信息。

您所在的用户组无法下载或查看附件


先来编写一个正则解析的函数,因为按键精灵本身没有相关的命令,所以我们需要借助VBS的功能来实现(按键精灵和VBS有比较高的兼容性,可以运行大部分的VBS代码)。
  1. Function RegexFindM(FindExp, FindText)
  2. Dim RegEx, Matches, Match
  3. Set RegEx = New RegExp
  4. RegEx.IgnoreCase = true
  5. RegEx.Pattern = FindExp
  6. Set Matches = regEx.Execute(FindText)
  7. If Matches.Count > 0 Then
  8. If Matches(0).SubMatches.Count > 0 Then
  9. RegexFindM = Matches(0).SubMatches(0)
  10. End If
  11. End If
  12. Set Matches = Nothing
  13. Set RegEx = Nothing
  14. End Function
复制代码
现在就可以通过遍历每个帖子的元素内容解析出想要的信息了。
  1. // 遍历每个帖子
  2. Dim HTML
  3. For i = 13 To PostCount + 12
  4. HTML = 神梦_网页填表.网页_取元素信息("html", "//*[@id='threadlist']/tbody[" & i & "]")

  5. PostTitle = RegexFindM("<a .+ href=""/showtopic-.*?.aspx"">([^<]*?)</a>", HTML)
  6. PostUrl = RegexFindM("<a .+ href=""(/showtopic-.*?.aspx)"">[^<]*?</a>", HTML)
  7. PostUser = RegexFindM("<a href=""/userinfo-.*?.aspx"">([^<]*?)</a>", HTML)
  8. PostDate = RegexFindM("<em>(\d\d\d\d-\d\d-\d\d \d\d:\d\d)</em>", HTML)
  9. PostUrl = "http://bbs.anjian.com" & PostUrl
  10. TracePrint PostTitle & ", " & PostUrl & ", " & PostUser & ", " & PostDate

  11. Delay 500
  12. Next
复制代码
信息获取到了,那我们还得写到EXCEL表格里呢,所以得小小的改动下这个代码,加上写入表格的功能,这样全部功能就实现了。
  1. // 打开EXCEL
  2. Dim ExcelIndex, ExcelRow
  3. ExcelIndex = LazyOffice.ExcelOpen(ExcelPath, 1)
  4. ExcelRow = 4
  5. // 遍历每个帖子
  6. Dim HTML
  7. For i = 13 To PostCount + 12
  8. HTML = 神梦_网页填表.网页_取元素信息("html", "//*[@id='threadlist']/tbody[" & i & "]")

  9. PostTitle = RegexFindM("<a .+ href=""/showtopic-.*?.aspx"">([^<]*?)</a>", HTML)
  10. PostUrl = RegexFindM("<a .+ href=""(/showtopic-.*?.aspx)"">[^<]*?</a>", HTML)
  11. PostUser = RegexFindM("<a href=""/userinfo-.*?.aspx"">([^<]*?)</a>", HTML)
  12. PostDate = RegexFindM("<em>(\d\d\d\d-\d\d-\d\d \d\d:\d\d)</em>", HTML)
  13. PostUrl = "http://bbs.anjian.com" & PostUrl
  14. TracePrint PostTitle & ", " & PostUrl & ", " & PostUser & ", " & PostDate

  15. // 写入EXCEL表格
  16. Call LazyOffice.ExcelWrite(1,ExcelRow, 2, PostTitle, ExcelIndex)
  17. Call LazyOffice.ExcelWrite(1,ExcelRow, 3, PostUrl, ExcelIndex)
  18. Call LazyOffice.ExcelWrite(1,ExcelRow, 4, PostUser, ExcelIndex)
  19. Call LazyOffice.ExcelWrite(1, ExcelRow, 5, PostDate, ExcelIndex)
  20. ExcelRow = ExcelRow + 1
  21. Delay 500
  22. Next
复制代码
正则表达式相关教学:
初窥正则表达式,让处理字符串异常简单
正则表达式进阶


有兴趣的小伙伴可以下载源码用于参考,希望这篇教程对你有帮助哦!

完整源码下载:
您所在的用户组无法下载或查看附件



关注按键精灵抖音号,我们将不定期发布各类办公中、生活里会用到的脚本小技巧哦~



本主题由 超级版主 瑞祥幽冥狼 于 2022/1/24 14:41:54 执行 审核帖子 操作
2#


3#


4#


发新话题 回复该主题