
excel vba 网页数据抓取
excel vba 网页数据抓取(GAsheet的数据维度数据获取的解决思路及方法)
网站优化 • 优采云 发表了文章 • 0 个评论 • 154 次浏览 • 2021-09-13 09:15
excel vba 网页数据抓取(GAsheet的数据维度数据获取的解决思路及方法)
项目背景
每月需要从GA工具下载固定的原创数据(分为几个表格,报告不同维度的数据,比如不同渠道的流量、不同页面内容的流量、不同渠道的转化指标和页面内容),然后进行数据清洗和排序(例如,不规则的跟踪代码需要替换为正常的跟踪代码,冗长的页面URL需要替换为标准的统一产品名称)
最后进行分类统计,可视化,(按不同维度划分,进行月度趋势分析)
当前的挑战
每月手动提取数据。频率太低。我们需要更频繁地查看数据变化的趋势,例如每天而不是每月,并结合我们的行动提供及时的反馈和响应
同时,从GA的不同子报表下载数据需要很多时间,也会出错。我们希望减少花费在人工和错误上的时间。
节省报告时间并花更多时间分析数据和实施优化建议
当前的解决方案思路
主要来说,我们的计划分为三个步骤,
本文主要讲解数据采集自动化的实施方案
获取GA数据一般有3种方式
用账号密码登录,进入配置好的自定义报告下载
使用第3方工具配置参数下载(例如google sheet插件)
使用脚本(google sheet脚本,get python or excel VBA or PHP)通过谷歌API下载
这里唯一可以自动化的是后两者。使用google sheet插件等第三方工具是最方便的。无需编写代码,只需点击按钮即可完成数据。
以下内容主要介绍使用google sheet插件完成自动数据采集
我们要自动去GA数据库获取我们需要的数据,而不是每次都通过扶梯手动下载,并且我们要在自动获取数据后对数据进行自动清理和分类,并自动实现制图,并且最好按以天为单位自动显示实时数据,而不是每个月等待手动完成
最有效的方法是在GA自定义报表中拖拽测试数据维度
以其中一种raw3形式为例
可以看到里面收录了一些数据,每个页面的主要表现
页面名称为page,指标为session等
点击编辑表单查看
度量和维度相互对应
记住以上维度和指标
现在我们使用谷歌表格来获取这些数据
打开谷歌工作表并创建一个新工作表
名称是 GA 报告 testing0603
点击导航栏中的 add-on 安装一个名为 google analytics 的插件
安装后,google sheet会增加一个新建报告按钮
在弹出的对话框中输入报告的名称。该名称也是以后放置数据的工作表的名称。
帐户、媒体资源和视图选项与您的 GA 帐户设置一致
您可以点击Ga查看您的账户和属性以及查看名称以了解选择
维度和指标的设置请参考GA报告
设置完毕。
其中一个特别是关于目标设定
完成数和转化率
我们改用goalx 完成
这是最后一个
我们需要把这里的XX都改成7
ga:goalXXCompletions,ga:goalXXConversionRate
替换
ga:goal7Completions,ga:goal7ConversionRate
关于
metric、order、filter的设置请参考以下网址介绍
同样,您可以制作一个 raw1 报告
真诚地,我们可以将数据从 GA 导出到 Google Sheet,
最后使用插件的schedule功能定时运行 查看全部
项目背景
每月需要从GA工具下载固定的原创数据(分为几个表格,报告不同维度的数据,比如不同渠道的流量、不同页面内容的流量、不同渠道的转化指标和页面内容),然后进行数据清洗和排序(例如,不规则的跟踪代码需要替换为正常的跟踪代码,冗长的页面URL需要替换为标准的统一产品名称)
最后进行分类统计,可视化,(按不同维度划分,进行月度趋势分析)
当前的挑战
每月手动提取数据。频率太低。我们需要更频繁地查看数据变化的趋势,例如每天而不是每月,并结合我们的行动提供及时的反馈和响应
同时,从GA的不同子报表下载数据需要很多时间,也会出错。我们希望减少花费在人工和错误上的时间。
节省报告时间并花更多时间分析数据和实施优化建议
当前的解决方案思路
主要来说,我们的计划分为三个步骤,
本文主要讲解数据采集自动化的实施方案
获取GA数据一般有3种方式
用账号密码登录,进入配置好的自定义报告下载
使用第3方工具配置参数下载(例如google sheet插件)
使用脚本(google sheet脚本,get python or excel VBA or PHP)通过谷歌API下载
这里唯一可以自动化的是后两者。使用google sheet插件等第三方工具是最方便的。无需编写代码,只需点击按钮即可完成数据。
以下内容主要介绍使用google sheet插件完成自动数据采集
我们要自动去GA数据库获取我们需要的数据,而不是每次都通过扶梯手动下载,并且我们要在自动获取数据后对数据进行自动清理和分类,并自动实现制图,并且最好按以天为单位自动显示实时数据,而不是每个月等待手动完成
最有效的方法是在GA自定义报表中拖拽测试数据维度
以其中一种raw3形式为例
可以看到里面收录了一些数据,每个页面的主要表现
页面名称为page,指标为session等
点击编辑表单查看
度量和维度相互对应
记住以上维度和指标
现在我们使用谷歌表格来获取这些数据
打开谷歌工作表并创建一个新工作表
名称是 GA 报告 testing0603
点击导航栏中的 add-on 安装一个名为 google analytics 的插件
安装后,google sheet会增加一个新建报告按钮
在弹出的对话框中输入报告的名称。该名称也是以后放置数据的工作表的名称。
帐户、媒体资源和视图选项与您的 GA 帐户设置一致
您可以点击Ga查看您的账户和属性以及查看名称以了解选择
维度和指标的设置请参考GA报告
设置完毕。
其中一个特别是关于目标设定
完成数和转化率
我们改用goalx 完成
这是最后一个
我们需要把这里的XX都改成7
ga:goalXXCompletions,ga:goalXXConversionRate
替换
ga:goal7Completions,ga:goal7ConversionRate
关于
metric、order、filter的设置请参考以下网址介绍
同样,您可以制作一个 raw1 报告
真诚地,我们可以将数据从 GA 导出到 Google Sheet,
最后使用插件的schedule功能定时运行 查看全部
excel vba 网页数据抓取(GAsheet的数据维度数据获取的解决思路及方法)
项目背景
每月需要从GA工具下载固定的原创数据(分为几个表格,报告不同维度的数据,比如不同渠道的流量、不同页面内容的流量、不同渠道的转化指标和页面内容),然后进行数据清洗和排序(例如,不规则的跟踪代码需要替换为正常的跟踪代码,冗长的页面URL需要替换为标准的统一产品名称)
最后进行分类统计,可视化,(按不同维度划分,进行月度趋势分析)
当前的挑战
每月手动提取数据。频率太低。我们需要更频繁地查看数据变化的趋势,例如每天而不是每月,并结合我们的行动提供及时的反馈和响应
同时,从GA的不同子报表下载数据需要很多时间,也会出错。我们希望减少花费在人工和错误上的时间。
节省报告时间并花更多时间分析数据和实施优化建议
当前的解决方案思路
主要来说,我们的计划分为三个步骤,
本文主要讲解数据采集自动化的实施方案
获取GA数据一般有3种方式
用账号密码登录,进入配置好的自定义报告下载
使用第3方工具配置参数下载(例如google sheet插件)
使用脚本(google sheet脚本,get python or excel VBA or PHP)通过谷歌API下载
这里唯一可以自动化的是后两者。使用google sheet插件等第三方工具是最方便的。无需编写代码,只需点击按钮即可完成数据。
以下内容主要介绍使用google sheet插件完成自动数据采集
我们要自动去GA数据库获取我们需要的数据,而不是每次都通过扶梯手动下载,并且我们要在自动获取数据后对数据进行自动清理和分类,并自动实现制图,并且最好按以天为单位自动显示实时数据,而不是每个月等待手动完成
最有效的方法是在GA自定义报表中拖拽测试数据维度
以其中一种raw3形式为例
可以看到里面收录了一些数据,每个页面的主要表现
页面名称为page,指标为session等
点击编辑表单查看
度量和维度相互对应
记住以上维度和指标
现在我们使用谷歌表格来获取这些数据
打开谷歌工作表并创建一个新工作表
名称是 GA 报告 testing0603
点击导航栏中的 add-on 安装一个名为 google analytics 的插件
安装后,google sheet会增加一个新建报告按钮
在弹出的对话框中输入报告的名称。该名称也是以后放置数据的工作表的名称。
帐户、媒体资源和视图选项与您的 GA 帐户设置一致
您可以点击Ga查看您的账户和属性以及查看名称以了解选择
维度和指标的设置请参考GA报告
设置完毕。
其中一个特别是关于目标设定
完成数和转化率
我们改用goalx 完成
这是最后一个
我们需要把这里的XX都改成7
ga:goalXXCompletions,ga:goalXXConversionRate
替换
ga:goal7Completions,ga:goal7ConversionRate
关于
metric、order、filter的设置请参考以下网址介绍
同样,您可以制作一个 raw1 报告
真诚地,我们可以将数据从 GA 导出到 Google Sheet,
最后使用插件的schedule功能定时运行
excel vba 网页数据抓取(Java自定义抓取方式(6)-上海怡诺唐咨询)
网站优化 • 优采云 发表了文章 • 0 个评论 • 223 次浏览 • 2021-09-13 05:09
excel vba 网页数据抓取(Java自定义抓取方式(6)-上海怡诺唐咨询)
自定义爬取方法包括“从页面中提取数据”、“从浏览器中提取数据”和“生成数据”三部分。
1、从页面中提取数据
(1)抓取元素的指定属性值:先选择InnerHtml和OuterHtml检查要提取的属性值是否存在,然后选择捕获元素的指定属性值。比如在流行的源码,id,class,href是A标签的属性,在下拉选项中选择要提取的属性名称,提取该属性的属性值,演示如下:
(2)Grab text:提取网页显示的内容,可见的文字信息。
(3)Capture 地址:一般用于抓取图片地址或Iframe地址。首先字段的Xpath定位IMG标签或Iframe标签,提取src属性值。
(4)抓取选中项的文本:尝试用圆形下拉框提取当前选中项的文本
(5)抓取该元素的OuterHtml和InnerHtml:提取网页源代码
(6)抓取取值:一般用于抓取输入框内的文本。首先字段的Xpath定位输入标签,提取取值值。演示如下:
(7)抢超链接:首先,字段的Xpath定位A标签,从A标签中提取href的属性值,演示如下:
2、从浏览器中提取数据
(1)page URL:同添加其他特殊字段爬取当前页面URL效果
(2)page title: 同添加其他特殊字段抓取当前页面的标题效果
(从页面源码中抓取的3):在网页源码中可以直接使用正则表达式提取匹配的数据
3、生成数据
(1) 生成定值:同添加其他特殊字段生成定值效果,常用于设置发帖到网站时发帖的用户名、发帖到版块等固定字段
(2)使用当前时间:同添加其他特殊字段使用当前时间效果,用于记录采集时间,此设置可能导致优采云采集器去重功能检测失败 查看全部
自定义爬取方法包括“从页面中提取数据”、“从浏览器中提取数据”和“生成数据”三部分。
1、从页面中提取数据
(1)抓取元素的指定属性值:先选择InnerHtml和OuterHtml检查要提取的属性值是否存在,然后选择捕获元素的指定属性值。比如在流行的源码,id,class,href是A标签的属性,在下拉选项中选择要提取的属性名称,提取该属性的属性值,演示如下:
(2)Grab text:提取网页显示的内容,可见的文字信息。
(3)Capture 地址:一般用于抓取图片地址或Iframe地址。首先字段的Xpath定位IMG标签或Iframe标签,提取src属性值。
(4)抓取选中项的文本:尝试用圆形下拉框提取当前选中项的文本
(5)抓取该元素的OuterHtml和InnerHtml:提取网页源代码
(6)抓取取值:一般用于抓取输入框内的文本。首先字段的Xpath定位输入标签,提取取值值。演示如下:
(7)抢超链接:首先,字段的Xpath定位A标签,从A标签中提取href的属性值,演示如下:
2、从浏览器中提取数据
(1)page URL:同添加其他特殊字段爬取当前页面URL效果
(2)page title: 同添加其他特殊字段抓取当前页面的标题效果
(从页面源码中抓取的3):在网页源码中可以直接使用正则表达式提取匹配的数据
3、生成数据
(1) 生成定值:同添加其他特殊字段生成定值效果,常用于设置发帖到网站时发帖的用户名、发帖到版块等固定字段
(2)使用当前时间:同添加其他特殊字段使用当前时间效果,用于记录采集时间,此设置可能导致优采云采集器去重功能检测失败 查看全部
excel vba 网页数据抓取(Java自定义抓取方式(6)-上海怡诺唐咨询)
自定义爬取方法包括“从页面中提取数据”、“从浏览器中提取数据”和“生成数据”三部分。
1、从页面中提取数据

(1)抓取元素的指定属性值:先选择InnerHtml和OuterHtml检查要提取的属性值是否存在,然后选择捕获元素的指定属性值。比如在流行的源码,id,class,href是A标签的属性,在下拉选项中选择要提取的属性名称,提取该属性的属性值,演示如下:

(2)Grab text:提取网页显示的内容,可见的文字信息。
(3)Capture 地址:一般用于抓取图片地址或Iframe地址。首先字段的Xpath定位IMG标签或Iframe标签,提取src属性值。
(4)抓取选中项的文本:尝试用圆形下拉框提取当前选中项的文本
(5)抓取该元素的OuterHtml和InnerHtml:提取网页源代码
(6)抓取取值:一般用于抓取输入框内的文本。首先字段的Xpath定位输入标签,提取取值值。演示如下:

(7)抢超链接:首先,字段的Xpath定位A标签,从A标签中提取href的属性值,演示如下:

2、从浏览器中提取数据

(1)page URL:同添加其他特殊字段爬取当前页面URL效果
(2)page title: 同添加其他特殊字段抓取当前页面的标题效果
(从页面源码中抓取的3):在网页源码中可以直接使用正则表达式提取匹配的数据
3、生成数据

(1) 生成定值:同添加其他特殊字段生成定值效果,常用于设置发帖到网站时发帖的用户名、发帖到版块等固定字段
(2)使用当前时间:同添加其他特殊字段使用当前时间效果,用于记录采集时间,此设置可能导致优采云采集器去重功能检测失败
excel vba 网页数据抓取(VBA基础的人来说不可能解决问题,我也不想把私信变成聊天窗 )
网站优化 • 优采云 发表了文章 • 0 个评论 • 138 次浏览 • 2021-09-09 18:01
excel vba 网页数据抓取(VBA基础的人来说不可能解决问题,我也不想把私信变成聊天窗
)
因为知乎的一些回答,最近总有私信问我怎么用VBA抓网,我基本没有回复。因为这个问题太大了,有基础知识的人其实很容易自己在百度或者ExcelHome论坛上找到答案。不需要我说什么。对于没有基础知识的人来说,是不可能三言两语解决问题的。我不想把私信变成聊天窗口。借知乎open 专栏的机会,来仔细解释一下这个问题。
我对Excel和VBA的了解有限,只能解决我遇到的一些问题,不一定适用于所有场景。以下内容基于对VBA基本用法和HTML语言知识的了解:
一、前期准备
据我所知,VBA 不能操作任何浏览器和网页。我们所能做的就是在IE上执行一些操作,是的,只有IE。不要告诉我电脑上没有IE,所以你可以退出Sub。就像在Python中导入,在C#中使用一样,VBA也需要引用一些库来操作IE,不过好在它是微软的产品,所以我们可以轻松使用VBA自带的一些库。
我们需要做的第一件事是在 VBA 中引用 Micorsoft Internet Controls,我们知道这个名字是用来帮助我们控制 IE 页面的。
二、网页操作
引用 Micorsoft Internet Controls 后,我们可以对页面做任何我们想做的事情,但我们需要主页上的页面,上帝说我们需要一个页面!
1、打开网页
我们以百度搜索“Chahu”关键词为例:
With CreateObject("internetexplorer.application")
.Visible = True
.Navigate "https://www.baidu.com/s?wd=扯乎"
'关闭网页
' .Quit
End With
代码很简单,先创建一个IE对象,然后给一些属性赋值。 Visible就是可见性,是指网页被操作时是否会看到网页。熟练后可以设置为False,这样不仅让程序在运行时有一种神秘感(而不是),而且速度也快了一点。
但有一点要记住,这个网页在我们打开后并没有关闭,这意味着程序结束后需要手动关闭它。如果网页不可见,则无法手动关闭。代码中的注释部分用于关闭网页。不用说,导航就是 URL。
我们必须等待网页完全加载后才能开始信息抓取。这时候我们使用:(从这里开始,所有的代码都需要写在With代码块中)
While .ReadyState 4 Or .Busy
DoEvents
Wend
Busy 是网页的繁忙状态,ReadyState 是 HTTP 的五种就绪状态,对应如下:
2、获取信息
我们先抓取页面上的所有内容,稍后过滤掉有用的部分,然后慢慢添加条件进行抓取。
Set dmt = .Document
For i = 0 To dmt.all.Length - 1
Set htMent = dmt.all(i)
With ActiveSheet
.Cells(i + 2, "A") = htMent.tagName
.Cells(i + 2, "B") = TypeName(htMent)
.Cells(i + 2, "C") = htMent.ID
.Cells(i + 2, "D") = htMent.Name
.Cells(i + 2, "E") = htMent.Value
.Cells(i + 2, "F") = htMent.Text
.Cells(i + 2, "G") = htMent.innerText
End With
Next i
这段代码有点类似于JS,需要从IE.Document.all中找出页面上的所有节点。还有其他几种方法:
这些更方便使用,帮助在抓取所有页面内容后过滤有效信息。当然 all 最好用,因为 all 也有 all ("IDName") 和 all.IDName 用法。
以上代码部分返回的属性值都是基本的HTML内容,就不一一解释了。
3、填写信息
当然,网络爬虫神器还是Python。大多数人使用Excel自动填写页面内容,直接将表单提交到网页,省去了问卷录入等大量工作。抓取页面内容后,填充起来就更容易了。你只需要直接给页面标签的Value属性赋值即可。
但是,除了文本框,可能还有其他没有Value的标签,比如下拉菜单和单选按钮。给这些内容赋值需要一些基本的HTML知识。
'下拉菜单选择
.all("select")(0).Selected = True
'单选按钮选择
.all("radio").Checked = True
'复选按钮选择
.all("checkbox").Checked = True
下拉菜单是一个select标签,每个选项都在一个option标签中,所以要返回一个set,需要选择一个option将对应的Selected属性修改为True。单选按钮和复选按钮都是输入标签。不同的是类型分别是radio和checkbox。选择一个选项,需要修改对应的Checked属性。
三、数据接口
有时我们可以直接获取一些 API。当然,通过API返回数据比打开网页更方便快捷,使用的方法也有些不同。
1、Request 接口
比如我得到了一个可以从网上查询到城市免费WIFI的API,我用下面的代码通过Excel界面访问:(虽然是免费的,但我还是隐藏了我的AppKey,以便避免麻烦)
Dim http
Set http = CreateObject("Microsoft.XMLHTTP")
http.Open "GET", "http://api.avatardata.cn/Wifi/QueryByCity", False
http.setRequestHeader "CONTENT-TYPE", "application/x-www-form-urlencoded"
http.send "key=[AppKey]&city=北京&page=1"
此时我们创建的对象不再是IE,而是HTTP对象。这里使用的是ajax的Open方法,GET为数据发送方法,第二个参数为接口地址,第三个参数指定请求方法是否异步。如果这个API有账号和密码,就写在第四个和第五个参数中。
setRequestHeader 是向接口发送一个HTTP协议头文件,最后发送的内容就是接口参数。当然,这个QueryString也可以直接写在URL中,发送一个空字符串即可。
2、interface 返回
接口返回和获取的方式很简单:
If http.Status = 200 Then Range("A1").Value = http.responseText 查看全部
)
因为知乎的一些回答,最近总有私信问我怎么用VBA抓网,我基本没有回复。因为这个问题太大了,有基础知识的人其实很容易自己在百度或者ExcelHome论坛上找到答案。不需要我说什么。对于没有基础知识的人来说,是不可能三言两语解决问题的。我不想把私信变成聊天窗口。借知乎open 专栏的机会,来仔细解释一下这个问题。
我对Excel和VBA的了解有限,只能解决我遇到的一些问题,不一定适用于所有场景。以下内容基于对VBA基本用法和HTML语言知识的了解:
一、前期准备
据我所知,VBA 不能操作任何浏览器和网页。我们所能做的就是在IE上执行一些操作,是的,只有IE。不要告诉我电脑上没有IE,所以你可以退出Sub。就像在Python中导入,在C#中使用一样,VBA也需要引用一些库来操作IE,不过好在它是微软的产品,所以我们可以轻松使用VBA自带的一些库。
我们需要做的第一件事是在 VBA 中引用 Micorsoft Internet Controls,我们知道这个名字是用来帮助我们控制 IE 页面的。
二、网页操作
引用 Micorsoft Internet Controls 后,我们可以对页面做任何我们想做的事情,但我们需要主页上的页面,上帝说我们需要一个页面!
1、打开网页
我们以百度搜索“Chahu”关键词为例:
With CreateObject("internetexplorer.application")
.Visible = True
.Navigate "https://www.baidu.com/s?wd=扯乎"
'关闭网页
' .Quit
End With
代码很简单,先创建一个IE对象,然后给一些属性赋值。 Visible就是可见性,是指网页被操作时是否会看到网页。熟练后可以设置为False,这样不仅让程序在运行时有一种神秘感(而不是),而且速度也快了一点。
但有一点要记住,这个网页在我们打开后并没有关闭,这意味着程序结束后需要手动关闭它。如果网页不可见,则无法手动关闭。代码中的注释部分用于关闭网页。不用说,导航就是 URL。
我们必须等待网页完全加载后才能开始信息抓取。这时候我们使用:(从这里开始,所有的代码都需要写在With代码块中)
While .ReadyState 4 Or .Busy
DoEvents
Wend
Busy 是网页的繁忙状态,ReadyState 是 HTTP 的五种就绪状态,对应如下:
2、获取信息
我们先抓取页面上的所有内容,稍后过滤掉有用的部分,然后慢慢添加条件进行抓取。
Set dmt = .Document
For i = 0 To dmt.all.Length - 1
Set htMent = dmt.all(i)
With ActiveSheet
.Cells(i + 2, "A") = htMent.tagName
.Cells(i + 2, "B") = TypeName(htMent)
.Cells(i + 2, "C") = htMent.ID
.Cells(i + 2, "D") = htMent.Name
.Cells(i + 2, "E") = htMent.Value
.Cells(i + 2, "F") = htMent.Text
.Cells(i + 2, "G") = htMent.innerText
End With
Next i
这段代码有点类似于JS,需要从IE.Document.all中找出页面上的所有节点。还有其他几种方法:
这些更方便使用,帮助在抓取所有页面内容后过滤有效信息。当然 all 最好用,因为 all 也有 all ("IDName") 和 all.IDName 用法。
以上代码部分返回的属性值都是基本的HTML内容,就不一一解释了。
3、填写信息
当然,网络爬虫神器还是Python。大多数人使用Excel自动填写页面内容,直接将表单提交到网页,省去了问卷录入等大量工作。抓取页面内容后,填充起来就更容易了。你只需要直接给页面标签的Value属性赋值即可。
但是,除了文本框,可能还有其他没有Value的标签,比如下拉菜单和单选按钮。给这些内容赋值需要一些基本的HTML知识。
'下拉菜单选择
.all("select")(0).Selected = True
'单选按钮选择
.all("radio").Checked = True
'复选按钮选择
.all("checkbox").Checked = True
下拉菜单是一个select标签,每个选项都在一个option标签中,所以要返回一个set,需要选择一个option将对应的Selected属性修改为True。单选按钮和复选按钮都是输入标签。不同的是类型分别是radio和checkbox。选择一个选项,需要修改对应的Checked属性。
三、数据接口
有时我们可以直接获取一些 API。当然,通过API返回数据比打开网页更方便快捷,使用的方法也有些不同。
1、Request 接口
比如我得到了一个可以从网上查询到城市免费WIFI的API,我用下面的代码通过Excel界面访问:(虽然是免费的,但我还是隐藏了我的AppKey,以便避免麻烦)
Dim http
Set http = CreateObject("Microsoft.XMLHTTP")
http.Open "GET", "http://api.avatardata.cn/Wifi/QueryByCity", False
http.setRequestHeader "CONTENT-TYPE", "application/x-www-form-urlencoded"
http.send "key=[AppKey]&city=北京&page=1"
此时我们创建的对象不再是IE,而是HTTP对象。这里使用的是ajax的Open方法,GET为数据发送方法,第二个参数为接口地址,第三个参数指定请求方法是否异步。如果这个API有账号和密码,就写在第四个和第五个参数中。
setRequestHeader 是向接口发送一个HTTP协议头文件,最后发送的内容就是接口参数。当然,这个QueryString也可以直接写在URL中,发送一个空字符串即可。
2、interface 返回
接口返回和获取的方式很简单:
If http.Status = 200 Then Range("A1").Value = http.responseText 查看全部
excel vba 网页数据抓取(VBA基础的人来说不可能解决问题,我也不想把私信变成聊天窗
)
因为知乎的一些回答,最近总有私信问我怎么用VBA抓网,我基本没有回复。因为这个问题太大了,有基础知识的人其实很容易自己在百度或者ExcelHome论坛上找到答案。不需要我说什么。对于没有基础知识的人来说,是不可能三言两语解决问题的。我不想把私信变成聊天窗口。借知乎open 专栏的机会,来仔细解释一下这个问题。
我对Excel和VBA的了解有限,只能解决我遇到的一些问题,不一定适用于所有场景。以下内容基于对VBA基本用法和HTML语言知识的了解:
一、前期准备
据我所知,VBA 不能操作任何浏览器和网页。我们所能做的就是在IE上执行一些操作,是的,只有IE。不要告诉我电脑上没有IE,所以你可以退出Sub。就像在Python中导入,在C#中使用一样,VBA也需要引用一些库来操作IE,不过好在它是微软的产品,所以我们可以轻松使用VBA自带的一些库。
我们需要做的第一件事是在 VBA 中引用 Micorsoft Internet Controls,我们知道这个名字是用来帮助我们控制 IE 页面的。
二、网页操作
引用 Micorsoft Internet Controls 后,我们可以对页面做任何我们想做的事情,但我们需要主页上的页面,上帝说我们需要一个页面!
1、打开网页
我们以百度搜索“Chahu”关键词为例:
With CreateObject("internetexplorer.application")
.Visible = True
.Navigate "https://www.baidu.com/s?wd=扯乎"
'关闭网页
' .Quit
End With
代码很简单,先创建一个IE对象,然后给一些属性赋值。 Visible就是可见性,是指网页被操作时是否会看到网页。熟练后可以设置为False,这样不仅让程序在运行时有一种神秘感(而不是),而且速度也快了一点。
但有一点要记住,这个网页在我们打开后并没有关闭,这意味着程序结束后需要手动关闭它。如果网页不可见,则无法手动关闭。代码中的注释部分用于关闭网页。不用说,导航就是 URL。
我们必须等待网页完全加载后才能开始信息抓取。这时候我们使用:(从这里开始,所有的代码都需要写在With代码块中)
While .ReadyState 4 Or .Busy
DoEvents
Wend
Busy 是网页的繁忙状态,ReadyState 是 HTTP 的五种就绪状态,对应如下:
2、获取信息
我们先抓取页面上的所有内容,稍后过滤掉有用的部分,然后慢慢添加条件进行抓取。
Set dmt = .Document
For i = 0 To dmt.all.Length - 1
Set htMent = dmt.all(i)
With ActiveSheet
.Cells(i + 2, "A") = htMent.tagName
.Cells(i + 2, "B") = TypeName(htMent)
.Cells(i + 2, "C") = htMent.ID
.Cells(i + 2, "D") = htMent.Name
.Cells(i + 2, "E") = htMent.Value
.Cells(i + 2, "F") = htMent.Text
.Cells(i + 2, "G") = htMent.innerText
End With
Next i
这段代码有点类似于JS,需要从IE.Document.all中找出页面上的所有节点。还有其他几种方法:
这些更方便使用,帮助在抓取所有页面内容后过滤有效信息。当然 all 最好用,因为 all 也有 all ("IDName") 和 all.IDName 用法。
以上代码部分返回的属性值都是基本的HTML内容,就不一一解释了。
3、填写信息
当然,网络爬虫神器还是Python。大多数人使用Excel自动填写页面内容,直接将表单提交到网页,省去了问卷录入等大量工作。抓取页面内容后,填充起来就更容易了。你只需要直接给页面标签的Value属性赋值即可。
但是,除了文本框,可能还有其他没有Value的标签,比如下拉菜单和单选按钮。给这些内容赋值需要一些基本的HTML知识。
'下拉菜单选择
.all("select")(0).Selected = True
'单选按钮选择
.all("radio").Checked = True
'复选按钮选择
.all("checkbox").Checked = True
下拉菜单是一个select标签,每个选项都在一个option标签中,所以要返回一个set,需要选择一个option将对应的Selected属性修改为True。单选按钮和复选按钮都是输入标签。不同的是类型分别是radio和checkbox。选择一个选项,需要修改对应的Checked属性。
三、数据接口
有时我们可以直接获取一些 API。当然,通过API返回数据比打开网页更方便快捷,使用的方法也有些不同。
1、Request 接口
比如我得到了一个可以从网上查询到城市免费WIFI的API,我用下面的代码通过Excel界面访问:(虽然是免费的,但我还是隐藏了我的AppKey,以便避免麻烦)
Dim http
Set http = CreateObject("Microsoft.XMLHTTP")
http.Open "GET", "http://api.avatardata.cn/Wifi/QueryByCity", False
http.setRequestHeader "CONTENT-TYPE", "application/x-www-form-urlencoded"
http.send "key=[AppKey]&city=北京&page=1"
此时我们创建的对象不再是IE,而是HTTP对象。这里使用的是ajax的Open方法,GET为数据发送方法,第二个参数为接口地址,第三个参数指定请求方法是否异步。如果这个API有账号和密码,就写在第四个和第五个参数中。
setRequestHeader 是向接口发送一个HTTP协议头文件,最后发送的内容就是接口参数。当然,这个QueryString也可以直接写在URL中,发送一个空字符串即可。
2、interface 返回
接口返回和获取的方式很简单:
If http.Status = 200 Then Range("A1").Value = http.responseText
excel vba 网页数据抓取(GAsheet的数据维度数据获取的解决思路及方法)
网站优化 • 优采云 发表了文章 • 0 个评论 • 154 次浏览 • 2021-09-13 09:15
excel vba 网页数据抓取(GAsheet的数据维度数据获取的解决思路及方法)
项目背景
每月需要从GA工具下载固定的原创数据(分为几个表格,报告不同维度的数据,比如不同渠道的流量、不同页面内容的流量、不同渠道的转化指标和页面内容),然后进行数据清洗和排序(例如,不规则的跟踪代码需要替换为正常的跟踪代码,冗长的页面URL需要替换为标准的统一产品名称)
最后进行分类统计,可视化,(按不同维度划分,进行月度趋势分析)
当前的挑战
每月手动提取数据。频率太低。我们需要更频繁地查看数据变化的趋势,例如每天而不是每月,并结合我们的行动提供及时的反馈和响应
同时,从GA的不同子报表下载数据需要很多时间,也会出错。我们希望减少花费在人工和错误上的时间。
节省报告时间并花更多时间分析数据和实施优化建议
当前的解决方案思路
主要来说,我们的计划分为三个步骤,
本文主要讲解数据采集自动化的实施方案
获取GA数据一般有3种方式
用账号密码登录,进入配置好的自定义报告下载
使用第3方工具配置参数下载(例如google sheet插件)
使用脚本(google sheet脚本,get python or excel VBA or PHP)通过谷歌API下载
这里唯一可以自动化的是后两者。使用google sheet插件等第三方工具是最方便的。无需编写代码,只需点击按钮即可完成数据。
以下内容主要介绍使用google sheet插件完成自动数据采集
我们要自动去GA数据库获取我们需要的数据,而不是每次都通过扶梯手动下载,并且我们要在自动获取数据后对数据进行自动清理和分类,并自动实现制图,并且最好按以天为单位自动显示实时数据,而不是每个月等待手动完成
最有效的方法是在GA自定义报表中拖拽测试数据维度
以其中一种raw3形式为例
可以看到里面收录了一些数据,每个页面的主要表现
页面名称为page,指标为session等
点击编辑表单查看
度量和维度相互对应
记住以上维度和指标
现在我们使用谷歌表格来获取这些数据
打开谷歌工作表并创建一个新工作表
名称是 GA 报告 testing0603
点击导航栏中的 add-on 安装一个名为 google analytics 的插件
安装后,google sheet会增加一个新建报告按钮
在弹出的对话框中输入报告的名称。该名称也是以后放置数据的工作表的名称。
帐户、媒体资源和视图选项与您的 GA 帐户设置一致
您可以点击Ga查看您的账户和属性以及查看名称以了解选择
维度和指标的设置请参考GA报告
设置完毕。
其中一个特别是关于目标设定
完成数和转化率
我们改用goalx 完成
这是最后一个
我们需要把这里的XX都改成7
ga:goalXXCompletions,ga:goalXXConversionRate
替换
ga:goal7Completions,ga:goal7ConversionRate
关于
metric、order、filter的设置请参考以下网址介绍
同样,您可以制作一个 raw1 报告
真诚地,我们可以将数据从 GA 导出到 Google Sheet,
最后使用插件的schedule功能定时运行 查看全部
项目背景
每月需要从GA工具下载固定的原创数据(分为几个表格,报告不同维度的数据,比如不同渠道的流量、不同页面内容的流量、不同渠道的转化指标和页面内容),然后进行数据清洗和排序(例如,不规则的跟踪代码需要替换为正常的跟踪代码,冗长的页面URL需要替换为标准的统一产品名称)
最后进行分类统计,可视化,(按不同维度划分,进行月度趋势分析)
当前的挑战
每月手动提取数据。频率太低。我们需要更频繁地查看数据变化的趋势,例如每天而不是每月,并结合我们的行动提供及时的反馈和响应
同时,从GA的不同子报表下载数据需要很多时间,也会出错。我们希望减少花费在人工和错误上的时间。
节省报告时间并花更多时间分析数据和实施优化建议
当前的解决方案思路
主要来说,我们的计划分为三个步骤,
本文主要讲解数据采集自动化的实施方案
获取GA数据一般有3种方式
用账号密码登录,进入配置好的自定义报告下载
使用第3方工具配置参数下载(例如google sheet插件)
使用脚本(google sheet脚本,get python or excel VBA or PHP)通过谷歌API下载
这里唯一可以自动化的是后两者。使用google sheet插件等第三方工具是最方便的。无需编写代码,只需点击按钮即可完成数据。
以下内容主要介绍使用google sheet插件完成自动数据采集
我们要自动去GA数据库获取我们需要的数据,而不是每次都通过扶梯手动下载,并且我们要在自动获取数据后对数据进行自动清理和分类,并自动实现制图,并且最好按以天为单位自动显示实时数据,而不是每个月等待手动完成
最有效的方法是在GA自定义报表中拖拽测试数据维度
以其中一种raw3形式为例
可以看到里面收录了一些数据,每个页面的主要表现
页面名称为page,指标为session等
点击编辑表单查看
度量和维度相互对应
记住以上维度和指标
现在我们使用谷歌表格来获取这些数据
打开谷歌工作表并创建一个新工作表
名称是 GA 报告 testing0603
点击导航栏中的 add-on 安装一个名为 google analytics 的插件
安装后,google sheet会增加一个新建报告按钮
在弹出的对话框中输入报告的名称。该名称也是以后放置数据的工作表的名称。
帐户、媒体资源和视图选项与您的 GA 帐户设置一致
您可以点击Ga查看您的账户和属性以及查看名称以了解选择
维度和指标的设置请参考GA报告
设置完毕。
其中一个特别是关于目标设定
完成数和转化率
我们改用goalx 完成
这是最后一个
我们需要把这里的XX都改成7
ga:goalXXCompletions,ga:goalXXConversionRate
替换
ga:goal7Completions,ga:goal7ConversionRate
关于
metric、order、filter的设置请参考以下网址介绍
同样,您可以制作一个 raw1 报告
真诚地,我们可以将数据从 GA 导出到 Google Sheet,
最后使用插件的schedule功能定时运行 查看全部
excel vba 网页数据抓取(GAsheet的数据维度数据获取的解决思路及方法)
项目背景
每月需要从GA工具下载固定的原创数据(分为几个表格,报告不同维度的数据,比如不同渠道的流量、不同页面内容的流量、不同渠道的转化指标和页面内容),然后进行数据清洗和排序(例如,不规则的跟踪代码需要替换为正常的跟踪代码,冗长的页面URL需要替换为标准的统一产品名称)
最后进行分类统计,可视化,(按不同维度划分,进行月度趋势分析)
当前的挑战
每月手动提取数据。频率太低。我们需要更频繁地查看数据变化的趋势,例如每天而不是每月,并结合我们的行动提供及时的反馈和响应
同时,从GA的不同子报表下载数据需要很多时间,也会出错。我们希望减少花费在人工和错误上的时间。
节省报告时间并花更多时间分析数据和实施优化建议
当前的解决方案思路
主要来说,我们的计划分为三个步骤,
本文主要讲解数据采集自动化的实施方案
获取GA数据一般有3种方式
用账号密码登录,进入配置好的自定义报告下载
使用第3方工具配置参数下载(例如google sheet插件)
使用脚本(google sheet脚本,get python or excel VBA or PHP)通过谷歌API下载
这里唯一可以自动化的是后两者。使用google sheet插件等第三方工具是最方便的。无需编写代码,只需点击按钮即可完成数据。
以下内容主要介绍使用google sheet插件完成自动数据采集
我们要自动去GA数据库获取我们需要的数据,而不是每次都通过扶梯手动下载,并且我们要在自动获取数据后对数据进行自动清理和分类,并自动实现制图,并且最好按以天为单位自动显示实时数据,而不是每个月等待手动完成
最有效的方法是在GA自定义报表中拖拽测试数据维度
以其中一种raw3形式为例
可以看到里面收录了一些数据,每个页面的主要表现
页面名称为page,指标为session等
点击编辑表单查看
度量和维度相互对应
记住以上维度和指标
现在我们使用谷歌表格来获取这些数据
打开谷歌工作表并创建一个新工作表
名称是 GA 报告 testing0603
点击导航栏中的 add-on 安装一个名为 google analytics 的插件
安装后,google sheet会增加一个新建报告按钮
在弹出的对话框中输入报告的名称。该名称也是以后放置数据的工作表的名称。
帐户、媒体资源和视图选项与您的 GA 帐户设置一致
您可以点击Ga查看您的账户和属性以及查看名称以了解选择
维度和指标的设置请参考GA报告
设置完毕。
其中一个特别是关于目标设定
完成数和转化率
我们改用goalx 完成
这是最后一个
我们需要把这里的XX都改成7
ga:goalXXCompletions,ga:goalXXConversionRate
替换
ga:goal7Completions,ga:goal7ConversionRate
关于
metric、order、filter的设置请参考以下网址介绍
同样,您可以制作一个 raw1 报告
真诚地,我们可以将数据从 GA 导出到 Google Sheet,
最后使用插件的schedule功能定时运行
excel vba 网页数据抓取(Java自定义抓取方式(6)-上海怡诺唐咨询)
网站优化 • 优采云 发表了文章 • 0 个评论 • 223 次浏览 • 2021-09-13 05:09
excel vba 网页数据抓取(Java自定义抓取方式(6)-上海怡诺唐咨询)
自定义爬取方法包括“从页面中提取数据”、“从浏览器中提取数据”和“生成数据”三部分。
1、从页面中提取数据
(1)抓取元素的指定属性值:先选择InnerHtml和OuterHtml检查要提取的属性值是否存在,然后选择捕获元素的指定属性值。比如在流行的源码,id,class,href是A标签的属性,在下拉选项中选择要提取的属性名称,提取该属性的属性值,演示如下:
(2)Grab text:提取网页显示的内容,可见的文字信息。
(3)Capture 地址:一般用于抓取图片地址或Iframe地址。首先字段的Xpath定位IMG标签或Iframe标签,提取src属性值。
(4)抓取选中项的文本:尝试用圆形下拉框提取当前选中项的文本
(5)抓取该元素的OuterHtml和InnerHtml:提取网页源代码
(6)抓取取值:一般用于抓取输入框内的文本。首先字段的Xpath定位输入标签,提取取值值。演示如下:
(7)抢超链接:首先,字段的Xpath定位A标签,从A标签中提取href的属性值,演示如下:
2、从浏览器中提取数据
(1)page URL:同添加其他特殊字段爬取当前页面URL效果
(2)page title: 同添加其他特殊字段抓取当前页面的标题效果
(从页面源码中抓取的3):在网页源码中可以直接使用正则表达式提取匹配的数据
3、生成数据
(1) 生成定值:同添加其他特殊字段生成定值效果,常用于设置发帖到网站时发帖的用户名、发帖到版块等固定字段
(2)使用当前时间:同添加其他特殊字段使用当前时间效果,用于记录采集时间,此设置可能导致优采云采集器去重功能检测失败 查看全部
自定义爬取方法包括“从页面中提取数据”、“从浏览器中提取数据”和“生成数据”三部分。
1、从页面中提取数据
(1)抓取元素的指定属性值:先选择InnerHtml和OuterHtml检查要提取的属性值是否存在,然后选择捕获元素的指定属性值。比如在流行的源码,id,class,href是A标签的属性,在下拉选项中选择要提取的属性名称,提取该属性的属性值,演示如下:
(2)Grab text:提取网页显示的内容,可见的文字信息。
(3)Capture 地址:一般用于抓取图片地址或Iframe地址。首先字段的Xpath定位IMG标签或Iframe标签,提取src属性值。
(4)抓取选中项的文本:尝试用圆形下拉框提取当前选中项的文本
(5)抓取该元素的OuterHtml和InnerHtml:提取网页源代码
(6)抓取取值:一般用于抓取输入框内的文本。首先字段的Xpath定位输入标签,提取取值值。演示如下:
(7)抢超链接:首先,字段的Xpath定位A标签,从A标签中提取href的属性值,演示如下:
2、从浏览器中提取数据
(1)page URL:同添加其他特殊字段爬取当前页面URL效果
(2)page title: 同添加其他特殊字段抓取当前页面的标题效果
(从页面源码中抓取的3):在网页源码中可以直接使用正则表达式提取匹配的数据
3、生成数据
(1) 生成定值:同添加其他特殊字段生成定值效果,常用于设置发帖到网站时发帖的用户名、发帖到版块等固定字段
(2)使用当前时间:同添加其他特殊字段使用当前时间效果,用于记录采集时间,此设置可能导致优采云采集器去重功能检测失败 查看全部
excel vba 网页数据抓取(Java自定义抓取方式(6)-上海怡诺唐咨询)
自定义爬取方法包括“从页面中提取数据”、“从浏览器中提取数据”和“生成数据”三部分。
1、从页面中提取数据

(1)抓取元素的指定属性值:先选择InnerHtml和OuterHtml检查要提取的属性值是否存在,然后选择捕获元素的指定属性值。比如在流行的源码,id,class,href是A标签的属性,在下拉选项中选择要提取的属性名称,提取该属性的属性值,演示如下:

(2)Grab text:提取网页显示的内容,可见的文字信息。
(3)Capture 地址:一般用于抓取图片地址或Iframe地址。首先字段的Xpath定位IMG标签或Iframe标签,提取src属性值。
(4)抓取选中项的文本:尝试用圆形下拉框提取当前选中项的文本
(5)抓取该元素的OuterHtml和InnerHtml:提取网页源代码
(6)抓取取值:一般用于抓取输入框内的文本。首先字段的Xpath定位输入标签,提取取值值。演示如下:

(7)抢超链接:首先,字段的Xpath定位A标签,从A标签中提取href的属性值,演示如下:

2、从浏览器中提取数据

(1)page URL:同添加其他特殊字段爬取当前页面URL效果
(2)page title: 同添加其他特殊字段抓取当前页面的标题效果
(从页面源码中抓取的3):在网页源码中可以直接使用正则表达式提取匹配的数据
3、生成数据

(1) 生成定值:同添加其他特殊字段生成定值效果,常用于设置发帖到网站时发帖的用户名、发帖到版块等固定字段
(2)使用当前时间:同添加其他特殊字段使用当前时间效果,用于记录采集时间,此设置可能导致优采云采集器去重功能检测失败
excel vba 网页数据抓取(VBA基础的人来说不可能解决问题,我也不想把私信变成聊天窗 )
网站优化 • 优采云 发表了文章 • 0 个评论 • 138 次浏览 • 2021-09-09 18:01
excel vba 网页数据抓取(VBA基础的人来说不可能解决问题,我也不想把私信变成聊天窗
)
因为知乎的一些回答,最近总有私信问我怎么用VBA抓网,我基本没有回复。因为这个问题太大了,有基础知识的人其实很容易自己在百度或者ExcelHome论坛上找到答案。不需要我说什么。对于没有基础知识的人来说,是不可能三言两语解决问题的。我不想把私信变成聊天窗口。借知乎open 专栏的机会,来仔细解释一下这个问题。
我对Excel和VBA的了解有限,只能解决我遇到的一些问题,不一定适用于所有场景。以下内容基于对VBA基本用法和HTML语言知识的了解:
一、前期准备
据我所知,VBA 不能操作任何浏览器和网页。我们所能做的就是在IE上执行一些操作,是的,只有IE。不要告诉我电脑上没有IE,所以你可以退出Sub。就像在Python中导入,在C#中使用一样,VBA也需要引用一些库来操作IE,不过好在它是微软的产品,所以我们可以轻松使用VBA自带的一些库。
我们需要做的第一件事是在 VBA 中引用 Micorsoft Internet Controls,我们知道这个名字是用来帮助我们控制 IE 页面的。
二、网页操作
引用 Micorsoft Internet Controls 后,我们可以对页面做任何我们想做的事情,但我们需要主页上的页面,上帝说我们需要一个页面!
1、打开网页
我们以百度搜索“Chahu”关键词为例:
With CreateObject("internetexplorer.application")
.Visible = True
.Navigate "https://www.baidu.com/s?wd=扯乎"
'关闭网页
' .Quit
End With
代码很简单,先创建一个IE对象,然后给一些属性赋值。 Visible就是可见性,是指网页被操作时是否会看到网页。熟练后可以设置为False,这样不仅让程序在运行时有一种神秘感(而不是),而且速度也快了一点。
但有一点要记住,这个网页在我们打开后并没有关闭,这意味着程序结束后需要手动关闭它。如果网页不可见,则无法手动关闭。代码中的注释部分用于关闭网页。不用说,导航就是 URL。
我们必须等待网页完全加载后才能开始信息抓取。这时候我们使用:(从这里开始,所有的代码都需要写在With代码块中)
While .ReadyState 4 Or .Busy
DoEvents
Wend
Busy 是网页的繁忙状态,ReadyState 是 HTTP 的五种就绪状态,对应如下:
2、获取信息
我们先抓取页面上的所有内容,稍后过滤掉有用的部分,然后慢慢添加条件进行抓取。
Set dmt = .Document
For i = 0 To dmt.all.Length - 1
Set htMent = dmt.all(i)
With ActiveSheet
.Cells(i + 2, "A") = htMent.tagName
.Cells(i + 2, "B") = TypeName(htMent)
.Cells(i + 2, "C") = htMent.ID
.Cells(i + 2, "D") = htMent.Name
.Cells(i + 2, "E") = htMent.Value
.Cells(i + 2, "F") = htMent.Text
.Cells(i + 2, "G") = htMent.innerText
End With
Next i
这段代码有点类似于JS,需要从IE.Document.all中找出页面上的所有节点。还有其他几种方法:
这些更方便使用,帮助在抓取所有页面内容后过滤有效信息。当然 all 最好用,因为 all 也有 all ("IDName") 和 all.IDName 用法。
以上代码部分返回的属性值都是基本的HTML内容,就不一一解释了。
3、填写信息
当然,网络爬虫神器还是Python。大多数人使用Excel自动填写页面内容,直接将表单提交到网页,省去了问卷录入等大量工作。抓取页面内容后,填充起来就更容易了。你只需要直接给页面标签的Value属性赋值即可。
但是,除了文本框,可能还有其他没有Value的标签,比如下拉菜单和单选按钮。给这些内容赋值需要一些基本的HTML知识。
'下拉菜单选择
.all("select")(0).Selected = True
'单选按钮选择
.all("radio").Checked = True
'复选按钮选择
.all("checkbox").Checked = True
下拉菜单是一个select标签,每个选项都在一个option标签中,所以要返回一个set,需要选择一个option将对应的Selected属性修改为True。单选按钮和复选按钮都是输入标签。不同的是类型分别是radio和checkbox。选择一个选项,需要修改对应的Checked属性。
三、数据接口
有时我们可以直接获取一些 API。当然,通过API返回数据比打开网页更方便快捷,使用的方法也有些不同。
1、Request 接口
比如我得到了一个可以从网上查询到城市免费WIFI的API,我用下面的代码通过Excel界面访问:(虽然是免费的,但我还是隐藏了我的AppKey,以便避免麻烦)
Dim http
Set http = CreateObject("Microsoft.XMLHTTP")
http.Open "GET", "http://api.avatardata.cn/Wifi/QueryByCity", False
http.setRequestHeader "CONTENT-TYPE", "application/x-www-form-urlencoded"
http.send "key=[AppKey]&city=北京&page=1"
此时我们创建的对象不再是IE,而是HTTP对象。这里使用的是ajax的Open方法,GET为数据发送方法,第二个参数为接口地址,第三个参数指定请求方法是否异步。如果这个API有账号和密码,就写在第四个和第五个参数中。
setRequestHeader 是向接口发送一个HTTP协议头文件,最后发送的内容就是接口参数。当然,这个QueryString也可以直接写在URL中,发送一个空字符串即可。
2、interface 返回
接口返回和获取的方式很简单:
If http.Status = 200 Then Range("A1").Value = http.responseText 查看全部
)
因为知乎的一些回答,最近总有私信问我怎么用VBA抓网,我基本没有回复。因为这个问题太大了,有基础知识的人其实很容易自己在百度或者ExcelHome论坛上找到答案。不需要我说什么。对于没有基础知识的人来说,是不可能三言两语解决问题的。我不想把私信变成聊天窗口。借知乎open 专栏的机会,来仔细解释一下这个问题。
我对Excel和VBA的了解有限,只能解决我遇到的一些问题,不一定适用于所有场景。以下内容基于对VBA基本用法和HTML语言知识的了解:
一、前期准备
据我所知,VBA 不能操作任何浏览器和网页。我们所能做的就是在IE上执行一些操作,是的,只有IE。不要告诉我电脑上没有IE,所以你可以退出Sub。就像在Python中导入,在C#中使用一样,VBA也需要引用一些库来操作IE,不过好在它是微软的产品,所以我们可以轻松使用VBA自带的一些库。
我们需要做的第一件事是在 VBA 中引用 Micorsoft Internet Controls,我们知道这个名字是用来帮助我们控制 IE 页面的。
二、网页操作
引用 Micorsoft Internet Controls 后,我们可以对页面做任何我们想做的事情,但我们需要主页上的页面,上帝说我们需要一个页面!
1、打开网页
我们以百度搜索“Chahu”关键词为例:
With CreateObject("internetexplorer.application")
.Visible = True
.Navigate "https://www.baidu.com/s?wd=扯乎"
'关闭网页
' .Quit
End With
代码很简单,先创建一个IE对象,然后给一些属性赋值。 Visible就是可见性,是指网页被操作时是否会看到网页。熟练后可以设置为False,这样不仅让程序在运行时有一种神秘感(而不是),而且速度也快了一点。
但有一点要记住,这个网页在我们打开后并没有关闭,这意味着程序结束后需要手动关闭它。如果网页不可见,则无法手动关闭。代码中的注释部分用于关闭网页。不用说,导航就是 URL。
我们必须等待网页完全加载后才能开始信息抓取。这时候我们使用:(从这里开始,所有的代码都需要写在With代码块中)
While .ReadyState 4 Or .Busy
DoEvents
Wend
Busy 是网页的繁忙状态,ReadyState 是 HTTP 的五种就绪状态,对应如下:
2、获取信息
我们先抓取页面上的所有内容,稍后过滤掉有用的部分,然后慢慢添加条件进行抓取。
Set dmt = .Document
For i = 0 To dmt.all.Length - 1
Set htMent = dmt.all(i)
With ActiveSheet
.Cells(i + 2, "A") = htMent.tagName
.Cells(i + 2, "B") = TypeName(htMent)
.Cells(i + 2, "C") = htMent.ID
.Cells(i + 2, "D") = htMent.Name
.Cells(i + 2, "E") = htMent.Value
.Cells(i + 2, "F") = htMent.Text
.Cells(i + 2, "G") = htMent.innerText
End With
Next i
这段代码有点类似于JS,需要从IE.Document.all中找出页面上的所有节点。还有其他几种方法:
这些更方便使用,帮助在抓取所有页面内容后过滤有效信息。当然 all 最好用,因为 all 也有 all ("IDName") 和 all.IDName 用法。
以上代码部分返回的属性值都是基本的HTML内容,就不一一解释了。
3、填写信息
当然,网络爬虫神器还是Python。大多数人使用Excel自动填写页面内容,直接将表单提交到网页,省去了问卷录入等大量工作。抓取页面内容后,填充起来就更容易了。你只需要直接给页面标签的Value属性赋值即可。
但是,除了文本框,可能还有其他没有Value的标签,比如下拉菜单和单选按钮。给这些内容赋值需要一些基本的HTML知识。
'下拉菜单选择
.all("select")(0).Selected = True
'单选按钮选择
.all("radio").Checked = True
'复选按钮选择
.all("checkbox").Checked = True
下拉菜单是一个select标签,每个选项都在一个option标签中,所以要返回一个set,需要选择一个option将对应的Selected属性修改为True。单选按钮和复选按钮都是输入标签。不同的是类型分别是radio和checkbox。选择一个选项,需要修改对应的Checked属性。
三、数据接口
有时我们可以直接获取一些 API。当然,通过API返回数据比打开网页更方便快捷,使用的方法也有些不同。
1、Request 接口
比如我得到了一个可以从网上查询到城市免费WIFI的API,我用下面的代码通过Excel界面访问:(虽然是免费的,但我还是隐藏了我的AppKey,以便避免麻烦)
Dim http
Set http = CreateObject("Microsoft.XMLHTTP")
http.Open "GET", "http://api.avatardata.cn/Wifi/QueryByCity", False
http.setRequestHeader "CONTENT-TYPE", "application/x-www-form-urlencoded"
http.send "key=[AppKey]&city=北京&page=1"
此时我们创建的对象不再是IE,而是HTTP对象。这里使用的是ajax的Open方法,GET为数据发送方法,第二个参数为接口地址,第三个参数指定请求方法是否异步。如果这个API有账号和密码,就写在第四个和第五个参数中。
setRequestHeader 是向接口发送一个HTTP协议头文件,最后发送的内容就是接口参数。当然,这个QueryString也可以直接写在URL中,发送一个空字符串即可。
2、interface 返回
接口返回和获取的方式很简单:
If http.Status = 200 Then Range("A1").Value = http.responseText 查看全部
excel vba 网页数据抓取(VBA基础的人来说不可能解决问题,我也不想把私信变成聊天窗
)
因为知乎的一些回答,最近总有私信问我怎么用VBA抓网,我基本没有回复。因为这个问题太大了,有基础知识的人其实很容易自己在百度或者ExcelHome论坛上找到答案。不需要我说什么。对于没有基础知识的人来说,是不可能三言两语解决问题的。我不想把私信变成聊天窗口。借知乎open 专栏的机会,来仔细解释一下这个问题。
我对Excel和VBA的了解有限,只能解决我遇到的一些问题,不一定适用于所有场景。以下内容基于对VBA基本用法和HTML语言知识的了解:
一、前期准备
据我所知,VBA 不能操作任何浏览器和网页。我们所能做的就是在IE上执行一些操作,是的,只有IE。不要告诉我电脑上没有IE,所以你可以退出Sub。就像在Python中导入,在C#中使用一样,VBA也需要引用一些库来操作IE,不过好在它是微软的产品,所以我们可以轻松使用VBA自带的一些库。
我们需要做的第一件事是在 VBA 中引用 Micorsoft Internet Controls,我们知道这个名字是用来帮助我们控制 IE 页面的。
二、网页操作
引用 Micorsoft Internet Controls 后,我们可以对页面做任何我们想做的事情,但我们需要主页上的页面,上帝说我们需要一个页面!
1、打开网页
我们以百度搜索“Chahu”关键词为例:
With CreateObject("internetexplorer.application")
.Visible = True
.Navigate "https://www.baidu.com/s?wd=扯乎"
'关闭网页
' .Quit
End With
代码很简单,先创建一个IE对象,然后给一些属性赋值。 Visible就是可见性,是指网页被操作时是否会看到网页。熟练后可以设置为False,这样不仅让程序在运行时有一种神秘感(而不是),而且速度也快了一点。
但有一点要记住,这个网页在我们打开后并没有关闭,这意味着程序结束后需要手动关闭它。如果网页不可见,则无法手动关闭。代码中的注释部分用于关闭网页。不用说,导航就是 URL。
我们必须等待网页完全加载后才能开始信息抓取。这时候我们使用:(从这里开始,所有的代码都需要写在With代码块中)
While .ReadyState 4 Or .Busy
DoEvents
Wend
Busy 是网页的繁忙状态,ReadyState 是 HTTP 的五种就绪状态,对应如下:
2、获取信息
我们先抓取页面上的所有内容,稍后过滤掉有用的部分,然后慢慢添加条件进行抓取。
Set dmt = .Document
For i = 0 To dmt.all.Length - 1
Set htMent = dmt.all(i)
With ActiveSheet
.Cells(i + 2, "A") = htMent.tagName
.Cells(i + 2, "B") = TypeName(htMent)
.Cells(i + 2, "C") = htMent.ID
.Cells(i + 2, "D") = htMent.Name
.Cells(i + 2, "E") = htMent.Value
.Cells(i + 2, "F") = htMent.Text
.Cells(i + 2, "G") = htMent.innerText
End With
Next i
这段代码有点类似于JS,需要从IE.Document.all中找出页面上的所有节点。还有其他几种方法:
这些更方便使用,帮助在抓取所有页面内容后过滤有效信息。当然 all 最好用,因为 all 也有 all ("IDName") 和 all.IDName 用法。
以上代码部分返回的属性值都是基本的HTML内容,就不一一解释了。
3、填写信息
当然,网络爬虫神器还是Python。大多数人使用Excel自动填写页面内容,直接将表单提交到网页,省去了问卷录入等大量工作。抓取页面内容后,填充起来就更容易了。你只需要直接给页面标签的Value属性赋值即可。
但是,除了文本框,可能还有其他没有Value的标签,比如下拉菜单和单选按钮。给这些内容赋值需要一些基本的HTML知识。
'下拉菜单选择
.all("select")(0).Selected = True
'单选按钮选择
.all("radio").Checked = True
'复选按钮选择
.all("checkbox").Checked = True
下拉菜单是一个select标签,每个选项都在一个option标签中,所以要返回一个set,需要选择一个option将对应的Selected属性修改为True。单选按钮和复选按钮都是输入标签。不同的是类型分别是radio和checkbox。选择一个选项,需要修改对应的Checked属性。
三、数据接口
有时我们可以直接获取一些 API。当然,通过API返回数据比打开网页更方便快捷,使用的方法也有些不同。
1、Request 接口
比如我得到了一个可以从网上查询到城市免费WIFI的API,我用下面的代码通过Excel界面访问:(虽然是免费的,但我还是隐藏了我的AppKey,以便避免麻烦)
Dim http
Set http = CreateObject("Microsoft.XMLHTTP")
http.Open "GET", "http://api.avatardata.cn/Wifi/QueryByCity", False
http.setRequestHeader "CONTENT-TYPE", "application/x-www-form-urlencoded"
http.send "key=[AppKey]&city=北京&page=1"
此时我们创建的对象不再是IE,而是HTTP对象。这里使用的是ajax的Open方法,GET为数据发送方法,第二个参数为接口地址,第三个参数指定请求方法是否异步。如果这个API有账号和密码,就写在第四个和第五个参数中。
setRequestHeader 是向接口发送一个HTTP协议头文件,最后发送的内容就是接口参数。当然,这个QueryString也可以直接写在URL中,发送一个空字符串即可。
2、interface 返回
接口返回和获取的方式很简单:
If http.Status = 200 Then Range("A1").Value = http.responseText