
excelvba抓取网页数据
Excel批量下载图片,你会吗?
网站优化 • 优采云 发表了文章 • 0 个评论 • 208 次浏览 • 2022-09-01 23:23
昨天我们分享了如何使用ExcelVBA来抓取网页上的数据,今天我们来给大家送点福利,爱美之心人皆有之!
看到这些美女了吗?别以为小编无聊一个一个去下载的,这个都是Excel干!
不管我的事情!
让我们来看看Excel他到底干了啥!有这么多妹子~
成品效果演示
我们今天测试的网址:
下面我们进入正式的处理部分,这个网站应该是个人写的,猜测,编码用的gbk,所以还要转码,有点麻烦!不过不用慌,模仿懂不!
编码,我们可以查看源码中的charset,这些是html的一些基础知识,有兴趣慢慢补吧!
获取网页源码函数
一般我们获取的是网页的responseText即可,但是这个网页的编码是gbk,我们需要先获取 responsebody,再转码!
下载图片,我们要的是就是流数据,所以不需要转码,所以这个函数,我们还要分一下情况,所有有了第二参数来控制是否直接返回流数据!
下面是论坛大佬写的转码函数,非小编现写!
提取图片的链接
右击-【查看网页源码】,根据看到的关键词去查找,可以找到我们图片的链接!
这个比较简单,我们就通过正则来提取吧!
每个图片的网页都有一个5位数的编码,我们提取他,然后来拼接出实际网址!
其实在一级页面也可以直接下载图片 看到后面额jpg那个地址了吗!但是这个是预览图,不高清,所以我们要进入下载界面去下载高清图片!
下面是提取二级的代码,已封装函数,方便后面调用!
有了图片的网址和名称,后面我们只要写一个下载函数即可!
保存图片
流数据保存成图片或者文件,我们可以直接通过文本文件写入形式写入,也可以使用我们封装的这个函数来处理!
我们直接按照思路,依次调用封装好的各个函数,即可下载图片!
到这里其实就是我们的全部代码了,还有翻页自己去看一下网址规则,这里就不提供了,本文只是教学演示,大家喜欢妹子可以联系我打包下载,就别一起去下载了,服务器扛不住!
本文由“壹伴编辑器”提供技术支持不知道,今天你是否真的学废了!Excel学得好,美女真的少不了~
给你们偷了一张~~ 查看全部
Excel批量下载图片,你会吗?
昨天我们分享了如何使用ExcelVBA来抓取网页上的数据,今天我们来给大家送点福利,爱美之心人皆有之!
看到这些美女了吗?别以为小编无聊一个一个去下载的,这个都是Excel干!
不管我的事情!
让我们来看看Excel他到底干了啥!有这么多妹子~
成品效果演示
我们今天测试的网址:
下面我们进入正式的处理部分,这个网站应该是个人写的,猜测,编码用的gbk,所以还要转码,有点麻烦!不过不用慌,模仿懂不!
编码,我们可以查看源码中的charset,这些是html的一些基础知识,有兴趣慢慢补吧!

获取网页源码函数
一般我们获取的是网页的responseText即可,但是这个网页的编码是gbk,我们需要先获取 responsebody,再转码!
下载图片,我们要的是就是流数据,所以不需要转码,所以这个函数,我们还要分一下情况,所有有了第二参数来控制是否直接返回流数据!
下面是论坛大佬写的转码函数,非小编现写!
提取图片的链接
右击-【查看网页源码】,根据看到的关键词去查找,可以找到我们图片的链接!
这个比较简单,我们就通过正则来提取吧!
每个图片的网页都有一个5位数的编码,我们提取他,然后来拼接出实际网址!
其实在一级页面也可以直接下载图片 看到后面额jpg那个地址了吗!但是这个是预览图,不高清,所以我们要进入下载界面去下载高清图片!

下面是提取二级的代码,已封装函数,方便后面调用!
有了图片的网址和名称,后面我们只要写一个下载函数即可!
保存图片
流数据保存成图片或者文件,我们可以直接通过文本文件写入形式写入,也可以使用我们封装的这个函数来处理!
我们直接按照思路,依次调用封装好的各个函数,即可下载图片!
到这里其实就是我们的全部代码了,还有翻页自己去看一下网址规则,这里就不提供了,本文只是教学演示,大家喜欢妹子可以联系我打包下载,就别一起去下载了,服务器扛不住!
本文由“壹伴编辑器”提供技术支持不知道,今天你是否真的学废了!Excel学得好,美女真的少不了~
给你们偷了一张~~
Excel VBA代码打开网页,别担心,您只需1行代码即可
网站优化 • 优采云 发表了文章 • 0 个评论 • 286 次浏览 • 2022-08-27 23:56
有些时候,我们在遇到需要随时抓取网页端的数据或者需要打开某个指定的网页,其实可以用VBA来完成这个。
本次完成这个打开指定的网页,我们只需要一句即可,如下所示的程序。代码过程使用FollowHyperlink方法打开Excel教案的主页。
程序执行的动画如下所示:
看起来代码是非常的简洁,但是你知道这个的语法吗?一起来看看吧!
FollowHyperlink的语法如下:
expression.FollowHyperlink(Address, SubAddress, NewWindow, AddHistory, ExtraInfo, Method, HeaderInfo)
第一个参数ression是必需的,可以理解为一个workbook对象。第二个参数Address是必需的,String类型,就是我们需要打开指定的网页地址。第三个参数SubAddress是可选的,目标网址中的位置,默认值为空字符串。第四个参数NewWindow是可选的,Variant类型,如果该值为True,则将目标应用程序显示到一个新窗口中。默认值为False。
这个的官方的解释如下所示:
这个的使用方法在我们抓取网页数据或者需要打开指定网页的时候,是经常用到的。所以今天之所以说这个,是因为有网页给我留言,如何用VBA打开指定网页,所以写出来和大家分享一下。每天一个小知识点,你会进步一大步。
如果有不明白的或者不懂的可以在下方留言,我们会一一解答的。
我是Excel教案,关注我持续分享更多的Excel技巧!
查看全部
Excel VBA代码打开网页,别担心,您只需1行代码即可
有些时候,我们在遇到需要随时抓取网页端的数据或者需要打开某个指定的网页,其实可以用VBA来完成这个。
本次完成这个打开指定的网页,我们只需要一句即可,如下所示的程序。代码过程使用FollowHyperlink方法打开Excel教案的主页。
程序执行的动画如下所示:

看起来代码是非常的简洁,但是你知道这个的语法吗?一起来看看吧!
FollowHyperlink的语法如下:
expression.FollowHyperlink(Address, SubAddress, NewWindow, AddHistory, ExtraInfo, Method, HeaderInfo)
第一个参数ression是必需的,可以理解为一个workbook对象。第二个参数Address是必需的,String类型,就是我们需要打开指定的网页地址。第三个参数SubAddress是可选的,目标网址中的位置,默认值为空字符串。第四个参数NewWindow是可选的,Variant类型,如果该值为True,则将目标应用程序显示到一个新窗口中。默认值为False。

这个的官方的解释如下所示:
这个的使用方法在我们抓取网页数据或者需要打开指定网页的时候,是经常用到的。所以今天之所以说这个,是因为有网页给我留言,如何用VBA打开指定网页,所以写出来和大家分享一下。每天一个小知识点,你会进步一大步。
如果有不明白的或者不懂的可以在下方留言,我们会一一解答的。
我是Excel教案,关注我持续分享更多的Excel技巧!
用Excel来写个爬虫怎么样?
网站优化 • 优采云 发表了文章 • 0 个评论 • 87 次浏览 • 2022-08-05 04:50
大家好!我是啥子都不精通,但是懂一丢丢Excel的E精精!
不知道大家阅读到此文是什么时辰,我现在是夜深人静,安心码字的午夜!
今天我们来给大家分享一下,如何使用Excel来采集数据! 我们就以豆瓣读书TOP250为例吧(仅用于交流学习演示使用)!
网址:
实际翻页有变化,后面再唠!
今天我们采用的方式是VBA来处理,之前我们也分享过使用Power Query的方式!
感兴趣的,点击飞机票直达->【】
爬虫涉及的东西太多,今天我们尽力简单一下,只谈实操,不涉及过多理论!
今天我们要处理的是一个静态网页,所以不涉及分析ajax等乱七八糟的东西!
实现的效果预览
步骤01 | 获取网页对应的源码
网页采集需要获取一些请求头参数,我们可以直接按下F12,在【Network】 -【Doc】 对应的链接中 Headers 下面的 【Request Headers】 中找到!
我们简单写一个获取HTML源码的代码,获取到源码后,下一步就是处理源码!(网址和Referer批量抓取有变化)
通过Main函数调用,测试一下结果中是否有我们要的关键信息,比如红楼
返回了9570 非0 说明包含,当然我们也可以把这个结果写入txt,方便观察
步骤02 | 按照规则提取内容
提取内容,我们可以使用DOM结果xpath处理,也可以直接使用粗暴的正则,这里我们就正则吧!
>查看网页源码网页任意位置,右击 【查看网页源代码】,通过网页源码和网页实际显示内容的比对,我们可以分析是否是静态网页,同时如果使用正则提取,一定要根据这里来写!
查找关键信息,Ctrl+F 调出浏览器查询,输入红楼,可以看到对应的位置,
> 提取内容
我们要分析提取的内容结果!今天我们使用htmlfile对象提取内容对象的一些基本的东西学习参考:
我们直接来看代码(核心部分):根据网页的结构分析+htmlfile对象分析后所得!
一般来说还有一步就是存储数据,python等其他语言一般考虑存储到数据库(数据量大),在Excel中可以直接存储到Excel中!
步骤03 | 保存数据,写入Excel
只是简单的把数组内容写入单元格,一般我们可以根据实际需要对需要做一定的清洗后再写入,比如评分人数,我们只要数字等,这个大家自行处理即可,不是本文重点,这里就不再啰嗦处理!
完整代码(加一点细节):
本文由“壹伴编辑器”提供技术支
复制可自行使用:
'公众号:Excel办公实战'作者:E精精'功能:获取HTML源码(参数页码)'日期:20210504'------------------------------------------------------------------Function GetHTML(ByVal page As Long) Dim strText As String Dim StrURL As String StrURL = "https://book.douban.com/top250?start=" & page * 25 strRef = "https://book.douban.com/top250?start=" & _ Application.Min(0, page - 1) * 25 With CreateObject("WinHttp.WinHttpRequest.5.1") .Open "GET", StrURL, False '添加请求头 .setRequestHeader "Referer", strRef .Send strText = .responsetext GetHTML = strText End WithEnd Function<br />'公众号:Excel办公实战'作者:E精精'功能:使用htmlfile对象提取网页内容'日期:20210504'-----------------------------------------------------Function getDataByXpath(str_Html As String) Dim htmlfile As Object, DataTable As Object Dim arr(1 To 10000, 1 To 5) Set htmlfile = CreateObject("htmlfile") htmlfile.write str_Html '等在加载解析数据 DoEvents: DoEvents Set DataTable = htmlfile.getElementsByTagName("table") For Each eve In DataTable n = n + 1 'a/p/span标签 Set aNode = eve.getElementsByTagName("a") Set pNode = eve.getElementsByTagName("p") Set spanNode = eve.getElementsByTagName("span") bookName = aNode(1).innerText '书名 bookInfo = pNode(0).innerText '作者/出版社/日期/价格 score = spanNode(1).innerText '评分 pCount = spanNode(2).innerText '评分人数 If pNode.Length > 1 Then abstract = pNode(1).Children(0).innerText '概要 Else abstract = "" End If '打印预览数据 Debug.Print Join(Array(bookName, bookInfo, _ score, pCount, abstract), Chr(10)) Debug.Print String(30, "-") '写入数组 arr(n, 1) = bookName: arr(n, 2) = bookInfo arr(n, 3) = score: arr(n, 4) = pCount arr(n, 5) = abstract Next Dim maxRow As Long With Sheet1 maxRow = .Cells(Rows.Count, 1).End(3).Row + 1 .Range("A" & maxRow).Resize(n, 5) = arr End WithEnd Function<br />'主调用函数Sub Main() Dim strHtml As String With Sheet1 .Cells.Clear Title = [{"书名","作者等信息","评分","评分人数","概要"}] .Range("A1").Resize(1, 5) = Title End With For page = 0 To 9 strHtml = GetHTML(page) getDataByXpath strHtml NextEnd Sub<br /><br /><br />
一个完整的爬虫涉及到的知识有很多,不过简单的爬取模仿即可搞定!今天你学废了吗? 查看全部
用Excel来写个爬虫怎么样?
大家好!我是啥子都不精通,但是懂一丢丢Excel的E精精!
不知道大家阅读到此文是什么时辰,我现在是夜深人静,安心码字的午夜!
今天我们来给大家分享一下,如何使用Excel来采集数据! 我们就以豆瓣读书TOP250为例吧(仅用于交流学习演示使用)!
网址:
实际翻页有变化,后面再唠!
今天我们采用的方式是VBA来处理,之前我们也分享过使用Power Query的方式!
感兴趣的,点击飞机票直达->【】
爬虫涉及的东西太多,今天我们尽力简单一下,只谈实操,不涉及过多理论!
今天我们要处理的是一个静态网页,所以不涉及分析ajax等乱七八糟的东西!
实现的效果预览
步骤01 | 获取网页对应的源码
网页采集需要获取一些请求头参数,我们可以直接按下F12,在【Network】 -【Doc】 对应的链接中 Headers 下面的 【Request Headers】 中找到!

我们简单写一个获取HTML源码的代码,获取到源码后,下一步就是处理源码!(网址和Referer批量抓取有变化)
通过Main函数调用,测试一下结果中是否有我们要的关键信息,比如红楼
返回了9570 非0 说明包含,当然我们也可以把这个结果写入txt,方便观察
步骤02 | 按照规则提取内容
提取内容,我们可以使用DOM结果xpath处理,也可以直接使用粗暴的正则,这里我们就正则吧!
>查看网页源码网页任意位置,右击 【查看网页源代码】,通过网页源码和网页实际显示内容的比对,我们可以分析是否是静态网页,同时如果使用正则提取,一定要根据这里来写!
查找关键信息,Ctrl+F 调出浏览器查询,输入红楼,可以看到对应的位置,
> 提取内容
我们要分析提取的内容结果!今天我们使用htmlfile对象提取内容对象的一些基本的东西学习参考:
我们直接来看代码(核心部分):根据网页的结构分析+htmlfile对象分析后所得!

一般来说还有一步就是存储数据,python等其他语言一般考虑存储到数据库(数据量大),在Excel中可以直接存储到Excel中!
步骤03 | 保存数据,写入Excel
只是简单的把数组内容写入单元格,一般我们可以根据实际需要对需要做一定的清洗后再写入,比如评分人数,我们只要数字等,这个大家自行处理即可,不是本文重点,这里就不再啰嗦处理!
完整代码(加一点细节):
本文由“壹伴编辑器”提供技术支
复制可自行使用:
'公众号:Excel办公实战'作者:E精精'功能:获取HTML源码(参数页码)'日期:20210504'------------------------------------------------------------------Function GetHTML(ByVal page As Long) Dim strText As String Dim StrURL As String StrURL = "https://book.douban.com/top250?start=" & page * 25 strRef = "https://book.douban.com/top250?start=" & _ Application.Min(0, page - 1) * 25 With CreateObject("WinHttp.WinHttpRequest.5.1") .Open "GET", StrURL, False '添加请求头 .setRequestHeader "Referer", strRef .Send strText = .responsetext GetHTML = strText End WithEnd Function<br />'公众号:Excel办公实战'作者:E精精'功能:使用htmlfile对象提取网页内容'日期:20210504'-----------------------------------------------------Function getDataByXpath(str_Html As String) Dim htmlfile As Object, DataTable As Object Dim arr(1 To 10000, 1 To 5) Set htmlfile = CreateObject("htmlfile") htmlfile.write str_Html '等在加载解析数据 DoEvents: DoEvents Set DataTable = htmlfile.getElementsByTagName("table") For Each eve In DataTable n = n + 1 'a/p/span标签 Set aNode = eve.getElementsByTagName("a") Set pNode = eve.getElementsByTagName("p") Set spanNode = eve.getElementsByTagName("span") bookName = aNode(1).innerText '书名 bookInfo = pNode(0).innerText '作者/出版社/日期/价格 score = spanNode(1).innerText '评分 pCount = spanNode(2).innerText '评分人数 If pNode.Length > 1 Then abstract = pNode(1).Children(0).innerText '概要 Else abstract = "" End If '打印预览数据 Debug.Print Join(Array(bookName, bookInfo, _ score, pCount, abstract), Chr(10)) Debug.Print String(30, "-") '写入数组 arr(n, 1) = bookName: arr(n, 2) = bookInfo arr(n, 3) = score: arr(n, 4) = pCount arr(n, 5) = abstract Next Dim maxRow As Long With Sheet1 maxRow = .Cells(Rows.Count, 1).End(3).Row + 1 .Range("A" & maxRow).Resize(n, 5) = arr End WithEnd Function<br />'主调用函数Sub Main() Dim strHtml As String With Sheet1 .Cells.Clear Title = [{"书名","作者等信息","评分","评分人数","概要"}] .Range("A1").Resize(1, 5) = Title End With For page = 0 To 9 strHtml = GetHTML(page) getDataByXpath strHtml NextEnd Sub<br /><br /><br />
一个完整的爬虫涉及到的知识有很多,不过简单的爬取模仿即可搞定!今天你学废了吗?
知乎人均985?Python爬50W数据,BI做出可视化后,我有了答案!
网站优化 • 优采云 发表了文章 • 0 个评论 • 79 次浏览 • 2022-06-18 10:47
一次完整的python数据分析流程是怎么样的?
使用python从网站抓取数据,并将这些数据保存到SQLite数据库中,然后对数据进行清洗,最后对数据进行数据可视化分析。
可是熟悉的人应该知道,python爬取简单,但是分析起来是很困难的,SQL语句、Pandas和Matplotlib这些十分繁琐,一般人也不会。
于是我想到了用一种更简单的方式进行数据分析,那就是python爬取+BI分析。什么是BI就不用我多做介绍了吧,python强大的数据获取能力,配合敏捷BI简单快捷的数据可视化操作,分析效果那肯定是杠杠的!
那这次我们就来看看“人均985,年薪百万”的知乎背后,到底有什么秘密?话不多说,开爬!
一、我们想要哪些数据?
知乎用户的学校和公司肯定是首当其冲的,我想看看到底这些人是编的还是真的哈哈哈。
其次就是性别,职业,地理位置,活跃程度等,统统扒个遍。
二、爬取的过程
知乎现在改用https请求了,数据加密,但是问题不大,重要的是网页数据改动了,而且在请求时后台会对爬虫做一些判断,因此在每次请求是都需要加上request header,尽可能接近浏览器请求的样子。
得到列表页的源码后,你可以从其中获取到每个问题的链接:
每页有20个问题,所以你可以获得到20个问题的链接,之后就是对每个问题的处理:
能实现到这一步,剩下的就是循环、判断和一些细节了。
最终一部分的代码如下:
import requests <br />import pandas as pd <br />import time <br />headers={ <br /> 'authorization':'',#此处填写你自己的身份验证信息 <br /> 'User-Agent':''#此处填写你自己浏览器的User-Agent <br />} <br />user_data = [] <br />def get_user_data(page): <br /> for i in range(page):#翻页 <br /> url = 'https://www.zhihu.com/api/v4/members/excited-vczh/followees?include=data%5B*%5D.answer_count%2Carticles_count%2Cgender%2Cfollower_count%2Cis_followed%2Cis_following%2Cbadge%5B%3F(type%3Dbest_answerer)%5D.topics&offset={}&limit=20'.format(i*20) <br /> response = requests.get(url, headers=headers).json()['data'] <br /> user_data.extend(response) #把response数据添加进user_data <br /> print('正在爬取第%s页' % str(i+1)) <br /> time.sleep(1) #设置爬取网页的时间间隔为1秒 <br /> <br />if __name__ == '__main__': <br /> get_user_data(10) <br /> df = pd.DataFrame.from_dict(user_data)#以字典保存数据 <br /> df.to_csv('zhihu.csv',encoding='utf_8_sig')#保存到用户名为zhihu的csv文件中,encoding='utf_8_sig'参数是为了解决中文乱码的问题 <br /> print(df) <br />
更多源代码见文末!
在Python代码中我并没有采取线程池,而是采用了开起10个main()方法去抓取,即10个进程,历时4个小时,爬取了57w+数据。
三、用BI进行数据可视化分析
现在我们已经进行到最后一步用BI开始做数据可视化了,揭秘知乎的时刻就要到来了。
市面上的BI工具有很多种,国外的Tableau和国内的FineBI都是BI领域的领先者,但早就听说Tableau适合有基础的数据分析师,对于小白很不友好。再加上我前天偶然间看到了IDC的报告,发现帆软的市场占有率是第一,为了避免回炉重做,我选择了FineBI这款敏捷工具,事实证明,我的选择是对的。
首先在官网下载FineBI,虽说是企业级的数据分析平台,但是它对于个人是永久免费的,文末给大家准备了下载链接~
然后直接通过FineBI提供的数据配置端的功能,添加SQL数据集(或者直接添加表也行),查看和验证刚刚爬取并且入库的数据是否已经真正成功入库到MySQL中了。
忘了说,FineBI的一大特点就是自助分析。什么叫自助分析?就是我自己拖拖拽拽数据,就可以有和Matplotlib一样的效果,你也许还会想到Excel,但一般几万行的数据以上,excel基本就无能为力,很卡。但是FineBI处理大数据依然可以行云流水,效率高几十倍上百倍都有可能。
同时VBA有个致命弱点是,它只能基于excel内部进行自动化,其他方面就没办法了。
我在写这篇文章之前,分析过房价和销售额,特地把它做成了动图供大家参考:
四、知乎的数据可视化
FineBI的仪表板可自行拖拽调整组件位置,配上多种类型的柱状图、饼图、雷达图,数据可视化就是这么轻而易举,只有你想不到,没有它做不到。
1、哪个城市的知乎用户最多?
从云词图中我们可以看出,城市越繁华,知乎的用户人数就越多(文字越大,比重越大)。所以也可以看见北上广深四个一线城市处于最中心,新一线城市紧随其后,换句话说:知乎的人大部分在一线城市或者新一线城市,果然是见多识广!
再来看看具体的排名吧:
杭州处在第三名了,果然互联网的发源之地之一不是吹的,阿里网易起到了很大的作用,为什么这么说?等你看到职业就明白了。
2、他们都是哪些学校的?
你看看,你看看,这学历真的很高,谁说人均985都是吹的?
不过也不奇怪,知乎主打的就是高知识份子的聚集地,而且学生比起上班族,有更多的时间玩手机。
既然分析到学校了,我们肯定要来看看各个高校上玩知乎的男女比例:
不用我说你们就可以猜到,蓝色代表的是男生,女孩子要么在逛街,要么就在学习,低头玩手机的肯定是男孩子哈哈哈(虽然我也是男的)。
我们再来看看各地区有哪些高校是知乎重度用户,颜色越深代表该学校的知乎用户越多:
别说了,知乎人均985实锤了,我流下了羡慕的泪水,我想请问同学,是怎么做到玩和学习同时兼顾的?你如果教教我,我高考距离清华的录取分数线可能就更近一点了....
3、知乎的职业比例
除去学生之后,我们发现知乎的人都是....
产品经理最多,这是最近几年最火爆的职业吧,不过话说你的文档写好了?需求画好了?是不是知乎的页面交互你不太满意?不然还不去干活?
可以看到,除了一些互联网公司的常见职位外,教师和律师用户在知乎中也占据不小的比重。
我们再用一张热力图来观察知乎主流职业(前四名)在各个地区的分布情况,颜色越深,代表该职业在该地区的人数越多:
总结
我分析了这么多,不是想告诉你们知乎的用户到底怎么怎么样,而是想说如果想做数据分析,FineBI确实是一款很好用的工具,对个人和对企业都是这样。
当然了,上面才只是FineBI的冰山一角,更多的东西还得你们自己去探索。 查看全部
知乎人均985?Python爬50W数据,BI做出可视化后,我有了答案!
一次完整的python数据分析流程是怎么样的?
使用python从网站抓取数据,并将这些数据保存到SQLite数据库中,然后对数据进行清洗,最后对数据进行数据可视化分析。
可是熟悉的人应该知道,python爬取简单,但是分析起来是很困难的,SQL语句、Pandas和Matplotlib这些十分繁琐,一般人也不会。
于是我想到了用一种更简单的方式进行数据分析,那就是python爬取+BI分析。什么是BI就不用我多做介绍了吧,python强大的数据获取能力,配合敏捷BI简单快捷的数据可视化操作,分析效果那肯定是杠杠的!
那这次我们就来看看“人均985,年薪百万”的知乎背后,到底有什么秘密?话不多说,开爬!
一、我们想要哪些数据?
知乎用户的学校和公司肯定是首当其冲的,我想看看到底这些人是编的还是真的哈哈哈。
其次就是性别,职业,地理位置,活跃程度等,统统扒个遍。
二、爬取的过程
知乎现在改用https请求了,数据加密,但是问题不大,重要的是网页数据改动了,而且在请求时后台会对爬虫做一些判断,因此在每次请求是都需要加上request header,尽可能接近浏览器请求的样子。
得到列表页的源码后,你可以从其中获取到每个问题的链接:
每页有20个问题,所以你可以获得到20个问题的链接,之后就是对每个问题的处理:
能实现到这一步,剩下的就是循环、判断和一些细节了。
最终一部分的代码如下:
import requests <br />import pandas as pd <br />import time <br />headers={ <br /> 'authorization':'',#此处填写你自己的身份验证信息 <br /> 'User-Agent':''#此处填写你自己浏览器的User-Agent <br />} <br />user_data = [] <br />def get_user_data(page): <br /> for i in range(page):#翻页 <br /> url = 'https://www.zhihu.com/api/v4/members/excited-vczh/followees?include=data%5B*%5D.answer_count%2Carticles_count%2Cgender%2Cfollower_count%2Cis_followed%2Cis_following%2Cbadge%5B%3F(type%3Dbest_answerer)%5D.topics&offset={}&limit=20'.format(i*20) <br /> response = requests.get(url, headers=headers).json()['data'] <br /> user_data.extend(response) #把response数据添加进user_data <br /> print('正在爬取第%s页' % str(i+1)) <br /> time.sleep(1) #设置爬取网页的时间间隔为1秒 <br /> <br />if __name__ == '__main__': <br /> get_user_data(10) <br /> df = pd.DataFrame.from_dict(user_data)#以字典保存数据 <br /> df.to_csv('zhihu.csv',encoding='utf_8_sig')#保存到用户名为zhihu的csv文件中,encoding='utf_8_sig'参数是为了解决中文乱码的问题 <br /> print(df) <br />
更多源代码见文末!
在Python代码中我并没有采取线程池,而是采用了开起10个main()方法去抓取,即10个进程,历时4个小时,爬取了57w+数据。
三、用BI进行数据可视化分析
现在我们已经进行到最后一步用BI开始做数据可视化了,揭秘知乎的时刻就要到来了。
市面上的BI工具有很多种,国外的Tableau和国内的FineBI都是BI领域的领先者,但早就听说Tableau适合有基础的数据分析师,对于小白很不友好。再加上我前天偶然间看到了IDC的报告,发现帆软的市场占有率是第一,为了避免回炉重做,我选择了FineBI这款敏捷工具,事实证明,我的选择是对的。
首先在官网下载FineBI,虽说是企业级的数据分析平台,但是它对于个人是永久免费的,文末给大家准备了下载链接~
然后直接通过FineBI提供的数据配置端的功能,添加SQL数据集(或者直接添加表也行),查看和验证刚刚爬取并且入库的数据是否已经真正成功入库到MySQL中了。
忘了说,FineBI的一大特点就是自助分析。什么叫自助分析?就是我自己拖拖拽拽数据,就可以有和Matplotlib一样的效果,你也许还会想到Excel,但一般几万行的数据以上,excel基本就无能为力,很卡。但是FineBI处理大数据依然可以行云流水,效率高几十倍上百倍都有可能。
同时VBA有个致命弱点是,它只能基于excel内部进行自动化,其他方面就没办法了。
我在写这篇文章之前,分析过房价和销售额,特地把它做成了动图供大家参考:
四、知乎的数据可视化
FineBI的仪表板可自行拖拽调整组件位置,配上多种类型的柱状图、饼图、雷达图,数据可视化就是这么轻而易举,只有你想不到,没有它做不到。
1、哪个城市的知乎用户最多?
从云词图中我们可以看出,城市越繁华,知乎的用户人数就越多(文字越大,比重越大)。所以也可以看见北上广深四个一线城市处于最中心,新一线城市紧随其后,换句话说:知乎的人大部分在一线城市或者新一线城市,果然是见多识广!
再来看看具体的排名吧:
杭州处在第三名了,果然互联网的发源之地之一不是吹的,阿里网易起到了很大的作用,为什么这么说?等你看到职业就明白了。
2、他们都是哪些学校的?
你看看,你看看,这学历真的很高,谁说人均985都是吹的?
不过也不奇怪,知乎主打的就是高知识份子的聚集地,而且学生比起上班族,有更多的时间玩手机。
既然分析到学校了,我们肯定要来看看各个高校上玩知乎的男女比例:
不用我说你们就可以猜到,蓝色代表的是男生,女孩子要么在逛街,要么就在学习,低头玩手机的肯定是男孩子哈哈哈(虽然我也是男的)。
我们再来看看各地区有哪些高校是知乎重度用户,颜色越深代表该学校的知乎用户越多:
别说了,知乎人均985实锤了,我流下了羡慕的泪水,我想请问同学,是怎么做到玩和学习同时兼顾的?你如果教教我,我高考距离清华的录取分数线可能就更近一点了....
3、知乎的职业比例
除去学生之后,我们发现知乎的人都是....
产品经理最多,这是最近几年最火爆的职业吧,不过话说你的文档写好了?需求画好了?是不是知乎的页面交互你不太满意?不然还不去干活?
可以看到,除了一些互联网公司的常见职位外,教师和律师用户在知乎中也占据不小的比重。
我们再用一张热力图来观察知乎主流职业(前四名)在各个地区的分布情况,颜色越深,代表该职业在该地区的人数越多:
总结
我分析了这么多,不是想告诉你们知乎的用户到底怎么怎么样,而是想说如果想做数据分析,FineBI确实是一款很好用的工具,对个人和对企业都是这样。
当然了,上面才只是FineBI的冰山一角,更多的东西还得你们自己去探索。
Excel VBA实例(36) - 一键提取网页中的表格数据
网站优化 • 优采云 发表了文章 • 0 个评论 • 154 次浏览 • 2022-05-04 03:34
将永恒君的百宝箱设为星标精品文章第一时间读背景需求
先说一下问题背景:
这个网站可以查看到深圳各个区的空气质量信息,每个小时更新一次。
需求:把里面的表格信息快速提取并且保存。
Excel可以通过数据 – 自网站这个功能实现简单网页表格数据爬取,想必不少朋友都应该知道并且使用过。
这个方法对于一些简单的网页来说,还是很实用的。但是对于某些网页,就比如pm25.in,用上面的方法则会不太方便,如下图:
直接选中表格上方的√,无法导入。
而如果直接勾选整个页面的话,又会提取到除了表格之外的很多无用的信息。
效果演示
那么,这种情况呢,可以借助vba来灵活的解决这个问题。
先上效果:点击“更新”,直接提取表格信息
然后点击“保存汇总”,将该时刻提取到的信息保存到汇总表,方便后续使用。
核心代码
这整个过程其实不难,其中抓取表格数据最核心的功能代码就是下面这些,每一行代码的含义永恒君都标注在后面了。
如果要更换其他城市,只需要更改URL地址即可。
With Sheets(1).QueryTables.Add("URL;http://www.pm25.in/shenzhen", Range("A2")) '抓取网站网页地址<br /> .RefreshStyle = xlOverwriteCells '覆盖模式<br /> .WebFormatting = xlWebFormattingAll '包含全部格式<br /> .WebSelectionType = xlSpecifiedTables '指定table模式<br /> .WebTables = "1" '第1张table<br /> .Refresh False<br />End With<br />
之后的保存、汇总就是一些常规的vba代码了。
需要说明的是:这个代码只适用于,网页源代码中包含有表格数据的网页。
如果你对这个内容感兴趣的话,可以在公号内回复「网页表格」获取vba文件进行试用吧~~
功能扩展
这个网站的数据是每个小时更新一次,如果需要获取未来某一段时间的数据,需要手工每小时操作一次,也是麻烦事。
其实,VBA也可以实现定时操作的功能的。如果你对这个功能感兴趣的话,欢迎留言,有超过10位小伙伴的话,永恒君将在下篇文章做分享。
你可能还会想看:
查看全部
Excel VBA实例(36) - 一键提取网页中的表格数据
将永恒君的百宝箱设为星标精品文章第一时间读背景需求
先说一下问题背景:
这个网站可以查看到深圳各个区的空气质量信息,每个小时更新一次。
需求:把里面的表格信息快速提取并且保存。
Excel可以通过数据 – 自网站这个功能实现简单网页表格数据爬取,想必不少朋友都应该知道并且使用过。
这个方法对于一些简单的网页来说,还是很实用的。但是对于某些网页,就比如pm25.in,用上面的方法则会不太方便,如下图:
直接选中表格上方的√,无法导入。
而如果直接勾选整个页面的话,又会提取到除了表格之外的很多无用的信息。
效果演示
那么,这种情况呢,可以借助vba来灵活的解决这个问题。
先上效果:点击“更新”,直接提取表格信息
然后点击“保存汇总”,将该时刻提取到的信息保存到汇总表,方便后续使用。
核心代码
这整个过程其实不难,其中抓取表格数据最核心的功能代码就是下面这些,每一行代码的含义永恒君都标注在后面了。
如果要更换其他城市,只需要更改URL地址即可。
With Sheets(1).QueryTables.Add("URL;http://www.pm25.in/shenzhen", Range("A2")) '抓取网站网页地址<br /> .RefreshStyle = xlOverwriteCells '覆盖模式<br /> .WebFormatting = xlWebFormattingAll '包含全部格式<br /> .WebSelectionType = xlSpecifiedTables '指定table模式<br /> .WebTables = "1" '第1张table<br /> .Refresh False<br />End With<br />
之后的保存、汇总就是一些常规的vba代码了。
需要说明的是:这个代码只适用于,网页源代码中包含有表格数据的网页。
如果你对这个内容感兴趣的话,可以在公号内回复「网页表格」获取vba文件进行试用吧~~
功能扩展
这个网站的数据是每个小时更新一次,如果需要获取未来某一段时间的数据,需要手工每小时操作一次,也是麻烦事。
其实,VBA也可以实现定时操作的功能的。如果你对这个功能感兴趣的话,欢迎留言,有超过10位小伙伴的话,永恒君将在下篇文章做分享。
你可能还会想看:
Excel实战:如何抓取网页中的表格数据
网站优化 • 优采云 发表了文章 • 0 个评论 • 400 次浏览 • 2022-05-04 03:23
近几年,Python编程语言非常火,很多人都用Python开发网络爬虫工具。虽然Python简单,但学起来并不容易,需要一定基础。今天小编给大家介绍一个Excel爬虫函数,学起来相对容易些,可应对特定场景下的数据采集需求。
有一个基金类的网页#qdiie,网页中存在一个数据表格,如下图所示,需抓取红框标注的数据到Excel表,并定时更新表格数据。
抓取过程共六个步骤
第一步,使用Firefox火狐或Chrome谷歌浏览器打开目标网页,右键通过检查代码找到表格的id。如果表格不存在id,可使用表格class样式代替。
第二步,书写公式=GetTableByIdW(B1,"flex_qdiie"),其中B1指要抓取的网址,"flex_qdiie"指的是表格元素在网页中的id号。函数名中的W表示当前函数需借助Excel浏览器。细心的朋友可能会有疑问,为什么要借助Excel浏览器?原因在于现在的网页越来越复杂,通过传统的HttpGet()或HttpPost()方式无法读取完整的网页,所以需要使用浏览器读取全部网页数据。
第三步,打开Excel浏览器,设置网页循环抓取任务。因为需要定时更新网页数据,所以需要Excel浏览器循环抓取网页。
第四步,在Excel中刷新公式,此时抓取函数会返回表格"flex_qdiie"全部数据,这是一长串文本,可以发现每一列使用一个分号隔开,每一行使用两个分号分割。找到了个规律,我们就可以使用Split2Array()函数来拆分提取数据。
513100;纳指etf;4.284;-0.93%;4228.65;29762;100;4.0850;20-11-16;4.0552;20-11-17;5.64%;会员;会员;会员;纳斯达克100;-0.30%;0.50%;0.50%;国泰基金;;164906;中国互联;1.994;-0.85%;556.36;8077;94;1.9950;20-11-16;1.9332;20-11-17;3.15%;-;-;-;中证海外中国互联网指数;-3.26%;1.20%;1.50%;交银施罗德;;513050;中概互联;2.080;-0.43%;13851.75;244643;-1300;2.1344;20-11-16;2.0605;20-11-17;0.95%;-;-;-;中国互联网50;-3.03%;0.50%;0.50%;易方达;;159822;新经济;1.024;-0.19%;1186.78;74473;-1500;1.0415;20-11-16;1.0269;20-11-17;-0.28%;-;-;-;标普中国新经济行业指数;-1.05%;;1.50%;银华基金;;159941;纳指etf;2.439;-1.01%;6268.25;39605;400;2.4695;20-11-16;2.4515;20-11-17;-0.51%;会员;会员;会员;纳斯达克100;-0.30%;0.50%;0.50%;广发基金;;513300;纳斯达克;0.991;-1.10%;2062.63;85267;-150;1.0042;20-11-16;0.9969;20-11-17;-0.59%;会员;会员;会员;纳斯达克100;-0.30%;0.50%;0.50%;华夏基金;;164824;印度基金;0.953;-0.52%;77.46;3293;-12;0.9669;20-11-16;0.9620;20-11-17;-0.94%;会员;会员;会员;印度etp指数;-;1.20%;1.50%;工银瑞信;;...
第五步,拆分提取数据。先拆分每一行的数据,再拆分每一列的数据。
第六步,使用=AutoRefresh(120)公式,设置定时刷新任务,每隔120秒钟自动刷新表格数据。
一共六步,完美抓取到一个表格的数据,并实现了自动定时刷新。有了实时数据,就可以对数据进行加工运算,达到监控预警的目的。怎么样,还算简单吧,写公式就可以进行网页数据采集。
如果觉得这个技巧很实用,请帮忙转发给您的朋友 查看全部
Excel实战:如何抓取网页中的表格数据
近几年,Python编程语言非常火,很多人都用Python开发网络爬虫工具。虽然Python简单,但学起来并不容易,需要一定基础。今天小编给大家介绍一个Excel爬虫函数,学起来相对容易些,可应对特定场景下的数据采集需求。
有一个基金类的网页#qdiie,网页中存在一个数据表格,如下图所示,需抓取红框标注的数据到Excel表,并定时更新表格数据。
抓取过程共六个步骤
第一步,使用Firefox火狐或Chrome谷歌浏览器打开目标网页,右键通过检查代码找到表格的id。如果表格不存在id,可使用表格class样式代替。
第二步,书写公式=GetTableByIdW(B1,"flex_qdiie"),其中B1指要抓取的网址,"flex_qdiie"指的是表格元素在网页中的id号。函数名中的W表示当前函数需借助Excel浏览器。细心的朋友可能会有疑问,为什么要借助Excel浏览器?原因在于现在的网页越来越复杂,通过传统的HttpGet()或HttpPost()方式无法读取完整的网页,所以需要使用浏览器读取全部网页数据。
第三步,打开Excel浏览器,设置网页循环抓取任务。因为需要定时更新网页数据,所以需要Excel浏览器循环抓取网页。
第四步,在Excel中刷新公式,此时抓取函数会返回表格"flex_qdiie"全部数据,这是一长串文本,可以发现每一列使用一个分号隔开,每一行使用两个分号分割。找到了个规律,我们就可以使用Split2Array()函数来拆分提取数据。
513100;纳指etf;4.284;-0.93%;4228.65;29762;100;4.0850;20-11-16;4.0552;20-11-17;5.64%;会员;会员;会员;纳斯达克100;-0.30%;0.50%;0.50%;国泰基金;;164906;中国互联;1.994;-0.85%;556.36;8077;94;1.9950;20-11-16;1.9332;20-11-17;3.15%;-;-;-;中证海外中国互联网指数;-3.26%;1.20%;1.50%;交银施罗德;;513050;中概互联;2.080;-0.43%;13851.75;244643;-1300;2.1344;20-11-16;2.0605;20-11-17;0.95%;-;-;-;中国互联网50;-3.03%;0.50%;0.50%;易方达;;159822;新经济;1.024;-0.19%;1186.78;74473;-1500;1.0415;20-11-16;1.0269;20-11-17;-0.28%;-;-;-;标普中国新经济行业指数;-1.05%;;1.50%;银华基金;;159941;纳指etf;2.439;-1.01%;6268.25;39605;400;2.4695;20-11-16;2.4515;20-11-17;-0.51%;会员;会员;会员;纳斯达克100;-0.30%;0.50%;0.50%;广发基金;;513300;纳斯达克;0.991;-1.10%;2062.63;85267;-150;1.0042;20-11-16;0.9969;20-11-17;-0.59%;会员;会员;会员;纳斯达克100;-0.30%;0.50%;0.50%;华夏基金;;164824;印度基金;0.953;-0.52%;77.46;3293;-12;0.9669;20-11-16;0.9620;20-11-17;-0.94%;会员;会员;会员;印度etp指数;-;1.20%;1.50%;工银瑞信;;...
第五步,拆分提取数据。先拆分每一行的数据,再拆分每一列的数据。
第六步,使用=AutoRefresh(120)公式,设置定时刷新任务,每隔120秒钟自动刷新表格数据。
一共六步,完美抓取到一个表格的数据,并实现了自动定时刷新。有了实时数据,就可以对数据进行加工运算,达到监控预警的目的。怎么样,还算简单吧,写公式就可以进行网页数据采集。
如果觉得这个技巧很实用,请帮忙转发给您的朋友
excelvba抓取网页数据(如何获取百度查询结果——抓取网站数据(组图) )
网站优化 • 优采云 发表了文章 • 0 个评论 • 82 次浏览 • 2022-04-11 16:20
)
当用户通过 Web 浏览器登录到 Internet 时,他们将向 Web 服务器请求一个网页。服务器收到请求后,会做出响应,将设置好的页面文档发送到网页浏览器的显示界面。这是一个完整的请求和处理网页的过程。网页抓取就是在代码过程中尝试模拟这种交互过程。
首先,在 Excel 中使用 VBA 来捕获 网站 数据。
其次,无论是使用 Python、Java 还是 VBA 进行网页抓取,都需要对 HTTP 协议、HTML(HyperTextMarkup Language,超文本标记语言)和 DOM(Document Object Model,文档对象模型)等知识有一个初步的了解。
此外,还介绍了一个软件 Fiddler。网页抓取的成功需要准确真实的URL,模拟正确的请求包并分析服务器响应请求后返回的信息,而这些数据可以通过Fiddler软件获取。通过 Fiddler 很容易找到内容所在的 URL。
今天简单介绍一下如何获取百度查询结果——抓取百度查询结果的数量。
1.首先打开Fiddler软件,在浏览器中打开百度网站,搜索关键词“网络爬虫”。
2.在Fiddler软件中搜索“百度为你找到相关结果”,如下图。
3.点击对话框中第一个黄色数据,点击右侧Request框中的【Raw】按钮,可以查看发送到该请求的HTTP报文的详细数据。第一行是请求行,内容如下。
GET https://www.baidu.com/s%3Fwd%3 ... D6639 HTTP/1.1
开头的 GET 是请求方法字段,末尾的 HTTP/1.1 是协议版本字段,其余信息是 URL 字段。由于请求行使用GET方式,所以请求数据附加在URL后面,URL和请求数据用“?”隔开,其中多个参数用“&”连接。
尽管传输数据的参数很多,但并非所有参数都是必需的。选择Request框中的【WebForms】选项卡,可以查看多个参数的Names和对应的Values。百度搜索的关键词“网络爬虫”位于参数wd下,如下图所示。所以 URL 可以缩短如下。
网络爬虫
4.点击Request框中的【Raw】按钮查看响应消息的详细数据,点击框右下角的【View in Notepad】按钮将相关数据转换成记事本文件。在记事本中,搜索关键词“百度为你找到相关结果”,即可查看收录该关键词的相关数据。
示例代码如下。
<p>Sub WebQueryBaidu()
Dim objXMLHTTP As Object
Dim strURL As String
Dim strText As String
Set objXMLHTTP = CreateObject("MSXML2.XMLHTTP")
With objXMLHTTP
strURL = "https://www.baidu.com/s?wd=网络爬虫"
.Open "GET", strURL, False
.send
strText = .responseText
End With
Range("a1") = "百度:excelhome 结果个数为:"
Range("a2") = Split(Split(strText, "百度为您找到相关结果")(1), " 查看全部
excelvba抓取网页数据(如何获取百度查询结果——抓取网站数据(组图)
)
当用户通过 Web 浏览器登录到 Internet 时,他们将向 Web 服务器请求一个网页。服务器收到请求后,会做出响应,将设置好的页面文档发送到网页浏览器的显示界面。这是一个完整的请求和处理网页的过程。网页抓取就是在代码过程中尝试模拟这种交互过程。
首先,在 Excel 中使用 VBA 来捕获 网站 数据。
其次,无论是使用 Python、Java 还是 VBA 进行网页抓取,都需要对 HTTP 协议、HTML(HyperTextMarkup Language,超文本标记语言)和 DOM(Document Object Model,文档对象模型)等知识有一个初步的了解。
此外,还介绍了一个软件 Fiddler。网页抓取的成功需要准确真实的URL,模拟正确的请求包并分析服务器响应请求后返回的信息,而这些数据可以通过Fiddler软件获取。通过 Fiddler 很容易找到内容所在的 URL。
今天简单介绍一下如何获取百度查询结果——抓取百度查询结果的数量。
1.首先打开Fiddler软件,在浏览器中打开百度网站,搜索关键词“网络爬虫”。
2.在Fiddler软件中搜索“百度为你找到相关结果”,如下图。
3.点击对话框中第一个黄色数据,点击右侧Request框中的【Raw】按钮,可以查看发送到该请求的HTTP报文的详细数据。第一行是请求行,内容如下。
GET https://www.baidu.com/s%3Fwd%3 ... D6639 HTTP/1.1
开头的 GET 是请求方法字段,末尾的 HTTP/1.1 是协议版本字段,其余信息是 URL 字段。由于请求行使用GET方式,所以请求数据附加在URL后面,URL和请求数据用“?”隔开,其中多个参数用“&”连接。
尽管传输数据的参数很多,但并非所有参数都是必需的。选择Request框中的【WebForms】选项卡,可以查看多个参数的Names和对应的Values。百度搜索的关键词“网络爬虫”位于参数wd下,如下图所示。所以 URL 可以缩短如下。
网络爬虫
4.点击Request框中的【Raw】按钮查看响应消息的详细数据,点击框右下角的【View in Notepad】按钮将相关数据转换成记事本文件。在记事本中,搜索关键词“百度为你找到相关结果”,即可查看收录该关键词的相关数据。
示例代码如下。
<p>Sub WebQueryBaidu()
Dim objXMLHTTP As Object
Dim strURL As String
Dim strText As String
Set objXMLHTTP = CreateObject("MSXML2.XMLHTTP")
With objXMLHTTP
strURL = "https://www.baidu.com/s?wd=网络爬虫"
.Open "GET", strURL, False
.send
strText = .responseText
End With
Range("a1") = "百度:excelhome 结果个数为:"
Range("a2") = Split(Split(strText, "百度为您找到相关结果")(1), "
excelvba抓取网页数据(如何快速地从网站上来获取自己需要的数据哦! )
网站优化 • 优采云 发表了文章 • 0 个评论 • 274 次浏览 • 2022-04-10 00:05
)
有时候我们在做Excel表格的时候,很多数据源可能来自互联网,所以我们需要从网站下载数据供我们使用,或者需要手动一一输入……但这是太抱歉了,今天教大家一个快速从网站获取你需要的数据的方法!喜欢的记得采集哦!
脚步:
1.首先,我们打开一个网站,找到我们要的数据,先复制网站的链接。这里我们选择个人所得税税率表,我们要在网页中捕获该表的所有内容。
2.然后打开你的Excel表格,然后点击【数据】-【来自网站】,会弹出【新建网页】查询对话框。
然后将刚才复制的 网站 链接粘贴到地址栏中。然后选择【Go】,会自动跳转到网站的数据界面。
3.然后在【新建Web查询】对话框中点击所需表的【箭头】按钮,再点击右下角的【导入】。完成此操作后,我们需要的数据将被添加到 Excel 表格中。
4.当你要导入数据时,可以选择数据的位置,或者数据的起始位置,也可以新建一个工作表。选择后,单击[确定]。
这样,您可以看到网站中的数据已经一次性添加到您的Excel表格中。注意,如果数据量大,导入的时候可能会比较慢,但最后还是可以轻松抓取网站的数据!
最后,可以使用【Apply Table Style】将表格美化一点,就ok啦~
最终效果:
这是另一个动画演示给大家看。不明白的可以看这里!
好的~以上就是如何从网页抓取数据的一个小技巧。经常需要在网上搜集资料的朋友,希望能对你有所帮助。如果有用,请点赞、转发、采集!补充!
查看全部
excelvba抓取网页数据(如何快速地从网站上来获取自己需要的数据哦!
)
有时候我们在做Excel表格的时候,很多数据源可能来自互联网,所以我们需要从网站下载数据供我们使用,或者需要手动一一输入……但这是太抱歉了,今天教大家一个快速从网站获取你需要的数据的方法!喜欢的记得采集哦!
脚步:
1.首先,我们打开一个网站,找到我们要的数据,先复制网站的链接。这里我们选择个人所得税税率表,我们要在网页中捕获该表的所有内容。
2.然后打开你的Excel表格,然后点击【数据】-【来自网站】,会弹出【新建网页】查询对话框。
然后将刚才复制的 网站 链接粘贴到地址栏中。然后选择【Go】,会自动跳转到网站的数据界面。
3.然后在【新建Web查询】对话框中点击所需表的【箭头】按钮,再点击右下角的【导入】。完成此操作后,我们需要的数据将被添加到 Excel 表格中。
4.当你要导入数据时,可以选择数据的位置,或者数据的起始位置,也可以新建一个工作表。选择后,单击[确定]。
这样,您可以看到网站中的数据已经一次性添加到您的Excel表格中。注意,如果数据量大,导入的时候可能会比较慢,但最后还是可以轻松抓取网站的数据!
最后,可以使用【Apply Table Style】将表格美化一点,就ok啦~
最终效果:
这是另一个动画演示给大家看。不明白的可以看这里!
好的~以上就是如何从网页抓取数据的一个小技巧。经常需要在网上搜集资料的朋友,希望能对你有所帮助。如果有用,请点赞、转发、采集!补充!
excelvba抓取网页数据(ExcelCookie的网页抓取问题-,-scrapingExcel,Vba,)
网站优化 • 优采云 发表了文章 • 0 个评论 • 78 次浏览 • 2022-03-28 21:20
Excel cookie 的 Web 抓取问题 - 仅在一次手动浏览器调用后才抓取值
excelvbacookies网络抓取
Excel cookie 的 Web 抓取问题 - 仅在一次手动浏览器调用、excel、vba、cookie、web-scraping、setcookie、Excel、Vba、Cookie、Web Scraping、Setcookie 后才抓取值,我正在尝试从stock 获取市场上的数据 网站,目前我使用以下方法来获取数据纯 URL:此代码工作正常但需要更长的时间 Sub OI_Pull() Application.EnableEvents = FalseApplication.ScreenUpdating = FalseApplication.DisplayAlerts = FalseDim即作为新的 InternetExplorerSet 即 = CreateObject("InternetExplorer.Ap
我正在尝试从股票市场 网站 获取数据,目前我正在使用以下方法获取数据
普通网址:
此代码工作正常,但需要更长的时间
Sub OI_Pull()
Application.EnableEvents = False
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Dim ie As New InternetExplorer
Set ie = CreateObject("InternetExplorer.Application")
Dim Link As String
Link = Sheet5.Range("B5").Value
ie.Visible = True
ie.Top = 0
ie.Left = 0
ie.Width = 1000
ie.Height = 750
ie.AddressBar = 0
ie.StatusBar = 0
ie.Toolbar = 0
ie.navigate "https://www.nseindia.com/produ ... ot%3B
Do
DoEvents
Loop Until ie.readyState = READYSTATE_COMPLETE
Dim doc As HTMLDocument
Set doc = ie.Document
Dim objElement As HTMLObjectElement
Dim sDD As String
doc.Focus
'instrumentType
doc.getElementById("instrumentType").Focus 'Setting Instrument Type
doc.getElementById("instrumentType").selectedIndex = 2
doc.getElementById("instrumentType").FireEvent ("onchange")
doc.getElementById("year").Focus 'Setting Year
doc.getElementById("year").selectedIndex = 5 '2020
doc.getElementById("year").FireEvent ("onchange")
doc.getElementById("expiryDate").Focus 'Setting ExpiryDate
doc.getElementById("expiryDate").selectedIndex = 3
doc.getElementById("expiryDate").FireEvent ("onchange")
doc.getElementById("dateRange").Focus 'Date Range
doc.getElementById("dateRange").selectedIndex = 1 ' 7 days
doc.getElementById("dateRange").FireEvent ("onchange")
Dim i As Integer
For i = 1 To 428 '1 to 428
doc.getElementById("Symbol").Focus
doc.getElementById("Symbol").selectedIndex = i
doc.getElementById("Symbol").FireEvent ("onchange")
Set objElement = doc.getElementsByClassName("getdata-button")(0)
'Application.Wait Now + TimeValue("00:00:02")
objElement.Click
Application.Wait Now + TimeValue("00:00:03")
'------------------
Dim hTable As Object, hBody As Object, hTR As Object, hTD As Object
Dim tb As Object, bb As Object, tr As Object, td As Object
y = 1 'Column A in Excel
Z = 1 'Row 1 in Excel
Set hTable = doc.getElementsByTagName("Table")
'Set hTable = doc.getElementById("historicalData")
For Each tb In hTable
Set hBody = tb.getElementsByTagName("tbody")
For Each bb In hBody
Set hTR = bb.getElementsByTagName("tr")
For Each tr In hTR
Set hTD = tr.getElementsByTagName("td")
y = 1 ' Resets back to column A
For Each td In hTD
Sheets("OI Pull").Cells(Z, y).Value = td.innerText
y = y + 1
Next td
DoEvents
Z = Z + 1
Next tr
Exit For
Next bb
Exit For
Next tb
'-------------------
Application.Wait Now + TimeValue("00:00:01")
Next i
Application.Wait Now + TimeValue("00:00:01")
'ie.Quit
ie.Visible = True
Set doc = Nothing
Set ie = Nothing
Application.DisplayAlerts = True
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub
我设置的值如下面的屏幕截图所示
网站参数
大约有 250 个值要抓取,目前在浏览器打开的情况下需要 20 分钟才能抓取,直到抓取完成
所以我想让它更快,所以我尝试使用 MSXML2.XMLHTTP 方法
如果我使用 MSXML2.XMLHTTP 方法,则接收到错误的 URL 响应文本,如果我在浏览器中打开 URL,则只有 MSXML2.XMLHTTP 方法可以正常工作
所以这里的问题出在 cookie 上,首先传递 URL 并获取响应 cookie,然后再次传递 URL 和接收到的 cookie。我尝试使用 getallresponseheaders 获取 cookie,但始终无法获取 URL 的 cookie 查看全部
excelvba抓取网页数据(ExcelCookie的网页抓取问题-,-scrapingExcel,Vba,)
Excel cookie 的 Web 抓取问题 - 仅在一次手动浏览器调用后才抓取值
excelvbacookies网络抓取
Excel cookie 的 Web 抓取问题 - 仅在一次手动浏览器调用、excel、vba、cookie、web-scraping、setcookie、Excel、Vba、Cookie、Web Scraping、Setcookie 后才抓取值,我正在尝试从stock 获取市场上的数据 网站,目前我使用以下方法来获取数据纯 URL:此代码工作正常但需要更长的时间 Sub OI_Pull() Application.EnableEvents = FalseApplication.ScreenUpdating = FalseApplication.DisplayAlerts = FalseDim即作为新的 InternetExplorerSet 即 = CreateObject("InternetExplorer.Ap
我正在尝试从股票市场 网站 获取数据,目前我正在使用以下方法获取数据
普通网址:
此代码工作正常,但需要更长的时间
Sub OI_Pull()
Application.EnableEvents = False
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Dim ie As New InternetExplorer
Set ie = CreateObject("InternetExplorer.Application")
Dim Link As String
Link = Sheet5.Range("B5").Value
ie.Visible = True
ie.Top = 0
ie.Left = 0
ie.Width = 1000
ie.Height = 750
ie.AddressBar = 0
ie.StatusBar = 0
ie.Toolbar = 0
ie.navigate "https://www.nseindia.com/produ ... ot%3B
Do
DoEvents
Loop Until ie.readyState = READYSTATE_COMPLETE
Dim doc As HTMLDocument
Set doc = ie.Document
Dim objElement As HTMLObjectElement
Dim sDD As String
doc.Focus
'instrumentType
doc.getElementById("instrumentType").Focus 'Setting Instrument Type
doc.getElementById("instrumentType").selectedIndex = 2
doc.getElementById("instrumentType").FireEvent ("onchange")
doc.getElementById("year").Focus 'Setting Year
doc.getElementById("year").selectedIndex = 5 '2020
doc.getElementById("year").FireEvent ("onchange")
doc.getElementById("expiryDate").Focus 'Setting ExpiryDate
doc.getElementById("expiryDate").selectedIndex = 3
doc.getElementById("expiryDate").FireEvent ("onchange")
doc.getElementById("dateRange").Focus 'Date Range
doc.getElementById("dateRange").selectedIndex = 1 ' 7 days
doc.getElementById("dateRange").FireEvent ("onchange")
Dim i As Integer
For i = 1 To 428 '1 to 428
doc.getElementById("Symbol").Focus
doc.getElementById("Symbol").selectedIndex = i
doc.getElementById("Symbol").FireEvent ("onchange")
Set objElement = doc.getElementsByClassName("getdata-button")(0)
'Application.Wait Now + TimeValue("00:00:02")
objElement.Click
Application.Wait Now + TimeValue("00:00:03")
'------------------
Dim hTable As Object, hBody As Object, hTR As Object, hTD As Object
Dim tb As Object, bb As Object, tr As Object, td As Object
y = 1 'Column A in Excel
Z = 1 'Row 1 in Excel
Set hTable = doc.getElementsByTagName("Table")
'Set hTable = doc.getElementById("historicalData")
For Each tb In hTable
Set hBody = tb.getElementsByTagName("tbody")
For Each bb In hBody
Set hTR = bb.getElementsByTagName("tr")
For Each tr In hTR
Set hTD = tr.getElementsByTagName("td")
y = 1 ' Resets back to column A
For Each td In hTD
Sheets("OI Pull").Cells(Z, y).Value = td.innerText
y = y + 1
Next td
DoEvents
Z = Z + 1
Next tr
Exit For
Next bb
Exit For
Next tb
'-------------------
Application.Wait Now + TimeValue("00:00:01")
Next i
Application.Wait Now + TimeValue("00:00:01")
'ie.Quit
ie.Visible = True
Set doc = Nothing
Set ie = Nothing
Application.DisplayAlerts = True
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub
我设置的值如下面的屏幕截图所示
网站参数
大约有 250 个值要抓取,目前在浏览器打开的情况下需要 20 分钟才能抓取,直到抓取完成
所以我想让它更快,所以我尝试使用 MSXML2.XMLHTTP 方法
如果我使用 MSXML2.XMLHTTP 方法,则接收到错误的 URL 响应文本,如果我在浏览器中打开 URL,则只有 MSXML2.XMLHTTP 方法可以正常工作
所以这里的问题出在 cookie 上,首先传递 URL 并获取响应 cookie,然后再次传递 URL 和接收到的 cookie。我尝试使用 getallresponseheaders 获取 cookie,但始终无法获取 URL 的 cookie
excelvba抓取网页数据( 如何在不使用IE的情况下自动从框架源拉入电子表格 )
网站优化 • 优采云 发表了文章 • 0 个评论 • 62 次浏览 • 2022-03-28 21:18
如何在不使用IE的情况下自动从框架源拉入电子表格
)
如何在不在 vba 中创建 Internet Explorer 对象的情况下解析 html?
htmlvbaexcelinternet-explorer
如何在不在 vba 中创建 Internet Explorer 对象的情况下解析 html?,html,vba,excel,internet-explorer,Html,Vba,Excel,Internet Explorer,我在工作的任何计算机上都没有 Internet Explorer,所以我无法创建 Internet Explorer 的对象并使用 ie.navigate to解析 html 和搜索标签。我的问题是,如何在不使用 IE 的情况下自动将带有标记的特定数据从框架源提取到电子表格中?答案中的代码示例将非常有用:) 谢谢您可以使用 XMLHTTP 检索网页的 HTML 源代码: Function GetHTML(url As String) As StringWith CreateObject("MSXML2.XMLHTTP")
我在工作的任何计算机上都没有 Internet Explorer,所以我无法创建 Internet Explorer 的对象并使用 ie.navigate 来解析 html 和搜索标记。我的问题是,如何在不使用 IE 的情况下自动将带有标记的特定数据从框架源提取到电子表格中?答案中的代码示例将非常有用:) 谢谢您可以使用 XMLHTTP 检索网页的 HTML 源代码:
Function GetHTML(url As String) As String
With CreateObject("MSXML2.XMLHTTP")
.Open "GET", url, False
.Send
GetHTML = .ResponseText
End With
End Function
我不建议把它当成sheet函数使用,否则每次重新计算sheet时都会重新查询站点URL。一些 网站 具有通过频繁重复调用来检测抓取的逻辑,您的 IP 可能会被暂时或永久禁止,具体取决于 网站
一旦你有了源 HTML 字符串(最好存储在一个变量中以避免不必要的重复调用),你可以使用基本的文本函数来解析字符串以搜索标签
这个基函数将返回
和
之间的值:
Public Function getTag(url As String, tag As String, Optional occurNum As Integer) As String
Dim html As String, pStart As Long, pEnd As Long, o As Integer
html = GetHTML(url)
'remove if they exist so we can add our own
If Left(tag, 1) = "" Then
tag = Left(Right(tag, Len(tag) - 1), Len(Right(tag, Len(tag) - 1)) - 1)
End If
' default to Occurrence #1
If occurNum = 0 Then occurNum = 1
pEnd = 1
For o = 1 To occurNum
' find start beginning at 1 (or after previous Occurence)
pStart = InStr(pEnd, html, "", vbTextCompare)
If pStart = 0 Then
getTag = "{Not Found}"
Exit Function
End If
pStart = pStart + Len("")
' find first end after start
pEnd = InStr(pStart, html, "", vbTextCompare)
Next o
'return string between start & end
getTag = Mid(html, pStart, pEnd - pStart)
End Function
公共函数getTag(url作为字符串,标记作为字符串,可选的occurNum作为整数)作为字符串
Dim html为字符串,pStart为长,pEnd为长,o为整数
html=GetHTML(url)
'如果存在,请删除,以便我们可以添加自己的
如果左(标记,1)=“”,则
标签=左(右(标签,透镜(标签)-1),透镜(右(标签,透镜(标签)-1))-1)
如果结束
'默认为事件#1
如果occurNum=0,则occurNum=1
pEnd=1
当o=1时发生
'查找从1开始的开始(或在上一次发生后)
pStart=InStr(pEnd,html,“,vbTextCompare)
如果pStart=0,则
getTag=“{Not Found}”
退出功能
如果结束
pStart=pStart+Len(“”)
'在开始后查找第一个端点
pEnd=InStr(pStart,html,“,vbTextCompare)
下一个o
'在开始和结束之间返回字符串
getTag=Mid(html、pStart、pEnd-pStart)
端函数
这只会找到基本的
, 但您可以添加/删除/更改文本功能以满足您的需要
使用示例:
Sub-findTagExample()
常量testURL=”https://en.wikipedia.org/wiki/Web_scraping"
'搜索第二次出现的标记:即“内容”:
打印getTag(testURL,“,2)
“…这将返回第8次出现的“导航菜单”:
打印getTag(testURL,“,8)
“…这将返回一个HTML,其中包含“法律问题”部分的标题:
调试。打印getTag(“https://en.wikipedia.org/wiki/Web_scraping", "", 4)
端接头
任何做过网页抓取的人都会熟悉如何创建 Internet Explorer (IE) 实例并导航到一个网址,然后当页面准备好时,开始使用“Microsoft HTML 对象库”(MSHTML) 类型库来导航 DOM . 问题是,如果 IE 不可用怎么办。我的盒子运行 Windows 10 时也遇到了同样的情况
我曾怀疑可以独立于 IE 创建 MSHTML.HTMLDocument 的实例,但它的创建并不明显。感谢提问者现在提出这个问题。答案在于方法。您需要一个本地文件才能工作(编辑:您实际上也可以在其中放置一个 WebbyURL!),但是我们有一个漂亮而简洁的 WindowsAPI 函数来下载文件
该代码在运行 Microsoft Edge 而不是 Internet Explorer 的 My Windows 10 机器上运行。这是一个重要的发现,感谢提出这一发现的提问者
Option Explicit
'* Tools->Refernces Microsoft HTML Object Library
'* MSDN - URLDownloadToFile function - https://msdn.microsoft.com/en-us/library/ms775123(v=vs.85).aspx
Private Declare PtrSafe Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" _
(ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, _
ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long
Sub Test()
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Dim sLocalFilename As String
sLocalFilename = Environ$("TMP") & "\urlmon.html"
Dim sURL As String
sURL = "https://stackoverflow.com/user ... ot%3B
Dim bOk As Boolean
bOk = (URLDownloadToFile(0, sURL, sLocalFilename, 0, 0) = 0)
If bOk Then
If fso.FileExists(sLocalFilename) Then
'* Tools->Refernces Microsoft HTML Object Library
Dim oHtml4 As MSHTML.IHTMLDocument4
Set oHtml4 = New MSHTML.HTMLDocument
Dim oHtml As MSHTML.HTMLDocument
Set oHtml = Nothing
'* IHTMLDocument4.createDocumentFromUrl
'* MSDN - IHTMLDocument4 createDocumentFromUrl method - https://msdn.microsoft.com/en-us/library/aa752523(v=vs.85).aspx
Set oHtml = oHtml4.createDocumentFromUrl(sLocalFilename, "")
'* need to wait a little whilst the document parses
'* because it is multithreaded
While oHtml.readyState "complete"
DoEvents '* do not comment this out it is required to break into the code if in infinite loop
Wend
Debug.Assert oHtml.readyState = "complete"
Dim sTest As String
sTest = Left$(oHtml.body.outerHTML, 100)
Debug.Assert Len(Trim(sTest)) > 50 '* just testing we got a substantial block of text, feel free to delete
'* page specific logic goes here
Dim htmlAnswers As Object 'MSHTML.DispHTMLElementCollection
Set htmlAnswers = oHtml.getElementsByClassName("answer-hyperlink")
Dim lAnswerLoop As Long
For lAnswerLoop = 0 To htmlAnswers.Length - 1
Dim vAnswerLoop
Set vAnswerLoop = htmlAnswers.Item(lAnswerLoop)
Debug.Print vAnswerLoop.outerText
Next
End If
End If
End Sub
OPTION EXPLICIT '*Tools->Reference Microsoft HTML Object Library'*MSDN-URLDownloadToFileFunction-(v=vs.85).aspx 私有声明 PtrSafe 函数 URLDownloadToFile Lib "urlmon" alias "URLDownloadToFileA"_(ByVal pCaller is Long , ByVal szURL 是 String, ByVal szFileName 是 String String sLocalFilename=Environ$("tmp") and "\urlmon.html" as string Dim sURL sur="" Dim-bOk as boolean bOk=(URLDownloadToFile(0, sURL, sLocalFilename , 0, 0)=0)如果 fso.files(sLocalFilename) 存在则可用,则 '*tools->reference Microsoft HTML 对象库将 oHtml4 标记为 MSHTML.IHTMLDocument4 set oHtml4=New MSHTML.HTMLDocumentDim oHtml作为 MSHTML.HTMLDocument 设置 oHtml=Nothing'*IHTMLDocument4.createDocumentFromUrl'*MSDN-IHTMLDocument4 createDocumentFromUrl 方法-(v=vs.85).aspx set oHtml=oHtml4.createDocumentFromUrl(sLocalFilename, "") "*等待文档解析"* oHtml.readyState '完成' DoEvents' 因为它是多线程的'* 不要对此发表评论。
如果是死循环,需要断代码 Wind Debug.Assert oHtml.readyState="finished" 像字符串一样的暗棒 sTest=Left$(oHtml.body.outerHTML, 100)Assert Len( Trim (sTest)) > 50' * 刚测试我们有很多文本块,随意删除" * 页面具体逻辑如下 Dim HtmlLanswers as object MSHTML.dispHtmlLement采集 set htmlAnswers=oHtml.getElementsByClassName("answer hyperlinks" ) 暗绿色,如 long For lAnswerLoop=0 to htmlAnswers.Length-1 Dim WasswerLoop set vAnswerLoop=htmlAnswers.Item(lAnswerLoop) Debug.Print vAnswerLoop.outerText
Option Explicit
'* Tools->Refernces Microsoft HTML Object Library
'* MSDN - URLDownloadToFile function - https://msdn.microsoft.com/en-us/library/ms775123(v=vs.85).aspx
Private Declare PtrSafe Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" _
(ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, _
ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long
Sub Test()
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Dim sLocalFilename As String
sLocalFilename = Environ$("TMP") & "\urlmon.html"
Dim sURL As String
sURL = "https://stackoverflow.com/user ... ot%3B
Dim bOk As Boolean
bOk = (URLDownloadToFile(0, sURL, sLocalFilename, 0, 0) = 0)
If bOk Then
If fso.FileExists(sLocalFilename) Then
'* Tools->Refernces Microsoft HTML Object Library
Dim oHtml4 As MSHTML.IHTMLDocument4
Set oHtml4 = New MSHTML.HTMLDocument
Dim oHtml As MSHTML.HTMLDocument
Set oHtml = Nothing
'* IHTMLDocument4.createDocumentFromUrl
'* MSDN - IHTMLDocument4 createDocumentFromUrl method - https://msdn.microsoft.com/en-us/library/aa752523(v=vs.85).aspx
Set oHtml = oHtml4.createDocumentFromUrl(sLocalFilename, "")
'* need to wait a little whilst the document parses
'* because it is multithreaded
While oHtml.readyState "complete"
DoEvents '* do not comment this out it is required to break into the code if in infinite loop
Wend
Debug.Assert oHtml.readyState = "complete"
Dim sTest As String
sTest = Left$(oHtml.body.outerHTML, 100)
Debug.Assert Len(Trim(sTest)) > 50 '* just testing we got a substantial block of text, feel free to delete
'* page specific logic goes here
Dim htmlAnswers As Object 'MSHTML.DispHTMLElementCollection
Set htmlAnswers = oHtml.getElementsByClassName("answer-hyperlink")
Dim lAnswerLoop As Long
For lAnswerLoop = 0 To htmlAnswers.Length - 1
Dim vAnswerLoop
Set vAnswerLoop = htmlAnswers.Item(lAnswerLoop)
Debug.Print vAnswerLoop.outerText
Next
End If
End If
End Sub 查看全部
excelvba抓取网页数据(
如何在不使用IE的情况下自动从框架源拉入电子表格
)
如何在不在 vba 中创建 Internet Explorer 对象的情况下解析 html?
htmlvbaexcelinternet-explorer
如何在不在 vba 中创建 Internet Explorer 对象的情况下解析 html?,html,vba,excel,internet-explorer,Html,Vba,Excel,Internet Explorer,我在工作的任何计算机上都没有 Internet Explorer,所以我无法创建 Internet Explorer 的对象并使用 ie.navigate to解析 html 和搜索标签。我的问题是,如何在不使用 IE 的情况下自动将带有标记的特定数据从框架源提取到电子表格中?答案中的代码示例将非常有用:) 谢谢您可以使用 XMLHTTP 检索网页的 HTML 源代码: Function GetHTML(url As String) As StringWith CreateObject("MSXML2.XMLHTTP")
我在工作的任何计算机上都没有 Internet Explorer,所以我无法创建 Internet Explorer 的对象并使用 ie.navigate 来解析 html 和搜索标记。我的问题是,如何在不使用 IE 的情况下自动将带有标记的特定数据从框架源提取到电子表格中?答案中的代码示例将非常有用:) 谢谢您可以使用 XMLHTTP 检索网页的 HTML 源代码:
Function GetHTML(url As String) As String
With CreateObject("MSXML2.XMLHTTP")
.Open "GET", url, False
.Send
GetHTML = .ResponseText
End With
End Function
我不建议把它当成sheet函数使用,否则每次重新计算sheet时都会重新查询站点URL。一些 网站 具有通过频繁重复调用来检测抓取的逻辑,您的 IP 可能会被暂时或永久禁止,具体取决于 网站
一旦你有了源 HTML 字符串(最好存储在一个变量中以避免不必要的重复调用),你可以使用基本的文本函数来解析字符串以搜索标签
这个基函数将返回
和
之间的值:
Public Function getTag(url As String, tag As String, Optional occurNum As Integer) As String
Dim html As String, pStart As Long, pEnd As Long, o As Integer
html = GetHTML(url)
'remove if they exist so we can add our own
If Left(tag, 1) = "" Then
tag = Left(Right(tag, Len(tag) - 1), Len(Right(tag, Len(tag) - 1)) - 1)
End If
' default to Occurrence #1
If occurNum = 0 Then occurNum = 1
pEnd = 1
For o = 1 To occurNum
' find start beginning at 1 (or after previous Occurence)
pStart = InStr(pEnd, html, "", vbTextCompare)
If pStart = 0 Then
getTag = "{Not Found}"
Exit Function
End If
pStart = pStart + Len("")
' find first end after start
pEnd = InStr(pStart, html, "", vbTextCompare)
Next o
'return string between start & end
getTag = Mid(html, pStart, pEnd - pStart)
End Function
公共函数getTag(url作为字符串,标记作为字符串,可选的occurNum作为整数)作为字符串
Dim html为字符串,pStart为长,pEnd为长,o为整数
html=GetHTML(url)
'如果存在,请删除,以便我们可以添加自己的
如果左(标记,1)=“”,则
标签=左(右(标签,透镜(标签)-1),透镜(右(标签,透镜(标签)-1))-1)
如果结束
'默认为事件#1
如果occurNum=0,则occurNum=1
pEnd=1
当o=1时发生
'查找从1开始的开始(或在上一次发生后)
pStart=InStr(pEnd,html,“,vbTextCompare)
如果pStart=0,则
getTag=“{Not Found}”
退出功能
如果结束
pStart=pStart+Len(“”)
'在开始后查找第一个端点
pEnd=InStr(pStart,html,“,vbTextCompare)
下一个o
'在开始和结束之间返回字符串
getTag=Mid(html、pStart、pEnd-pStart)
端函数
这只会找到基本的
, 但您可以添加/删除/更改文本功能以满足您的需要
使用示例:
Sub-findTagExample()
常量testURL=”https://en.wikipedia.org/wiki/Web_scraping"
'搜索第二次出现的标记:即“内容”:
打印getTag(testURL,“,2)
“…这将返回第8次出现的“导航菜单”:
打印getTag(testURL,“,8)
“…这将返回一个HTML,其中包含“法律问题”部分的标题:
调试。打印getTag(“https://en.wikipedia.org/wiki/Web_scraping", "", 4)
端接头
任何做过网页抓取的人都会熟悉如何创建 Internet Explorer (IE) 实例并导航到一个网址,然后当页面准备好时,开始使用“Microsoft HTML 对象库”(MSHTML) 类型库来导航 DOM . 问题是,如果 IE 不可用怎么办。我的盒子运行 Windows 10 时也遇到了同样的情况
我曾怀疑可以独立于 IE 创建 MSHTML.HTMLDocument 的实例,但它的创建并不明显。感谢提问者现在提出这个问题。答案在于方法。您需要一个本地文件才能工作(编辑:您实际上也可以在其中放置一个 WebbyURL!),但是我们有一个漂亮而简洁的 WindowsAPI 函数来下载文件
该代码在运行 Microsoft Edge 而不是 Internet Explorer 的 My Windows 10 机器上运行。这是一个重要的发现,感谢提出这一发现的提问者
Option Explicit
'* Tools->Refernces Microsoft HTML Object Library
'* MSDN - URLDownloadToFile function - https://msdn.microsoft.com/en-us/library/ms775123(v=vs.85).aspx
Private Declare PtrSafe Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" _
(ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, _
ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long
Sub Test()
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Dim sLocalFilename As String
sLocalFilename = Environ$("TMP") & "\urlmon.html"
Dim sURL As String
sURL = "https://stackoverflow.com/user ... ot%3B
Dim bOk As Boolean
bOk = (URLDownloadToFile(0, sURL, sLocalFilename, 0, 0) = 0)
If bOk Then
If fso.FileExists(sLocalFilename) Then
'* Tools->Refernces Microsoft HTML Object Library
Dim oHtml4 As MSHTML.IHTMLDocument4
Set oHtml4 = New MSHTML.HTMLDocument
Dim oHtml As MSHTML.HTMLDocument
Set oHtml = Nothing
'* IHTMLDocument4.createDocumentFromUrl
'* MSDN - IHTMLDocument4 createDocumentFromUrl method - https://msdn.microsoft.com/en-us/library/aa752523(v=vs.85).aspx
Set oHtml = oHtml4.createDocumentFromUrl(sLocalFilename, "")
'* need to wait a little whilst the document parses
'* because it is multithreaded
While oHtml.readyState "complete"
DoEvents '* do not comment this out it is required to break into the code if in infinite loop
Wend
Debug.Assert oHtml.readyState = "complete"
Dim sTest As String
sTest = Left$(oHtml.body.outerHTML, 100)
Debug.Assert Len(Trim(sTest)) > 50 '* just testing we got a substantial block of text, feel free to delete
'* page specific logic goes here
Dim htmlAnswers As Object 'MSHTML.DispHTMLElementCollection
Set htmlAnswers = oHtml.getElementsByClassName("answer-hyperlink")
Dim lAnswerLoop As Long
For lAnswerLoop = 0 To htmlAnswers.Length - 1
Dim vAnswerLoop
Set vAnswerLoop = htmlAnswers.Item(lAnswerLoop)
Debug.Print vAnswerLoop.outerText
Next
End If
End If
End Sub
OPTION EXPLICIT '*Tools->Reference Microsoft HTML Object Library'*MSDN-URLDownloadToFileFunction-(v=vs.85).aspx 私有声明 PtrSafe 函数 URLDownloadToFile Lib "urlmon" alias "URLDownloadToFileA"_(ByVal pCaller is Long , ByVal szURL 是 String, ByVal szFileName 是 String String sLocalFilename=Environ$("tmp") and "\urlmon.html" as string Dim sURL sur="" Dim-bOk as boolean bOk=(URLDownloadToFile(0, sURL, sLocalFilename , 0, 0)=0)如果 fso.files(sLocalFilename) 存在则可用,则 '*tools->reference Microsoft HTML 对象库将 oHtml4 标记为 MSHTML.IHTMLDocument4 set oHtml4=New MSHTML.HTMLDocumentDim oHtml作为 MSHTML.HTMLDocument 设置 oHtml=Nothing'*IHTMLDocument4.createDocumentFromUrl'*MSDN-IHTMLDocument4 createDocumentFromUrl 方法-(v=vs.85).aspx set oHtml=oHtml4.createDocumentFromUrl(sLocalFilename, "") "*等待文档解析"* oHtml.readyState '完成' DoEvents' 因为它是多线程的'* 不要对此发表评论。
如果是死循环,需要断代码 Wind Debug.Assert oHtml.readyState="finished" 像字符串一样的暗棒 sTest=Left$(oHtml.body.outerHTML, 100)Assert Len( Trim (sTest)) > 50' * 刚测试我们有很多文本块,随意删除" * 页面具体逻辑如下 Dim HtmlLanswers as object MSHTML.dispHtmlLement采集 set htmlAnswers=oHtml.getElementsByClassName("answer hyperlinks" ) 暗绿色,如 long For lAnswerLoop=0 to htmlAnswers.Length-1 Dim WasswerLoop set vAnswerLoop=htmlAnswers.Item(lAnswerLoop) Debug.Print vAnswerLoop.outerText
Option Explicit
'* Tools->Refernces Microsoft HTML Object Library
'* MSDN - URLDownloadToFile function - https://msdn.microsoft.com/en-us/library/ms775123(v=vs.85).aspx
Private Declare PtrSafe Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" _
(ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, _
ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long
Sub Test()
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Dim sLocalFilename As String
sLocalFilename = Environ$("TMP") & "\urlmon.html"
Dim sURL As String
sURL = "https://stackoverflow.com/user ... ot%3B
Dim bOk As Boolean
bOk = (URLDownloadToFile(0, sURL, sLocalFilename, 0, 0) = 0)
If bOk Then
If fso.FileExists(sLocalFilename) Then
'* Tools->Refernces Microsoft HTML Object Library
Dim oHtml4 As MSHTML.IHTMLDocument4
Set oHtml4 = New MSHTML.HTMLDocument
Dim oHtml As MSHTML.HTMLDocument
Set oHtml = Nothing
'* IHTMLDocument4.createDocumentFromUrl
'* MSDN - IHTMLDocument4 createDocumentFromUrl method - https://msdn.microsoft.com/en-us/library/aa752523(v=vs.85).aspx
Set oHtml = oHtml4.createDocumentFromUrl(sLocalFilename, "")
'* need to wait a little whilst the document parses
'* because it is multithreaded
While oHtml.readyState "complete"
DoEvents '* do not comment this out it is required to break into the code if in infinite loop
Wend
Debug.Assert oHtml.readyState = "complete"
Dim sTest As String
sTest = Left$(oHtml.body.outerHTML, 100)
Debug.Assert Len(Trim(sTest)) > 50 '* just testing we got a substantial block of text, feel free to delete
'* page specific logic goes here
Dim htmlAnswers As Object 'MSHTML.DispHTMLElementCollection
Set htmlAnswers = oHtml.getElementsByClassName("answer-hyperlink")
Dim lAnswerLoop As Long
For lAnswerLoop = 0 To htmlAnswers.Length - 1
Dim vAnswerLoop
Set vAnswerLoop = htmlAnswers.Item(lAnswerLoop)
Debug.Print vAnswerLoop.outerText
Next
End If
End If
End Sub
excelvba抓取网页数据(VBA教材有点基础再说吧,有找我怎么学?)
网站优化 • 优采云 发表了文章 • 0 个评论 • 75 次浏览 • 2022-03-23 02:09
这玩意儿是原创,原理是用VBA从网页抓取数据,但不需要打开网页。
VBA在后台打开一个虚拟网页,解析并抓取数据,速度相当快。我这里的网速一般,抓取一个网页的数据只需要1秒左右。
该程序可以实现以下功能:
1、导入任何股票上市以来的开盘价、收盘价、最高价、最低价、成交量等数据;
2、导入任何股票在任何交易日的交易详情。包括交易时间、交易价格、交易量、交易金额等。对于一些需要高频数据的同学来说,这个东西很实用。这个程序稍作修改,一个循环甚至可以导出所有股票的所有历史交易明细。有需要的同学可以找我。
3、导入新股会议数据,包括公司名称、申报时间、会议时间、当前状态等信息。
一般情况下,网页上的数据都可以通过VBA进行抓取。如果应用得好,可以实现对大量数据的动态监控。
如果需要采集其他数据,可以私信我。
这么好的东西不应该沉没,有钱就回复下载吧;如果你没钱,回复然后私信我,我发给你。
[隐藏][/隐藏]
补充内容(2014-3-22 14:21):
几个额外的问题:
1、很多人向我要文件,我尽力了,但很抱歉我不能全部发送。
2、有人问我源代码密码,抱歉我不能一一回答,也不容易发到这里。
3、如果你让我教你如何学习VBA,我们来谈谈这本教材的基础知识。 查看全部
excelvba抓取网页数据(VBA教材有点基础再说吧,有找我怎么学?)
这玩意儿是原创,原理是用VBA从网页抓取数据,但不需要打开网页。
VBA在后台打开一个虚拟网页,解析并抓取数据,速度相当快。我这里的网速一般,抓取一个网页的数据只需要1秒左右。
该程序可以实现以下功能:
1、导入任何股票上市以来的开盘价、收盘价、最高价、最低价、成交量等数据;
2、导入任何股票在任何交易日的交易详情。包括交易时间、交易价格、交易量、交易金额等。对于一些需要高频数据的同学来说,这个东西很实用。这个程序稍作修改,一个循环甚至可以导出所有股票的所有历史交易明细。有需要的同学可以找我。
3、导入新股会议数据,包括公司名称、申报时间、会议时间、当前状态等信息。
一般情况下,网页上的数据都可以通过VBA进行抓取。如果应用得好,可以实现对大量数据的动态监控。
如果需要采集其他数据,可以私信我。
这么好的东西不应该沉没,有钱就回复下载吧;如果你没钱,回复然后私信我,我发给你。
[隐藏][/隐藏]
补充内容(2014-3-22 14:21):
几个额外的问题:
1、很多人向我要文件,我尽力了,但很抱歉我不能全部发送。
2、有人问我源代码密码,抱歉我不能一一回答,也不容易发到这里。
3、如果你让我教你如何学习VBA,我们来谈谈这本教材的基础知识。
excelvba抓取网页数据(基于ExcelVBA的能源电力新闻网抓插件演示视频_哔哩哔哩)
网站优化 • 优采云 发表了文章 • 0 个评论 • 78 次浏览 • 2022-03-15 16:21
之前写过很多基于实际应用场景的VBA网页抓包程序。我觉得最方便的就是xmlhttp对象了。它的优点是速度快,稳定性和兼容性好,还可以使用post方式发送邮件。登录帐户等。但是,这种方法不适合动态网页。简而言之,如果网页的内容可以通过运行 JavaScript 获取,那么这个方法是抓不到的。然后有些xmlhttp就不能做剩下的了,可以选择IE控件来做,但是经常报错,自己调试后就可以用了,但是真的不好给别人用。
通过VBA的这些网络捕获方式获取数据后,后续的输出和分析将因地制宜。目前论坛中关于json格式数据、正则表达式或者二进制输出文件的帖子相当多,大家可以自行学习。
一般来说,VBA能抓取哪些页面,并不取决于页面有多复杂或多花哨,而是该页面是否为动态网页以及该网页的源代码是什么样的,不方便数据处理之类的. 个人觉得最好抓的是各种新闻的标题网站,一般都是直接返回源码获取,有时head标签写在html代码中,使用正则表达式或者html。文档对象很好处理。比如下面这几种看起来很杂乱花哨的能源和电力网站,虽然看起来很复杂很花哨,但其实它们的结构很简单。
由于工作原因,需要及时获取相关行业新闻,所以之前做了一个能源电力新闻的网页抓取程序。我想了想,把它放在TB宝藏中哈哈。我觉得学习VBA还是可以给我带来一些收入的。,来吧,话题!
演示视频:基于ExcelVBA的能源电力新闻网络抓取插件演示视频_bilibili_bilibili 查看全部
excelvba抓取网页数据(基于ExcelVBA的能源电力新闻网抓插件演示视频_哔哩哔哩)
之前写过很多基于实际应用场景的VBA网页抓包程序。我觉得最方便的就是xmlhttp对象了。它的优点是速度快,稳定性和兼容性好,还可以使用post方式发送邮件。登录帐户等。但是,这种方法不适合动态网页。简而言之,如果网页的内容可以通过运行 JavaScript 获取,那么这个方法是抓不到的。然后有些xmlhttp就不能做剩下的了,可以选择IE控件来做,但是经常报错,自己调试后就可以用了,但是真的不好给别人用。
通过VBA的这些网络捕获方式获取数据后,后续的输出和分析将因地制宜。目前论坛中关于json格式数据、正则表达式或者二进制输出文件的帖子相当多,大家可以自行学习。
一般来说,VBA能抓取哪些页面,并不取决于页面有多复杂或多花哨,而是该页面是否为动态网页以及该网页的源代码是什么样的,不方便数据处理之类的. 个人觉得最好抓的是各种新闻的标题网站,一般都是直接返回源码获取,有时head标签写在html代码中,使用正则表达式或者html。文档对象很好处理。比如下面这几种看起来很杂乱花哨的能源和电力网站,虽然看起来很复杂很花哨,但其实它们的结构很简单。

由于工作原因,需要及时获取相关行业新闻,所以之前做了一个能源电力新闻的网页抓取程序。我想了想,把它放在TB宝藏中哈哈。我觉得学习VBA还是可以给我带来一些收入的。,来吧,话题!
演示视频:基于ExcelVBA的能源电力新闻网络抓取插件演示视频_bilibili_bilibili
excelvba抓取网页数据(每类数据自动新建Excel软件怎么用?如何快速提取表格数据 )
网站优化 • 优采云 发表了文章 • 0 个评论 • 94 次浏览 • 2022-03-08 03:13
)
EXCEL批量数据抽取是一款界面简单、操作最少的表格数据抽取工具。可以帮助用户简单快速的提取表格数据,将用户需要使用的数据提取到新的表格中,方便用户处理表格数据;EXCEL批量数据提取功能强大、专业、实用。用户只需添加一个表格,然后设置提取数据参数即可提取数据内容,让用户快速获取所需数据。整个数据提取操作非常简单快捷;EXCEL批量数据提取支持表头文件设置、数据保存、自动提取表格数据等功能,非常方便易用。有需要的用户可以下载使用。
软件功能
1、EXCEL批量数据提取好用,快速提取你需要的数据
2、自动从庞大的数据表中提取,可以在软件中输入需要提取的数据类型
3、在软件中输入多个数据类,让软件都能识别Excel里面的数据
4、软件自动识别单元格数据并将数据提取到新的Excel文件中
5、可以匹配部分内容,可以准确找到要提取的数据
6、直接在表格列中搜索数据,提取指定列数据
7、提取的数据类型可以独立保存,每种数据类型在Excel中自动创建
软件功能
1、EXCEL批量数据提取好用,为需要汇总数据的朋友提供自动提取功能
2、帮助用户从多个表单中采集数据,软件即时识别所有表单
3、用户只需要设置保存表的文件夹即可进行提取操作
4、每次提取数据时都会创建一个新表。如果没有检测到数据,则不会创建。
5、可以从软件中指定表头,选择已经设置好的Excel文件进行搜索
6、本软件支持office2007以上的Excel文件,也支持WPS表格
指示
1、点击下载管理找到软件安装zip包点击解压,找到.exe文件双击直接进入软件,右键创建桌面快捷方式
2、双击桌面快捷键进入Excel批量数据提取软件操作页面,点击选择版本选择版本软件,同时设置软件参数
3、点击软件要解压的文件所在路径和文件夹的按钮,弹出本地文件管理弹框,点击选择文件再点击选择文件夹即可成功设置解压文件的路径
4、解压后点击路径按钮保存到文件夹
5、在提取文件数据前,可以点击提取参数设置,点击勾选提取功能,让用户更好的提取数据
6、点击软件页面,进入软件主产品功能页面。在该页面,您可以点击选择批量数据排序下的文件处理功能,进入相应页面进行操作。
查看全部
excelvba抓取网页数据(每类数据自动新建Excel软件怎么用?如何快速提取表格数据
)
EXCEL批量数据抽取是一款界面简单、操作最少的表格数据抽取工具。可以帮助用户简单快速的提取表格数据,将用户需要使用的数据提取到新的表格中,方便用户处理表格数据;EXCEL批量数据提取功能强大、专业、实用。用户只需添加一个表格,然后设置提取数据参数即可提取数据内容,让用户快速获取所需数据。整个数据提取操作非常简单快捷;EXCEL批量数据提取支持表头文件设置、数据保存、自动提取表格数据等功能,非常方便易用。有需要的用户可以下载使用。

软件功能
1、EXCEL批量数据提取好用,快速提取你需要的数据
2、自动从庞大的数据表中提取,可以在软件中输入需要提取的数据类型
3、在软件中输入多个数据类,让软件都能识别Excel里面的数据
4、软件自动识别单元格数据并将数据提取到新的Excel文件中
5、可以匹配部分内容,可以准确找到要提取的数据
6、直接在表格列中搜索数据,提取指定列数据
7、提取的数据类型可以独立保存,每种数据类型在Excel中自动创建
软件功能
1、EXCEL批量数据提取好用,为需要汇总数据的朋友提供自动提取功能
2、帮助用户从多个表单中采集数据,软件即时识别所有表单
3、用户只需要设置保存表的文件夹即可进行提取操作
4、每次提取数据时都会创建一个新表。如果没有检测到数据,则不会创建。
5、可以从软件中指定表头,选择已经设置好的Excel文件进行搜索
6、本软件支持office2007以上的Excel文件,也支持WPS表格
指示
1、点击下载管理找到软件安装zip包点击解压,找到.exe文件双击直接进入软件,右键创建桌面快捷方式

2、双击桌面快捷键进入Excel批量数据提取软件操作页面,点击选择版本选择版本软件,同时设置软件参数

3、点击软件要解压的文件所在路径和文件夹的按钮,弹出本地文件管理弹框,点击选择文件再点击选择文件夹即可成功设置解压文件的路径

4、解压后点击路径按钮保存到文件夹

5、在提取文件数据前,可以点击提取参数设置,点击勾选提取功能,让用户更好的提取数据

6、点击软件页面,进入软件主产品功能页面。在该页面,您可以点击选择批量数据排序下的文件处理功能,进入相应页面进行操作。

excelvba抓取网页数据(22期Python读书笔记,先聊聊为什么要坚持对Python的学习~)
网站优化 • 优采云 发表了文章 • 0 个评论 • 81 次浏览 • 2022-03-06 07:16
不知不觉中,我坚持更新了 22 条 Python 阅读笔记。说说为什么要坚持学习Python吧~
作为一个勤奋做Excel知识分享的人,为什么突然分享Python呢?
一、说说Excel的缺点
1、大数据处理能力不足
Excel可以处理几千行、几万行甚至几十万行,但处理几百万行数据总是那么无能为力。能够打开海量数据就很好了,不说怎么处理分析了~
2、抓取网页内容的能力不足
Excel 的另一个缺点是无法抓取网页。之前我也用VBA实现了一些朋友的网页内容爬取需求。可能是我能力有限,没有充分发挥VBA的威力。太好了,很想使用 Python 来获得更多解决方案。
二、谈谈你的个人学习方向
以上缺点已经指明了小编学习、数据处理和网页抓取的方向。
上周四,帮朋友用pandas实现了按某列拆分成不同文件的需求。如果你知道“阿凯的Excel”插件,你就知道我写的插件可以实现这个功能。但是当这个插件面对百万行数据时,我只能说No~
一开始我跟那个朋友说用Python来实现,对方拒绝了,然后我以QQ远程桌面的形式给他展示了用Python处理的速度。怎么形容速度?也就是我执行代码的时候直接生成文件,不用等待时间,然后对方按照我分享的笔记安装Python安装包!
至于网络爬虫,无非是我自己的个人爱好,加上别人的需求~我也想把个人方向改成网站内容抓取-数据自动分析-辅助决策的方向。所以第一个数据源一定要自己解决,只能一点一点的学习~ 查看全部
excelvba抓取网页数据(22期Python读书笔记,先聊聊为什么要坚持对Python的学习~)
不知不觉中,我坚持更新了 22 条 Python 阅读笔记。说说为什么要坚持学习Python吧~
作为一个勤奋做Excel知识分享的人,为什么突然分享Python呢?
一、说说Excel的缺点
1、大数据处理能力不足
Excel可以处理几千行、几万行甚至几十万行,但处理几百万行数据总是那么无能为力。能够打开海量数据就很好了,不说怎么处理分析了~
2、抓取网页内容的能力不足
Excel 的另一个缺点是无法抓取网页。之前我也用VBA实现了一些朋友的网页内容爬取需求。可能是我能力有限,没有充分发挥VBA的威力。太好了,很想使用 Python 来获得更多解决方案。
二、谈谈你的个人学习方向
以上缺点已经指明了小编学习、数据处理和网页抓取的方向。
上周四,帮朋友用pandas实现了按某列拆分成不同文件的需求。如果你知道“阿凯的Excel”插件,你就知道我写的插件可以实现这个功能。但是当这个插件面对百万行数据时,我只能说No~
一开始我跟那个朋友说用Python来实现,对方拒绝了,然后我以QQ远程桌面的形式给他展示了用Python处理的速度。怎么形容速度?也就是我执行代码的时候直接生成文件,不用等待时间,然后对方按照我分享的笔记安装Python安装包!
至于网络爬虫,无非是我自己的个人爱好,加上别人的需求~我也想把个人方向改成网站内容抓取-数据自动分析-辅助决策的方向。所以第一个数据源一定要自己解决,只能一点一点的学习~
excelvba抓取网页数据(使用Excel自带的PowerQuery获取网页表格数据(图))
网站优化 • 优采云 发表了文章 • 0 个评论 • 109 次浏览 • 2022-02-19 22:03
推荐阅读:SEO干货网站内链优化与网站优化>>推荐阅读:企业公众号运营全稿>>
VBA抢网的想法最初是因为我想在股票交易中更快地获取信息,又不想购买昂贵的经纪软件。后来调查发现Python其实是最著名的爬虫制作工具,但是需要安装环境,而且只能在自己的电脑上使用。抓牢。
(一)使用 Excel 自带的 Power Query 获取 web 表单
如果一种方法解决了现有的需求,老实说,我没有动力去寻找第二种方法。在使用VBA网页抓取之前,我已经开始使用Excel的Poewr Query做股票信息分析。我首先使用Power Query的“新建查询”功能从网页获取表格数据(具体方法请参考:/tech/2021 -05-06/doc-ikmyaawc3588981.shtml),可以直接更新到 Excel 表。当时选择的数据源是中国财经网的数据引擎(/cfidata.aspx)。不得不说,这个网站对于使用Excel自动获取web数据源来说真的很友好,因为都是可识别的表格数据。. 这是更新 Excel 后的样子。之后,您可以快速清洁,
但是后来发现这种方法的局限性,就是对数据源要求太高了。很多网站表格数据不能以Excel导入的网站数据源的形式识别,我想股票或者期货的历史数据不收录在这个网站里面。并且爬虫数据分析的Power Query方式,不支持WPS。就这样,我终于放弃了这个想法,开始探索真正的VBA网络捕获实现方法。
(二)Excel VBA实现期货行情获取及历史数据下载
第一步是选择数据源。如果使用 Python 网页抓取,其实数据源很容易找到。许多在线界面都对 Python 开放。开发者甚至不需要寻找源网页,就可以直接使用各种接口提供的现成的结构化数据。,甚至省略了数据处理步骤。不过毕竟还是有很多像我这样的人电脑上没有Python,也不想在电脑上安装Python库(这些现成的接口都需要电脑上安装Python库),或者不想看到电脑软件的变化。在不能使用的情况下,数据源还是比较通用的。在考察了中国期货市场后,我发现可以从四大交易所(郑州、大连、上海、中国金融期货交易所)的官网获取数据。这些网站提供下载链接和一键下载功能。然而,在对html请求和响应的后续分析中,最让我这个强迫症患者无法接受的情况发生了。四个交换中,三个可以被抓到,一个不能被反爬虫抓到。. . 这样,我们只好找其他接口,不行,我不能接受!后来发现,新浪界面真是个宝。所有四个交易所都包括在内。如果好,我决定分析这个网页,然后爬取。它成功了!附上新浪界面链接(这个网页需要自己分析,
实时报价:.cn/quotes_service/view/qihuohangqing.html#titlePos_1
历史数据:.cn/q/view/vFutures_History.php?jys=czce&pz=AP&hy=AP0&breed=AP0&type=inner&start=2021-11-23&end=2021-12-23
第二步是实现代码。VBA爬网入门可以参考B站UP主发布的免费教程(链接/视频/BV1uJ411t7hY/)。这次抢期货的时候,先分析了新浪财经的网页,发现这个界面并不复杂,可以直接用Winhttp请求,然后用正则表达式处理返回的数据。核心代码如下:
发送请求部分
正则表达式匹配并写入数组部分
需要注意的是,在更新产品市场时,产品名称是通过unicode码返回的,所以需要额外转换成汉字。在这一部分中,编写了一个自定义函数。代码如下:
网页抓取部分要注意的另一点是返回的json格式数据的处理。其实VBA可以参考脚本组件实现快速便捷的json数据解析,参考此类组件解析json,自动将unicode转成汉字。但是在这种方法的测试中,wps运行正常,但是有的excel会报错,说是429错误爬虫数据分析缺少ActiveX控件,不好解决。一般这种错误不是excel版本引起的,大概率是没有完整安装,或者wps和office同时安装导致部分系统组件注册失败。这种错误不能通过修改代码来解决(除非代码逻辑改了,其余的组件都没有调用),是系统问题,比如注册表键损坏,操作系统文件被删除,excel不完整安装完毕,系统文件损坏等等。所以最后为了增加兼容性,避免出现此类错误,重新修改了代码,不再使用脚本组件解析json,而是使用了正则表达式。
抓网后,简单写一些数据处理函数公式,设计两种存储方式(保存到当前工作簿,或者新建工作簿),这样软件功能就完成了。在计算日期时,excel自带的工作日功能非常有用。
第三步是交互形式。最后,设计了数据输入的交互表单。代码主要使用输入框方法。核心代码和接口如下:
目前我已经在我的网盘中共享了这个软件,后续更新(如果网络爬不上)版本也会在同一个网盘链接上共享。不过,我一直在努力开发一个软件,我仍然希望能得到一些支持。您可以试试T a B宝搜索“ExcelVBA期货市场历史数据下载器自动计算所有交易所产品的当期期差”。
类似获取股票信息的教程,可以参考我的另一篇文章文章/p/442447962
或T a B宝搜索“股票信息下载软件历史股价分红财务报表自动更新Excel网络爬虫VBA”。 查看全部
excelvba抓取网页数据(使用Excel自带的PowerQuery获取网页表格数据(图))
推荐阅读:SEO干货网站内链优化与网站优化>>推荐阅读:企业公众号运营全稿>>
VBA抢网的想法最初是因为我想在股票交易中更快地获取信息,又不想购买昂贵的经纪软件。后来调查发现Python其实是最著名的爬虫制作工具,但是需要安装环境,而且只能在自己的电脑上使用。抓牢。
(一)使用 Excel 自带的 Power Query 获取 web 表单
如果一种方法解决了现有的需求,老实说,我没有动力去寻找第二种方法。在使用VBA网页抓取之前,我已经开始使用Excel的Poewr Query做股票信息分析。我首先使用Power Query的“新建查询”功能从网页获取表格数据(具体方法请参考:/tech/2021 -05-06/doc-ikmyaawc3588981.shtml),可以直接更新到 Excel 表。当时选择的数据源是中国财经网的数据引擎(/cfidata.aspx)。不得不说,这个网站对于使用Excel自动获取web数据源来说真的很友好,因为都是可识别的表格数据。. 这是更新 Excel 后的样子。之后,您可以快速清洁,

但是后来发现这种方法的局限性,就是对数据源要求太高了。很多网站表格数据不能以Excel导入的网站数据源的形式识别,我想股票或者期货的历史数据不收录在这个网站里面。并且爬虫数据分析的Power Query方式,不支持WPS。就这样,我终于放弃了这个想法,开始探索真正的VBA网络捕获实现方法。
(二)Excel VBA实现期货行情获取及历史数据下载
第一步是选择数据源。如果使用 Python 网页抓取,其实数据源很容易找到。许多在线界面都对 Python 开放。开发者甚至不需要寻找源网页,就可以直接使用各种接口提供的现成的结构化数据。,甚至省略了数据处理步骤。不过毕竟还是有很多像我这样的人电脑上没有Python,也不想在电脑上安装Python库(这些现成的接口都需要电脑上安装Python库),或者不想看到电脑软件的变化。在不能使用的情况下,数据源还是比较通用的。在考察了中国期货市场后,我发现可以从四大交易所(郑州、大连、上海、中国金融期货交易所)的官网获取数据。这些网站提供下载链接和一键下载功能。然而,在对html请求和响应的后续分析中,最让我这个强迫症患者无法接受的情况发生了。四个交换中,三个可以被抓到,一个不能被反爬虫抓到。. . 这样,我们只好找其他接口,不行,我不能接受!后来发现,新浪界面真是个宝。所有四个交易所都包括在内。如果好,我决定分析这个网页,然后爬取。它成功了!附上新浪界面链接(这个网页需要自己分析,
实时报价:.cn/quotes_service/view/qihuohangqing.html#titlePos_1
历史数据:.cn/q/view/vFutures_History.php?jys=czce&pz=AP&hy=AP0&breed=AP0&type=inner&start=2021-11-23&end=2021-12-23
第二步是实现代码。VBA爬网入门可以参考B站UP主发布的免费教程(链接/视频/BV1uJ411t7hY/)。这次抢期货的时候,先分析了新浪财经的网页,发现这个界面并不复杂,可以直接用Winhttp请求,然后用正则表达式处理返回的数据。核心代码如下:
发送请求部分

正则表达式匹配并写入数组部分

需要注意的是,在更新产品市场时,产品名称是通过unicode码返回的,所以需要额外转换成汉字。在这一部分中,编写了一个自定义函数。代码如下:


网页抓取部分要注意的另一点是返回的json格式数据的处理。其实VBA可以参考脚本组件实现快速便捷的json数据解析,参考此类组件解析json,自动将unicode转成汉字。但是在这种方法的测试中,wps运行正常,但是有的excel会报错,说是429错误爬虫数据分析缺少ActiveX控件,不好解决。一般这种错误不是excel版本引起的,大概率是没有完整安装,或者wps和office同时安装导致部分系统组件注册失败。这种错误不能通过修改代码来解决(除非代码逻辑改了,其余的组件都没有调用),是系统问题,比如注册表键损坏,操作系统文件被删除,excel不完整安装完毕,系统文件损坏等等。所以最后为了增加兼容性,避免出现此类错误,重新修改了代码,不再使用脚本组件解析json,而是使用了正则表达式。
抓网后,简单写一些数据处理函数公式,设计两种存储方式(保存到当前工作簿,或者新建工作簿),这样软件功能就完成了。在计算日期时,excel自带的工作日功能非常有用。
第三步是交互形式。最后,设计了数据输入的交互表单。代码主要使用输入框方法。核心代码和接口如下:


目前我已经在我的网盘中共享了这个软件,后续更新(如果网络爬不上)版本也会在同一个网盘链接上共享。不过,我一直在努力开发一个软件,我仍然希望能得到一些支持。您可以试试T a B宝搜索“ExcelVBA期货市场历史数据下载器自动计算所有交易所产品的当期期差”。
类似获取股票信息的教程,可以参考我的另一篇文章文章/p/442447962
或T a B宝搜索“股票信息下载软件历史股价分红财务报表自动更新Excel网络爬虫VBA”。
excelvba抓取网页数据(如何不使用Python去爬取网页表格数据功能?)
网站优化 • 优采云 发表了文章 • 0 个评论 • 92 次浏览 • 2022-02-16 00:01
现在很多朋友都知道Python可以用来爬取数据,但是如果你想从零基础开始学习Python爬虫,还是需要一些时间来学习Python的。但是,如果是为了一些简单的网页表格数据爬取,就没有必要使用Python了。
所以今天我将教大家如何在不使用 Python 的情况下抓取网页数据。
Excel的通用方法之一就是Excel,Excel表格可以帮你实现简单的网页表格数据爬取功能。
首先找到你要爬取的数据表
比如今天爬中国天气网的广东天气预报~
然后我们从 网站 复制链接,打开 Excel,在菜单栏上找到:Data – From 网站
然后将刚才复制的链接粘贴到刚刚打开的链接中:New Web Query
点击Go打开网站,在这里预览中找到你要导入的数据表,勾选左上角
选择好后点击右下角的导入,将选中的表格数据导入Excel
数据导入...
接下来就可以在Excel表格中一一看到想要呈现的数据了~
也有一些朋友有疑问。这样导出的数据是固定的。如果网页数据更新了,是否需要重新导入?
其实不是,Excel还自带数据刷新功能。我们还是在菜单栏中找到:data-refresh all下的link properties
在链接属性处选择刷新条件、刷新频率、时间等,然后Excel会根据你设置的刷新属性自动更新数据~
以上就是一个自动抓取刷新数据的Excel表格的完成啦~~
当然,使用 Excel 表格爬取数据有利有弊。优点是利用Excel自带的函数来采集和更新数据,简单方便,不涉及编程等繁琐操作。缺点是Excel网页数据抓取只能抓取表格数据,其他数据获取起来有些困难。
所以如果你想获得更多样化的网页数据,不妨学习一下Python,它是目前爬虫中最容易学习的。一波安利~
如果还想知道更多实用的小技巧,可以关注一下,下次更新及时通知 W= 查看全部
excelvba抓取网页数据(如何不使用Python去爬取网页表格数据功能?)
现在很多朋友都知道Python可以用来爬取数据,但是如果你想从零基础开始学习Python爬虫,还是需要一些时间来学习Python的。但是,如果是为了一些简单的网页表格数据爬取,就没有必要使用Python了。
所以今天我将教大家如何在不使用 Python 的情况下抓取网页数据。
Excel的通用方法之一就是Excel,Excel表格可以帮你实现简单的网页表格数据爬取功能。
首先找到你要爬取的数据表
比如今天爬中国天气网的广东天气预报~
然后我们从 网站 复制链接,打开 Excel,在菜单栏上找到:Data – From 网站
然后将刚才复制的链接粘贴到刚刚打开的链接中:New Web Query
点击Go打开网站,在这里预览中找到你要导入的数据表,勾选左上角
选择好后点击右下角的导入,将选中的表格数据导入Excel
数据导入...
接下来就可以在Excel表格中一一看到想要呈现的数据了~
也有一些朋友有疑问。这样导出的数据是固定的。如果网页数据更新了,是否需要重新导入?
其实不是,Excel还自带数据刷新功能。我们还是在菜单栏中找到:data-refresh all下的link properties
在链接属性处选择刷新条件、刷新频率、时间等,然后Excel会根据你设置的刷新属性自动更新数据~
以上就是一个自动抓取刷新数据的Excel表格的完成啦~~
当然,使用 Excel 表格爬取数据有利有弊。优点是利用Excel自带的函数来采集和更新数据,简单方便,不涉及编程等繁琐操作。缺点是Excel网页数据抓取只能抓取表格数据,其他数据获取起来有些困难。
所以如果你想获得更多样化的网页数据,不妨学习一下Python,它是目前爬虫中最容易学习的。一波安利~
如果还想知道更多实用的小技巧,可以关注一下,下次更新及时通知 W=
excelvba抓取网页数据( 一下如何用Excel快速抓取网页数据(图))
网站优化 • 优采云 发表了文章 • 0 个评论 • 111 次浏览 • 2022-02-13 16:02
一下如何用Excel快速抓取网页数据(图))
网站上的数据来源是我们统计分析的重要信息来源。我们生活中经常听到一个词叫“爬虫”,它可以快速爬取网页上的数据,这对于数据分析相关的工作来说是极其重要的,也是必备的技能之一。但是,大多数爬虫都需要编程知识,普通人很难上手。今天我将向您展示如何使用 Excel 快速抓取 Web 数据。
1、首先打开要抓取的数据的网站,复制网站的地址。
2、创建一个新的 Excel 工作簿,然后单击“数据”菜单 >“获取外部数据”选项卡中的“来自网站”选项。
在弹出的“New Web Query”对话框中,在地址栏中输入要捕获的网站的地址,点击“Go”
点击黄色导入箭头,选择要抓取的部分,如图。点击导入。
3、选择存储数据的位置(默认选中的单元格),点击确定。一般建议将数据存储在“A1”单元格中。
4、如果想让Excel工作簿数据根据网站的数据实时自动更新,那么我们需要在“属性”中进行设置。可以设置“允许后台刷新”、“刷新频率”、“打开文件时刷新数据”等。
拿到数据之后,就需要对数据进行处理,而处理数据是比较重要的一环。更多数据处理技巧,请关注我!
如果对你有帮助,记得点赞转发。
关注我,了解更多 Excel 技巧,让工作更轻松。 查看全部
excelvba抓取网页数据(
一下如何用Excel快速抓取网页数据(图))
网站上的数据来源是我们统计分析的重要信息来源。我们生活中经常听到一个词叫“爬虫”,它可以快速爬取网页上的数据,这对于数据分析相关的工作来说是极其重要的,也是必备的技能之一。但是,大多数爬虫都需要编程知识,普通人很难上手。今天我将向您展示如何使用 Excel 快速抓取 Web 数据。
1、首先打开要抓取的数据的网站,复制网站的地址。
2、创建一个新的 Excel 工作簿,然后单击“数据”菜单 >“获取外部数据”选项卡中的“来自网站”选项。
在弹出的“New Web Query”对话框中,在地址栏中输入要捕获的网站的地址,点击“Go”
点击黄色导入箭头,选择要抓取的部分,如图。点击导入。
3、选择存储数据的位置(默认选中的单元格),点击确定。一般建议将数据存储在“A1”单元格中。
4、如果想让Excel工作簿数据根据网站的数据实时自动更新,那么我们需要在“属性”中进行设置。可以设置“允许后台刷新”、“刷新频率”、“打开文件时刷新数据”等。
拿到数据之后,就需要对数据进行处理,而处理数据是比较重要的一环。更多数据处理技巧,请关注我!
如果对你有帮助,记得点赞转发。
关注我,了解更多 Excel 技巧,让工作更轻松。
excelvba抓取网页数据(Sub提取word表格()()表格当中图)
网站优化 • 优采云 发表了文章 • 0 个评论 • 139 次浏览 • 2022-02-13 15:26
今天的例子来自公众号的一位粉丝,如下图:
有几个word文档形式相同但内容不同。要求是:将word中表格的所有内容汇总成一个excel表格,如下图:
是的,你也可以在word中使用vba代码。
思路也很简单:遍历读取每个word文档,将指定的表格内容提取到excel表格中。源码如下。
子提取词表()
mypath=ThisWorkbook.Path&"\"
myname=Dir(mypath&"*.docx")
m=1
DoWhilemyname""
Setmydoc=GetObject(mypath&myname)
用我的文档
m=m+1
With.Tables(1)
单元格(m,1)=m-1'Number
Range("A1:F1")=Array("序列号","姓名","性别","身份证号","地址","联系方式")
Cells(m,2)=Replace(.cell(1,2).Range.Text,"","")
Cells(m,3)=Replace(.cell(2,2).Range.Text,"","")
Cells(m,4)=Replace(.cell(3,2).Range.Text,"","")
Cells(m,5)=Replace(.cell(4,2).Range.Text,"","")
Cells(m,6)=Replace(.cell(5,2).Range.Text,"","")
结束
.CloseFalse
结束
我的名字=Dir()
循环
Setmydoc=Nothing
MsgBox "提取完成"
结束子
看效果:
是不是很神奇?
如果您在操作过程中有任何问题,欢迎交流。源文件准备好,如有需要,可以后台回复“word form”。 查看全部
excelvba抓取网页数据(Sub提取word表格()()表格当中图)
今天的例子来自公众号的一位粉丝,如下图:
有几个word文档形式相同但内容不同。要求是:将word中表格的所有内容汇总成一个excel表格,如下图:
是的,你也可以在word中使用vba代码。
思路也很简单:遍历读取每个word文档,将指定的表格内容提取到excel表格中。源码如下。
子提取词表()
mypath=ThisWorkbook.Path&"\"
myname=Dir(mypath&"*.docx")
m=1
DoWhilemyname""
Setmydoc=GetObject(mypath&myname)
用我的文档
m=m+1
With.Tables(1)
单元格(m,1)=m-1'Number
Range("A1:F1")=Array("序列号","姓名","性别","身份证号","地址","联系方式")
Cells(m,2)=Replace(.cell(1,2).Range.Text,"","")
Cells(m,3)=Replace(.cell(2,2).Range.Text,"","")
Cells(m,4)=Replace(.cell(3,2).Range.Text,"","")
Cells(m,5)=Replace(.cell(4,2).Range.Text,"","")
Cells(m,6)=Replace(.cell(5,2).Range.Text,"","")
结束
.CloseFalse
结束
我的名字=Dir()
循环
Setmydoc=Nothing
MsgBox "提取完成"
结束子
看效果:
是不是很神奇?
如果您在操作过程中有任何问题,欢迎交流。源文件准备好,如有需要,可以后台回复“word form”。
excelvba抓取网页数据( VBA·5个月前如何使用VBA网抓的,我基本都没有回复 )
网站优化 • 优采云 发表了文章 • 0 个评论 • 66 次浏览 • 2022-02-05 22:04
VBA·5个月前如何使用VBA网抓的,我基本都没有回复
)
使用Excel+VBA操作网页
黄晨
·因为5个月前知乎的一些回答,最近有私信问我怎么用VBA抓图,但我基本没有回复。因为这个问题太大了,对于有基础知识的人来说,在百度或者ExcelHome论坛上其实很容易找到答案,我也不用多说。对于没有基础知识的人来说,三言两语是不可能解决问题的。我不想将私人消息变成聊天窗口。趁着知乎开专栏的机会,正好来详细解释一下这个问题。
我对Excel和VBA的了解有限,只能解决一些遇到的问题,不一定适用于所有场景。以下内容基于对基本 VBA 使用以及 HTML 语言知识的理解:
一、前期准备
据我所知,VBA不能操作任何浏览器和网页,我们能做的就是在IE上做一些操作,没错,就是IE。不要告诉我我的电脑上没有IE,所以我可以Exit Sub。就像 Python 使用 import 和 C# 使用 using 一样,VBA 也需要引用一些库来操作 IE,不过好在它是微软的产品,所以我们可以轻松使用 VBA 自带的一些库。
我们要做的第一件事就是参考 VBA 中的 Micorsoft Internet Controls。从名字上我们就知道它是用来帮助我们控制IE页面的。
二、网络运营
引用 Micorsoft Internet Controls 之后,我们可以对页面做任何我们想做的事情,但我们必须在主页上拥有一个页面,上帝说我们应该有一个页面!
1、打开网页
我们以百度搜索“chahu”关键词为例:
1 With CreateObject("internetexplorer.application")
2 .Visible = True
3 .Navigate "https://www.baidu.com/s?wd=扯乎"
4'关闭网页
5' .Quit
6 End With
7
8
代码很简单,先创建一个IE对象,然后赋值一些属性。Visible 是可见性,表示在操作网页时是否会看到该网页。熟练后可以设置为False,这样不仅让程序运行起来感觉很神秘(其实不然),速度也快了一点。
但是有一点要记住,这个网页我们打开后并没有关闭,也就是说程序结束后需要手动关闭。如果网页不可见,则无法手动关闭。代码的注释部分用于关闭网页。导航不用说就是URL。
我们必须等待网页完全加载后才能开始抓取信息。这时候,我们使用:(从这里开始,所有的代码都需要写在With代码块中)
1 While .ReadyState 4 Or .Busy
2 DoEvents
3 Wend
4
5
Busy是网页的忙碌状态,ReadyState是HTTP的五个就绪状态,对应如下:
2、获取信息
我们先抓取页面上的所有内容,后面过滤掉有用的部分,然后慢慢的给抓取添加条件。
1 Set dmt = .Document
2 For i = 0 To dmt.all.Length - 1
3 Set htMent = dmt.all(i)
4 With ActiveSheet
5 .Cells(i + 2, "A") = htMent.tagName
6 .Cells(i + 2, "B") = TypeName(htMent)
7 .Cells(i + 2, "C") = htMent.ID
8 .Cells(i + 2, "D") = htMent.Name
9 .Cells(i + 2, "E") = htMent.Value
10 .Cells(i + 2, "F") = htMent.Text
11 .Cells(i + 2, "G") = htMent.innerText
12 End With
13 Next i
14
15
这段代码有点类似于JS,需要从IE.Document.all中找出页面上的所有节点。这里还有一些其他的方法:
这些都是在爬取整个页面内容后方便用来帮助过滤有效信息的。当然,all 仍然是最好用的,因为 all 也有 all("IDName") 和 all.IDName 用法。
上面代码部分返回的属性值是HTML的基本内容,就不一一解释了。
3、填写信息
当然,爬网神器依然是 Python。大多数人使用Excel的目的是自动填写页面内容,直接将表单提交到页面,输入问卷。爬取页面内容后,填充就更简单了,直接给页面标签的Value属性赋值即可。
但是网页中除了文本框外,可能还有其他一些没有Value的标签,比如:下拉菜单、单选按钮。给这个内容赋值需要一些基本的HTML知识。
1'下拉菜单选择
2.all("select")(0).Selected = True
3'单选按钮选择
4.all("radio").Checked = True
5'复选按钮选择
6.all("checkbox").Checked = True
7
8
下拉菜单是一个选择标签,每个选项都在一个选项标签中,所以要返回一个集合,如果需要选择一个选项,需要修改对应的Selected属性为True。单选按钮和复选按钮都是输入标签。不同的是类型是单选和复选框。要选择一个选项,您需要修改相应的 Checked 属性。
三、数据接口
有时我们可以直接获取一些API。当然,通过API返回数据比打开网页更方便快捷,使用的方法也不同。
1、请求接口
比如我从网上找了一个可以按城市查询免费WIFI的API,通过Excel接口使用如下代码访问:(虽然是免费的,但我隐藏了我的AppKey以免麻烦)
1 Dim http
2 Set http = CreateObject("Microsoft.XMLHTTP")
3 http.Open "GET", "http://api.avatardata.cn/Wifi/QueryByCity", False
4 http.setRequestHeader "CONTENT-TYPE", "application/x-www-form-urlencoded"
5 http.send "key=[AppKey]&city=北京&page=1"
6
7
这时候我们创建的对象就不再是IE了,而是一个HTTP对象。这里使用ajax的Open方法,GET为数据发送方法,第二个参数为接口地址,第三个参数指定请求方法是否异步。如果这个API有账号密码,分别写在第四个和第五个参数中。
setRequestHeader就是向接口发送一个HTTP协议头文件,send的最终内容就是接口参数。当然,这个QueryString也可以直接写在URL中,发送一个空字符串即可。
2、接口返回
接口返回采集的方式很简单:
1 If http.Status = 200 Then Range("A1").Value = http.responseText
2
3 查看全部
excelvba抓取网页数据(
VBA·5个月前如何使用VBA网抓的,我基本都没有回复
)
使用Excel+VBA操作网页
黄晨
·因为5个月前知乎的一些回答,最近有私信问我怎么用VBA抓图,但我基本没有回复。因为这个问题太大了,对于有基础知识的人来说,在百度或者ExcelHome论坛上其实很容易找到答案,我也不用多说。对于没有基础知识的人来说,三言两语是不可能解决问题的。我不想将私人消息变成聊天窗口。趁着知乎开专栏的机会,正好来详细解释一下这个问题。
我对Excel和VBA的了解有限,只能解决一些遇到的问题,不一定适用于所有场景。以下内容基于对基本 VBA 使用以及 HTML 语言知识的理解:
一、前期准备
据我所知,VBA不能操作任何浏览器和网页,我们能做的就是在IE上做一些操作,没错,就是IE。不要告诉我我的电脑上没有IE,所以我可以Exit Sub。就像 Python 使用 import 和 C# 使用 using 一样,VBA 也需要引用一些库来操作 IE,不过好在它是微软的产品,所以我们可以轻松使用 VBA 自带的一些库。
我们要做的第一件事就是参考 VBA 中的 Micorsoft Internet Controls。从名字上我们就知道它是用来帮助我们控制IE页面的。
二、网络运营
引用 Micorsoft Internet Controls 之后,我们可以对页面做任何我们想做的事情,但我们必须在主页上拥有一个页面,上帝说我们应该有一个页面!
1、打开网页
我们以百度搜索“chahu”关键词为例:
1 With CreateObject("internetexplorer.application")
2 .Visible = True
3 .Navigate "https://www.baidu.com/s?wd=扯乎"
4'关闭网页
5' .Quit
6 End With
7
8
代码很简单,先创建一个IE对象,然后赋值一些属性。Visible 是可见性,表示在操作网页时是否会看到该网页。熟练后可以设置为False,这样不仅让程序运行起来感觉很神秘(其实不然),速度也快了一点。
但是有一点要记住,这个网页我们打开后并没有关闭,也就是说程序结束后需要手动关闭。如果网页不可见,则无法手动关闭。代码的注释部分用于关闭网页。导航不用说就是URL。
我们必须等待网页完全加载后才能开始抓取信息。这时候,我们使用:(从这里开始,所有的代码都需要写在With代码块中)
1 While .ReadyState 4 Or .Busy
2 DoEvents
3 Wend
4
5
Busy是网页的忙碌状态,ReadyState是HTTP的五个就绪状态,对应如下:
2、获取信息
我们先抓取页面上的所有内容,后面过滤掉有用的部分,然后慢慢的给抓取添加条件。
1 Set dmt = .Document
2 For i = 0 To dmt.all.Length - 1
3 Set htMent = dmt.all(i)
4 With ActiveSheet
5 .Cells(i + 2, "A") = htMent.tagName
6 .Cells(i + 2, "B") = TypeName(htMent)
7 .Cells(i + 2, "C") = htMent.ID
8 .Cells(i + 2, "D") = htMent.Name
9 .Cells(i + 2, "E") = htMent.Value
10 .Cells(i + 2, "F") = htMent.Text
11 .Cells(i + 2, "G") = htMent.innerText
12 End With
13 Next i
14
15
这段代码有点类似于JS,需要从IE.Document.all中找出页面上的所有节点。这里还有一些其他的方法:
这些都是在爬取整个页面内容后方便用来帮助过滤有效信息的。当然,all 仍然是最好用的,因为 all 也有 all("IDName") 和 all.IDName 用法。
上面代码部分返回的属性值是HTML的基本内容,就不一一解释了。
3、填写信息
当然,爬网神器依然是 Python。大多数人使用Excel的目的是自动填写页面内容,直接将表单提交到页面,输入问卷。爬取页面内容后,填充就更简单了,直接给页面标签的Value属性赋值即可。
但是网页中除了文本框外,可能还有其他一些没有Value的标签,比如:下拉菜单、单选按钮。给这个内容赋值需要一些基本的HTML知识。
1'下拉菜单选择
2.all("select")(0).Selected = True
3'单选按钮选择
4.all("radio").Checked = True
5'复选按钮选择
6.all("checkbox").Checked = True
7
8
下拉菜单是一个选择标签,每个选项都在一个选项标签中,所以要返回一个集合,如果需要选择一个选项,需要修改对应的Selected属性为True。单选按钮和复选按钮都是输入标签。不同的是类型是单选和复选框。要选择一个选项,您需要修改相应的 Checked 属性。
三、数据接口
有时我们可以直接获取一些API。当然,通过API返回数据比打开网页更方便快捷,使用的方法也不同。
1、请求接口
比如我从网上找了一个可以按城市查询免费WIFI的API,通过Excel接口使用如下代码访问:(虽然是免费的,但我隐藏了我的AppKey以免麻烦)
1 Dim http
2 Set http = CreateObject("Microsoft.XMLHTTP")
3 http.Open "GET", "http://api.avatardata.cn/Wifi/QueryByCity", False
4 http.setRequestHeader "CONTENT-TYPE", "application/x-www-form-urlencoded"
5 http.send "key=[AppKey]&city=北京&page=1"
6
7
这时候我们创建的对象就不再是IE了,而是一个HTTP对象。这里使用ajax的Open方法,GET为数据发送方法,第二个参数为接口地址,第三个参数指定请求方法是否异步。如果这个API有账号密码,分别写在第四个和第五个参数中。
setRequestHeader就是向接口发送一个HTTP协议头文件,send的最终内容就是接口参数。当然,这个QueryString也可以直接写在URL中,发送一个空字符串即可。
2、接口返回
接口返回采集的方式很简单:
1 If http.Status = 200 Then Range("A1").Value = http.responseText
2
3
excelvba抓取网页数据( VBA·5个月前如何使用VBA网抓的? )
网站优化 • 优采云 发表了文章 • 0 个评论 • 88 次浏览 • 2022-02-04 15:23
VBA·5个月前如何使用VBA网抓的?
)
使用Excel+VBA操作网页
黄晨5 个月前
由于知乎中的一些答案,最近总是有私信问我如何使用VBA进行抓包,但我基本没有回复。因为这个问题太大了,对于有基础知识的人来说,在百度或者ExcelHome论坛上其实很容易找到答案,我也不用多说。对于没有基础知识的人来说,三言两语是不可能解决问题的。我不想将私人消息变成聊天窗口。趁着知乎开专栏的机会,正好来详细解释一下这个问题。
我对Excel和VBA的了解有限,只能解决一些遇到的问题,不一定适用于所有场景。以下内容是在了解基本VBA使用和HTML语言知识的基础上创建的:css
1、前期准备
据我所知,VBA不能操作任何浏览器和网页,我们能做的就是在IE上做一些操作,是的,只有IE。不要告诉我我的电脑上没有IE,所以我可以Exit Sub。就像 Python 使用 import 和 C# 使用 using 一样,VBA 也需要参考一些库来操作 IE,但好在它们都是微软的产品,所以我们可以轻松使用 VBA 自带的一些库。阿贾克斯
我们要做的第一件事就是参考 VBA 中的 Micorsoft Internet Controls。从名字上我们就知道它是用来帮助我们控制IE页面的。json
2、网页操作
引用微软互联网控制之后,我们可以对页面做任何我们想做的事情,但我们必须在主页上有一个页面,上帝说我们必须有一个页面!api
一、打开网页数组
以百度搜索“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 的五个就绪状态,对应如下: 异步
二、获取信息
我们先抓取页面上的所有内容,后面过滤掉有用的部分,然后慢慢给抓取添加条件。
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的基本内容,就不一一解释了。
三、填写信息
虽然网页爬取神器还是Python,但是大部分人使用Excel的目的是自动填写页面内容,直接提交表单到页面,输入问卷。爬取页面内容后,填充就更简单了,只需要直接给页面标签的Value属性赋值即可。
但是网页中除了文本框外,可能还有其他一些没有Value的标签,比如:下拉菜单、单选按钮。给这个内容赋值需要一些基本的HTML知识。
'下拉菜单选择
.all("select")(0).Selected = True
'单选按钮选择
.all("radio").Checked = True
'复选按钮选择
.all("checkbox").Checked = True
下拉菜单是一个选择标签,每个选项都在一个选项标签中,所以返回一个集合。要选择一个选项,请将相应的 Selected 属性修改为 True。单选按钮和复选按钮都是输入标签。不同的是类型是单选和复选框。要选择一个选项,您需要修改相应的 Checked 属性。
3、数据接口
有时我们可以直接获取一些API。当然,通过 API 返回数据比打开网页更方便快捷,但使用的方法也不同。
一、请求接口
比如我从网上获取了一个可以查询某城市免费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协议头文件,最后send的内容就是接口参数。当然,这个QueryString也可以直接写在URL中,发送一个空字符串即可。
二、接口返回
接口返回采集的方式很简单:
If http.Status = 200 Then Range("A1").Value = http.responseText 查看全部
excelvba抓取网页数据(
VBA·5个月前如何使用VBA网抓的?
)
使用Excel+VBA操作网页

黄晨5 个月前
由于知乎中的一些答案,最近总是有私信问我如何使用VBA进行抓包,但我基本没有回复。因为这个问题太大了,对于有基础知识的人来说,在百度或者ExcelHome论坛上其实很容易找到答案,我也不用多说。对于没有基础知识的人来说,三言两语是不可能解决问题的。我不想将私人消息变成聊天窗口。趁着知乎开专栏的机会,正好来详细解释一下这个问题。
我对Excel和VBA的了解有限,只能解决一些遇到的问题,不一定适用于所有场景。以下内容是在了解基本VBA使用和HTML语言知识的基础上创建的:css
1、前期准备
据我所知,VBA不能操作任何浏览器和网页,我们能做的就是在IE上做一些操作,是的,只有IE。不要告诉我我的电脑上没有IE,所以我可以Exit Sub。就像 Python 使用 import 和 C# 使用 using 一样,VBA 也需要参考一些库来操作 IE,但好在它们都是微软的产品,所以我们可以轻松使用 VBA 自带的一些库。阿贾克斯
我们要做的第一件事就是参考 VBA 中的 Micorsoft Internet Controls。从名字上我们就知道它是用来帮助我们控制IE页面的。json
2、网页操作
引用微软互联网控制之后,我们可以对页面做任何我们想做的事情,但我们必须在主页上有一个页面,上帝说我们必须有一个页面!api
一、打开网页数组
以百度搜索“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 的五个就绪状态,对应如下: 异步
二、获取信息
我们先抓取页面上的所有内容,后面过滤掉有用的部分,然后慢慢给抓取添加条件。
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的基本内容,就不一一解释了。
三、填写信息
虽然网页爬取神器还是Python,但是大部分人使用Excel的目的是自动填写页面内容,直接提交表单到页面,输入问卷。爬取页面内容后,填充就更简单了,只需要直接给页面标签的Value属性赋值即可。
但是网页中除了文本框外,可能还有其他一些没有Value的标签,比如:下拉菜单、单选按钮。给这个内容赋值需要一些基本的HTML知识。
'下拉菜单选择
.all("select")(0).Selected = True
'单选按钮选择
.all("radio").Checked = True
'复选按钮选择
.all("checkbox").Checked = True
下拉菜单是一个选择标签,每个选项都在一个选项标签中,所以返回一个集合。要选择一个选项,请将相应的 Selected 属性修改为 True。单选按钮和复选按钮都是输入标签。不同的是类型是单选和复选框。要选择一个选项,您需要修改相应的 Checked 属性。
3、数据接口
有时我们可以直接获取一些API。当然,通过 API 返回数据比打开网页更方便快捷,但使用的方法也不同。
一、请求接口
比如我从网上获取了一个可以查询某城市免费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协议头文件,最后send的内容就是接口参数。当然,这个QueryString也可以直接写在URL中,发送一个空字符串即可。
二、接口返回
接口返回采集的方式很简单:
If http.Status = 200 Then Range("A1").Value = http.responseText
Excel批量下载图片,你会吗?
网站优化 • 优采云 发表了文章 • 0 个评论 • 208 次浏览 • 2022-09-01 23:23
昨天我们分享了如何使用ExcelVBA来抓取网页上的数据,今天我们来给大家送点福利,爱美之心人皆有之!
看到这些美女了吗?别以为小编无聊一个一个去下载的,这个都是Excel干!
不管我的事情!
让我们来看看Excel他到底干了啥!有这么多妹子~
成品效果演示
我们今天测试的网址:
下面我们进入正式的处理部分,这个网站应该是个人写的,猜测,编码用的gbk,所以还要转码,有点麻烦!不过不用慌,模仿懂不!
编码,我们可以查看源码中的charset,这些是html的一些基础知识,有兴趣慢慢补吧!
获取网页源码函数
一般我们获取的是网页的responseText即可,但是这个网页的编码是gbk,我们需要先获取 responsebody,再转码!
下载图片,我们要的是就是流数据,所以不需要转码,所以这个函数,我们还要分一下情况,所有有了第二参数来控制是否直接返回流数据!
下面是论坛大佬写的转码函数,非小编现写!
提取图片的链接
右击-【查看网页源码】,根据看到的关键词去查找,可以找到我们图片的链接!
这个比较简单,我们就通过正则来提取吧!
每个图片的网页都有一个5位数的编码,我们提取他,然后来拼接出实际网址!
其实在一级页面也可以直接下载图片 看到后面额jpg那个地址了吗!但是这个是预览图,不高清,所以我们要进入下载界面去下载高清图片!
下面是提取二级的代码,已封装函数,方便后面调用!
有了图片的网址和名称,后面我们只要写一个下载函数即可!
保存图片
流数据保存成图片或者文件,我们可以直接通过文本文件写入形式写入,也可以使用我们封装的这个函数来处理!
我们直接按照思路,依次调用封装好的各个函数,即可下载图片!
到这里其实就是我们的全部代码了,还有翻页自己去看一下网址规则,这里就不提供了,本文只是教学演示,大家喜欢妹子可以联系我打包下载,就别一起去下载了,服务器扛不住!
本文由“壹伴编辑器”提供技术支持不知道,今天你是否真的学废了!Excel学得好,美女真的少不了~
给你们偷了一张~~ 查看全部
Excel批量下载图片,你会吗?
昨天我们分享了如何使用ExcelVBA来抓取网页上的数据,今天我们来给大家送点福利,爱美之心人皆有之!
看到这些美女了吗?别以为小编无聊一个一个去下载的,这个都是Excel干!
不管我的事情!
让我们来看看Excel他到底干了啥!有这么多妹子~
成品效果演示
我们今天测试的网址:
下面我们进入正式的处理部分,这个网站应该是个人写的,猜测,编码用的gbk,所以还要转码,有点麻烦!不过不用慌,模仿懂不!
编码,我们可以查看源码中的charset,这些是html的一些基础知识,有兴趣慢慢补吧!

获取网页源码函数
一般我们获取的是网页的responseText即可,但是这个网页的编码是gbk,我们需要先获取 responsebody,再转码!
下载图片,我们要的是就是流数据,所以不需要转码,所以这个函数,我们还要分一下情况,所有有了第二参数来控制是否直接返回流数据!
下面是论坛大佬写的转码函数,非小编现写!
提取图片的链接
右击-【查看网页源码】,根据看到的关键词去查找,可以找到我们图片的链接!
这个比较简单,我们就通过正则来提取吧!
每个图片的网页都有一个5位数的编码,我们提取他,然后来拼接出实际网址!
其实在一级页面也可以直接下载图片 看到后面额jpg那个地址了吗!但是这个是预览图,不高清,所以我们要进入下载界面去下载高清图片!

下面是提取二级的代码,已封装函数,方便后面调用!
有了图片的网址和名称,后面我们只要写一个下载函数即可!
保存图片
流数据保存成图片或者文件,我们可以直接通过文本文件写入形式写入,也可以使用我们封装的这个函数来处理!
我们直接按照思路,依次调用封装好的各个函数,即可下载图片!
到这里其实就是我们的全部代码了,还有翻页自己去看一下网址规则,这里就不提供了,本文只是教学演示,大家喜欢妹子可以联系我打包下载,就别一起去下载了,服务器扛不住!
本文由“壹伴编辑器”提供技术支持不知道,今天你是否真的学废了!Excel学得好,美女真的少不了~
给你们偷了一张~~
Excel VBA代码打开网页,别担心,您只需1行代码即可
网站优化 • 优采云 发表了文章 • 0 个评论 • 286 次浏览 • 2022-08-27 23:56
有些时候,我们在遇到需要随时抓取网页端的数据或者需要打开某个指定的网页,其实可以用VBA来完成这个。
本次完成这个打开指定的网页,我们只需要一句即可,如下所示的程序。代码过程使用FollowHyperlink方法打开Excel教案的主页。
程序执行的动画如下所示:
看起来代码是非常的简洁,但是你知道这个的语法吗?一起来看看吧!
FollowHyperlink的语法如下:
expression.FollowHyperlink(Address, SubAddress, NewWindow, AddHistory, ExtraInfo, Method, HeaderInfo)
第一个参数ression是必需的,可以理解为一个workbook对象。第二个参数Address是必需的,String类型,就是我们需要打开指定的网页地址。第三个参数SubAddress是可选的,目标网址中的位置,默认值为空字符串。第四个参数NewWindow是可选的,Variant类型,如果该值为True,则将目标应用程序显示到一个新窗口中。默认值为False。
这个的官方的解释如下所示:
这个的使用方法在我们抓取网页数据或者需要打开指定网页的时候,是经常用到的。所以今天之所以说这个,是因为有网页给我留言,如何用VBA打开指定网页,所以写出来和大家分享一下。每天一个小知识点,你会进步一大步。
如果有不明白的或者不懂的可以在下方留言,我们会一一解答的。
我是Excel教案,关注我持续分享更多的Excel技巧!
查看全部
Excel VBA代码打开网页,别担心,您只需1行代码即可
有些时候,我们在遇到需要随时抓取网页端的数据或者需要打开某个指定的网页,其实可以用VBA来完成这个。
本次完成这个打开指定的网页,我们只需要一句即可,如下所示的程序。代码过程使用FollowHyperlink方法打开Excel教案的主页。
程序执行的动画如下所示:

看起来代码是非常的简洁,但是你知道这个的语法吗?一起来看看吧!
FollowHyperlink的语法如下:
expression.FollowHyperlink(Address, SubAddress, NewWindow, AddHistory, ExtraInfo, Method, HeaderInfo)
第一个参数ression是必需的,可以理解为一个workbook对象。第二个参数Address是必需的,String类型,就是我们需要打开指定的网页地址。第三个参数SubAddress是可选的,目标网址中的位置,默认值为空字符串。第四个参数NewWindow是可选的,Variant类型,如果该值为True,则将目标应用程序显示到一个新窗口中。默认值为False。

这个的官方的解释如下所示:
这个的使用方法在我们抓取网页数据或者需要打开指定网页的时候,是经常用到的。所以今天之所以说这个,是因为有网页给我留言,如何用VBA打开指定网页,所以写出来和大家分享一下。每天一个小知识点,你会进步一大步。
如果有不明白的或者不懂的可以在下方留言,我们会一一解答的。
我是Excel教案,关注我持续分享更多的Excel技巧!
用Excel来写个爬虫怎么样?
网站优化 • 优采云 发表了文章 • 0 个评论 • 87 次浏览 • 2022-08-05 04:50
大家好!我是啥子都不精通,但是懂一丢丢Excel的E精精!
不知道大家阅读到此文是什么时辰,我现在是夜深人静,安心码字的午夜!
今天我们来给大家分享一下,如何使用Excel来采集数据! 我们就以豆瓣读书TOP250为例吧(仅用于交流学习演示使用)!
网址:
实际翻页有变化,后面再唠!
今天我们采用的方式是VBA来处理,之前我们也分享过使用Power Query的方式!
感兴趣的,点击飞机票直达->【】
爬虫涉及的东西太多,今天我们尽力简单一下,只谈实操,不涉及过多理论!
今天我们要处理的是一个静态网页,所以不涉及分析ajax等乱七八糟的东西!
实现的效果预览
步骤01 | 获取网页对应的源码
网页采集需要获取一些请求头参数,我们可以直接按下F12,在【Network】 -【Doc】 对应的链接中 Headers 下面的 【Request Headers】 中找到!
我们简单写一个获取HTML源码的代码,获取到源码后,下一步就是处理源码!(网址和Referer批量抓取有变化)
通过Main函数调用,测试一下结果中是否有我们要的关键信息,比如红楼
返回了9570 非0 说明包含,当然我们也可以把这个结果写入txt,方便观察
步骤02 | 按照规则提取内容
提取内容,我们可以使用DOM结果xpath处理,也可以直接使用粗暴的正则,这里我们就正则吧!
>查看网页源码网页任意位置,右击 【查看网页源代码】,通过网页源码和网页实际显示内容的比对,我们可以分析是否是静态网页,同时如果使用正则提取,一定要根据这里来写!
查找关键信息,Ctrl+F 调出浏览器查询,输入红楼,可以看到对应的位置,
> 提取内容
我们要分析提取的内容结果!今天我们使用htmlfile对象提取内容对象的一些基本的东西学习参考:
我们直接来看代码(核心部分):根据网页的结构分析+htmlfile对象分析后所得!
一般来说还有一步就是存储数据,python等其他语言一般考虑存储到数据库(数据量大),在Excel中可以直接存储到Excel中!
步骤03 | 保存数据,写入Excel
只是简单的把数组内容写入单元格,一般我们可以根据实际需要对需要做一定的清洗后再写入,比如评分人数,我们只要数字等,这个大家自行处理即可,不是本文重点,这里就不再啰嗦处理!
完整代码(加一点细节):
本文由“壹伴编辑器”提供技术支
复制可自行使用:
'公众号:Excel办公实战'作者:E精精'功能:获取HTML源码(参数页码)'日期:20210504'------------------------------------------------------------------Function GetHTML(ByVal page As Long) Dim strText As String Dim StrURL As String StrURL = "https://book.douban.com/top250?start=" & page * 25 strRef = "https://book.douban.com/top250?start=" & _ Application.Min(0, page - 1) * 25 With CreateObject("WinHttp.WinHttpRequest.5.1") .Open "GET", StrURL, False '添加请求头 .setRequestHeader "Referer", strRef .Send strText = .responsetext GetHTML = strText End WithEnd Function<br />'公众号:Excel办公实战'作者:E精精'功能:使用htmlfile对象提取网页内容'日期:20210504'-----------------------------------------------------Function getDataByXpath(str_Html As String) Dim htmlfile As Object, DataTable As Object Dim arr(1 To 10000, 1 To 5) Set htmlfile = CreateObject("htmlfile") htmlfile.write str_Html '等在加载解析数据 DoEvents: DoEvents Set DataTable = htmlfile.getElementsByTagName("table") For Each eve In DataTable n = n + 1 'a/p/span标签 Set aNode = eve.getElementsByTagName("a") Set pNode = eve.getElementsByTagName("p") Set spanNode = eve.getElementsByTagName("span") bookName = aNode(1).innerText '书名 bookInfo = pNode(0).innerText '作者/出版社/日期/价格 score = spanNode(1).innerText '评分 pCount = spanNode(2).innerText '评分人数 If pNode.Length > 1 Then abstract = pNode(1).Children(0).innerText '概要 Else abstract = "" End If '打印预览数据 Debug.Print Join(Array(bookName, bookInfo, _ score, pCount, abstract), Chr(10)) Debug.Print String(30, "-") '写入数组 arr(n, 1) = bookName: arr(n, 2) = bookInfo arr(n, 3) = score: arr(n, 4) = pCount arr(n, 5) = abstract Next Dim maxRow As Long With Sheet1 maxRow = .Cells(Rows.Count, 1).End(3).Row + 1 .Range("A" & maxRow).Resize(n, 5) = arr End WithEnd Function<br />'主调用函数Sub Main() Dim strHtml As String With Sheet1 .Cells.Clear Title = [{"书名","作者等信息","评分","评分人数","概要"}] .Range("A1").Resize(1, 5) = Title End With For page = 0 To 9 strHtml = GetHTML(page) getDataByXpath strHtml NextEnd Sub<br /><br /><br />
一个完整的爬虫涉及到的知识有很多,不过简单的爬取模仿即可搞定!今天你学废了吗? 查看全部
用Excel来写个爬虫怎么样?
大家好!我是啥子都不精通,但是懂一丢丢Excel的E精精!
不知道大家阅读到此文是什么时辰,我现在是夜深人静,安心码字的午夜!
今天我们来给大家分享一下,如何使用Excel来采集数据! 我们就以豆瓣读书TOP250为例吧(仅用于交流学习演示使用)!
网址:
实际翻页有变化,后面再唠!
今天我们采用的方式是VBA来处理,之前我们也分享过使用Power Query的方式!
感兴趣的,点击飞机票直达->【】
爬虫涉及的东西太多,今天我们尽力简单一下,只谈实操,不涉及过多理论!
今天我们要处理的是一个静态网页,所以不涉及分析ajax等乱七八糟的东西!
实现的效果预览
步骤01 | 获取网页对应的源码
网页采集需要获取一些请求头参数,我们可以直接按下F12,在【Network】 -【Doc】 对应的链接中 Headers 下面的 【Request Headers】 中找到!

我们简单写一个获取HTML源码的代码,获取到源码后,下一步就是处理源码!(网址和Referer批量抓取有变化)
通过Main函数调用,测试一下结果中是否有我们要的关键信息,比如红楼
返回了9570 非0 说明包含,当然我们也可以把这个结果写入txt,方便观察
步骤02 | 按照规则提取内容
提取内容,我们可以使用DOM结果xpath处理,也可以直接使用粗暴的正则,这里我们就正则吧!
>查看网页源码网页任意位置,右击 【查看网页源代码】,通过网页源码和网页实际显示内容的比对,我们可以分析是否是静态网页,同时如果使用正则提取,一定要根据这里来写!
查找关键信息,Ctrl+F 调出浏览器查询,输入红楼,可以看到对应的位置,
> 提取内容
我们要分析提取的内容结果!今天我们使用htmlfile对象提取内容对象的一些基本的东西学习参考:
我们直接来看代码(核心部分):根据网页的结构分析+htmlfile对象分析后所得!

一般来说还有一步就是存储数据,python等其他语言一般考虑存储到数据库(数据量大),在Excel中可以直接存储到Excel中!
步骤03 | 保存数据,写入Excel
只是简单的把数组内容写入单元格,一般我们可以根据实际需要对需要做一定的清洗后再写入,比如评分人数,我们只要数字等,这个大家自行处理即可,不是本文重点,这里就不再啰嗦处理!
完整代码(加一点细节):
本文由“壹伴编辑器”提供技术支
复制可自行使用:
'公众号:Excel办公实战'作者:E精精'功能:获取HTML源码(参数页码)'日期:20210504'------------------------------------------------------------------Function GetHTML(ByVal page As Long) Dim strText As String Dim StrURL As String StrURL = "https://book.douban.com/top250?start=" & page * 25 strRef = "https://book.douban.com/top250?start=" & _ Application.Min(0, page - 1) * 25 With CreateObject("WinHttp.WinHttpRequest.5.1") .Open "GET", StrURL, False '添加请求头 .setRequestHeader "Referer", strRef .Send strText = .responsetext GetHTML = strText End WithEnd Function<br />'公众号:Excel办公实战'作者:E精精'功能:使用htmlfile对象提取网页内容'日期:20210504'-----------------------------------------------------Function getDataByXpath(str_Html As String) Dim htmlfile As Object, DataTable As Object Dim arr(1 To 10000, 1 To 5) Set htmlfile = CreateObject("htmlfile") htmlfile.write str_Html '等在加载解析数据 DoEvents: DoEvents Set DataTable = htmlfile.getElementsByTagName("table") For Each eve In DataTable n = n + 1 'a/p/span标签 Set aNode = eve.getElementsByTagName("a") Set pNode = eve.getElementsByTagName("p") Set spanNode = eve.getElementsByTagName("span") bookName = aNode(1).innerText '书名 bookInfo = pNode(0).innerText '作者/出版社/日期/价格 score = spanNode(1).innerText '评分 pCount = spanNode(2).innerText '评分人数 If pNode.Length > 1 Then abstract = pNode(1).Children(0).innerText '概要 Else abstract = "" End If '打印预览数据 Debug.Print Join(Array(bookName, bookInfo, _ score, pCount, abstract), Chr(10)) Debug.Print String(30, "-") '写入数组 arr(n, 1) = bookName: arr(n, 2) = bookInfo arr(n, 3) = score: arr(n, 4) = pCount arr(n, 5) = abstract Next Dim maxRow As Long With Sheet1 maxRow = .Cells(Rows.Count, 1).End(3).Row + 1 .Range("A" & maxRow).Resize(n, 5) = arr End WithEnd Function<br />'主调用函数Sub Main() Dim strHtml As String With Sheet1 .Cells.Clear Title = [{"书名","作者等信息","评分","评分人数","概要"}] .Range("A1").Resize(1, 5) = Title End With For page = 0 To 9 strHtml = GetHTML(page) getDataByXpath strHtml NextEnd Sub<br /><br /><br />
一个完整的爬虫涉及到的知识有很多,不过简单的爬取模仿即可搞定!今天你学废了吗?
知乎人均985?Python爬50W数据,BI做出可视化后,我有了答案!
网站优化 • 优采云 发表了文章 • 0 个评论 • 79 次浏览 • 2022-06-18 10:47
一次完整的python数据分析流程是怎么样的?
使用python从网站抓取数据,并将这些数据保存到SQLite数据库中,然后对数据进行清洗,最后对数据进行数据可视化分析。
可是熟悉的人应该知道,python爬取简单,但是分析起来是很困难的,SQL语句、Pandas和Matplotlib这些十分繁琐,一般人也不会。
于是我想到了用一种更简单的方式进行数据分析,那就是python爬取+BI分析。什么是BI就不用我多做介绍了吧,python强大的数据获取能力,配合敏捷BI简单快捷的数据可视化操作,分析效果那肯定是杠杠的!
那这次我们就来看看“人均985,年薪百万”的知乎背后,到底有什么秘密?话不多说,开爬!
一、我们想要哪些数据?
知乎用户的学校和公司肯定是首当其冲的,我想看看到底这些人是编的还是真的哈哈哈。
其次就是性别,职业,地理位置,活跃程度等,统统扒个遍。
二、爬取的过程
知乎现在改用https请求了,数据加密,但是问题不大,重要的是网页数据改动了,而且在请求时后台会对爬虫做一些判断,因此在每次请求是都需要加上request header,尽可能接近浏览器请求的样子。
得到列表页的源码后,你可以从其中获取到每个问题的链接:
每页有20个问题,所以你可以获得到20个问题的链接,之后就是对每个问题的处理:
能实现到这一步,剩下的就是循环、判断和一些细节了。
最终一部分的代码如下:
import requests <br />import pandas as pd <br />import time <br />headers={ <br /> 'authorization':'',#此处填写你自己的身份验证信息 <br /> 'User-Agent':''#此处填写你自己浏览器的User-Agent <br />} <br />user_data = [] <br />def get_user_data(page): <br /> for i in range(page):#翻页 <br /> url = 'https://www.zhihu.com/api/v4/members/excited-vczh/followees?include=data%5B*%5D.answer_count%2Carticles_count%2Cgender%2Cfollower_count%2Cis_followed%2Cis_following%2Cbadge%5B%3F(type%3Dbest_answerer)%5D.topics&offset={}&limit=20'.format(i*20) <br /> response = requests.get(url, headers=headers).json()['data'] <br /> user_data.extend(response) #把response数据添加进user_data <br /> print('正在爬取第%s页' % str(i+1)) <br /> time.sleep(1) #设置爬取网页的时间间隔为1秒 <br /> <br />if __name__ == '__main__': <br /> get_user_data(10) <br /> df = pd.DataFrame.from_dict(user_data)#以字典保存数据 <br /> df.to_csv('zhihu.csv',encoding='utf_8_sig')#保存到用户名为zhihu的csv文件中,encoding='utf_8_sig'参数是为了解决中文乱码的问题 <br /> print(df) <br />
更多源代码见文末!
在Python代码中我并没有采取线程池,而是采用了开起10个main()方法去抓取,即10个进程,历时4个小时,爬取了57w+数据。
三、用BI进行数据可视化分析
现在我们已经进行到最后一步用BI开始做数据可视化了,揭秘知乎的时刻就要到来了。
市面上的BI工具有很多种,国外的Tableau和国内的FineBI都是BI领域的领先者,但早就听说Tableau适合有基础的数据分析师,对于小白很不友好。再加上我前天偶然间看到了IDC的报告,发现帆软的市场占有率是第一,为了避免回炉重做,我选择了FineBI这款敏捷工具,事实证明,我的选择是对的。
首先在官网下载FineBI,虽说是企业级的数据分析平台,但是它对于个人是永久免费的,文末给大家准备了下载链接~
然后直接通过FineBI提供的数据配置端的功能,添加SQL数据集(或者直接添加表也行),查看和验证刚刚爬取并且入库的数据是否已经真正成功入库到MySQL中了。
忘了说,FineBI的一大特点就是自助分析。什么叫自助分析?就是我自己拖拖拽拽数据,就可以有和Matplotlib一样的效果,你也许还会想到Excel,但一般几万行的数据以上,excel基本就无能为力,很卡。但是FineBI处理大数据依然可以行云流水,效率高几十倍上百倍都有可能。
同时VBA有个致命弱点是,它只能基于excel内部进行自动化,其他方面就没办法了。
我在写这篇文章之前,分析过房价和销售额,特地把它做成了动图供大家参考:
四、知乎的数据可视化
FineBI的仪表板可自行拖拽调整组件位置,配上多种类型的柱状图、饼图、雷达图,数据可视化就是这么轻而易举,只有你想不到,没有它做不到。
1、哪个城市的知乎用户最多?
从云词图中我们可以看出,城市越繁华,知乎的用户人数就越多(文字越大,比重越大)。所以也可以看见北上广深四个一线城市处于最中心,新一线城市紧随其后,换句话说:知乎的人大部分在一线城市或者新一线城市,果然是见多识广!
再来看看具体的排名吧:
杭州处在第三名了,果然互联网的发源之地之一不是吹的,阿里网易起到了很大的作用,为什么这么说?等你看到职业就明白了。
2、他们都是哪些学校的?
你看看,你看看,这学历真的很高,谁说人均985都是吹的?
不过也不奇怪,知乎主打的就是高知识份子的聚集地,而且学生比起上班族,有更多的时间玩手机。
既然分析到学校了,我们肯定要来看看各个高校上玩知乎的男女比例:
不用我说你们就可以猜到,蓝色代表的是男生,女孩子要么在逛街,要么就在学习,低头玩手机的肯定是男孩子哈哈哈(虽然我也是男的)。
我们再来看看各地区有哪些高校是知乎重度用户,颜色越深代表该学校的知乎用户越多:
别说了,知乎人均985实锤了,我流下了羡慕的泪水,我想请问同学,是怎么做到玩和学习同时兼顾的?你如果教教我,我高考距离清华的录取分数线可能就更近一点了....
3、知乎的职业比例
除去学生之后,我们发现知乎的人都是....
产品经理最多,这是最近几年最火爆的职业吧,不过话说你的文档写好了?需求画好了?是不是知乎的页面交互你不太满意?不然还不去干活?
可以看到,除了一些互联网公司的常见职位外,教师和律师用户在知乎中也占据不小的比重。
我们再用一张热力图来观察知乎主流职业(前四名)在各个地区的分布情况,颜色越深,代表该职业在该地区的人数越多:
总结
我分析了这么多,不是想告诉你们知乎的用户到底怎么怎么样,而是想说如果想做数据分析,FineBI确实是一款很好用的工具,对个人和对企业都是这样。
当然了,上面才只是FineBI的冰山一角,更多的东西还得你们自己去探索。 查看全部
知乎人均985?Python爬50W数据,BI做出可视化后,我有了答案!
一次完整的python数据分析流程是怎么样的?
使用python从网站抓取数据,并将这些数据保存到SQLite数据库中,然后对数据进行清洗,最后对数据进行数据可视化分析。
可是熟悉的人应该知道,python爬取简单,但是分析起来是很困难的,SQL语句、Pandas和Matplotlib这些十分繁琐,一般人也不会。
于是我想到了用一种更简单的方式进行数据分析,那就是python爬取+BI分析。什么是BI就不用我多做介绍了吧,python强大的数据获取能力,配合敏捷BI简单快捷的数据可视化操作,分析效果那肯定是杠杠的!
那这次我们就来看看“人均985,年薪百万”的知乎背后,到底有什么秘密?话不多说,开爬!
一、我们想要哪些数据?
知乎用户的学校和公司肯定是首当其冲的,我想看看到底这些人是编的还是真的哈哈哈。
其次就是性别,职业,地理位置,活跃程度等,统统扒个遍。
二、爬取的过程
知乎现在改用https请求了,数据加密,但是问题不大,重要的是网页数据改动了,而且在请求时后台会对爬虫做一些判断,因此在每次请求是都需要加上request header,尽可能接近浏览器请求的样子。
得到列表页的源码后,你可以从其中获取到每个问题的链接:
每页有20个问题,所以你可以获得到20个问题的链接,之后就是对每个问题的处理:
能实现到这一步,剩下的就是循环、判断和一些细节了。
最终一部分的代码如下:
import requests <br />import pandas as pd <br />import time <br />headers={ <br /> 'authorization':'',#此处填写你自己的身份验证信息 <br /> 'User-Agent':''#此处填写你自己浏览器的User-Agent <br />} <br />user_data = [] <br />def get_user_data(page): <br /> for i in range(page):#翻页 <br /> url = 'https://www.zhihu.com/api/v4/members/excited-vczh/followees?include=data%5B*%5D.answer_count%2Carticles_count%2Cgender%2Cfollower_count%2Cis_followed%2Cis_following%2Cbadge%5B%3F(type%3Dbest_answerer)%5D.topics&offset={}&limit=20'.format(i*20) <br /> response = requests.get(url, headers=headers).json()['data'] <br /> user_data.extend(response) #把response数据添加进user_data <br /> print('正在爬取第%s页' % str(i+1)) <br /> time.sleep(1) #设置爬取网页的时间间隔为1秒 <br /> <br />if __name__ == '__main__': <br /> get_user_data(10) <br /> df = pd.DataFrame.from_dict(user_data)#以字典保存数据 <br /> df.to_csv('zhihu.csv',encoding='utf_8_sig')#保存到用户名为zhihu的csv文件中,encoding='utf_8_sig'参数是为了解决中文乱码的问题 <br /> print(df) <br />
更多源代码见文末!
在Python代码中我并没有采取线程池,而是采用了开起10个main()方法去抓取,即10个进程,历时4个小时,爬取了57w+数据。
三、用BI进行数据可视化分析
现在我们已经进行到最后一步用BI开始做数据可视化了,揭秘知乎的时刻就要到来了。
市面上的BI工具有很多种,国外的Tableau和国内的FineBI都是BI领域的领先者,但早就听说Tableau适合有基础的数据分析师,对于小白很不友好。再加上我前天偶然间看到了IDC的报告,发现帆软的市场占有率是第一,为了避免回炉重做,我选择了FineBI这款敏捷工具,事实证明,我的选择是对的。
首先在官网下载FineBI,虽说是企业级的数据分析平台,但是它对于个人是永久免费的,文末给大家准备了下载链接~
然后直接通过FineBI提供的数据配置端的功能,添加SQL数据集(或者直接添加表也行),查看和验证刚刚爬取并且入库的数据是否已经真正成功入库到MySQL中了。
忘了说,FineBI的一大特点就是自助分析。什么叫自助分析?就是我自己拖拖拽拽数据,就可以有和Matplotlib一样的效果,你也许还会想到Excel,但一般几万行的数据以上,excel基本就无能为力,很卡。但是FineBI处理大数据依然可以行云流水,效率高几十倍上百倍都有可能。
同时VBA有个致命弱点是,它只能基于excel内部进行自动化,其他方面就没办法了。
我在写这篇文章之前,分析过房价和销售额,特地把它做成了动图供大家参考:
四、知乎的数据可视化
FineBI的仪表板可自行拖拽调整组件位置,配上多种类型的柱状图、饼图、雷达图,数据可视化就是这么轻而易举,只有你想不到,没有它做不到。
1、哪个城市的知乎用户最多?
从云词图中我们可以看出,城市越繁华,知乎的用户人数就越多(文字越大,比重越大)。所以也可以看见北上广深四个一线城市处于最中心,新一线城市紧随其后,换句话说:知乎的人大部分在一线城市或者新一线城市,果然是见多识广!
再来看看具体的排名吧:
杭州处在第三名了,果然互联网的发源之地之一不是吹的,阿里网易起到了很大的作用,为什么这么说?等你看到职业就明白了。
2、他们都是哪些学校的?
你看看,你看看,这学历真的很高,谁说人均985都是吹的?
不过也不奇怪,知乎主打的就是高知识份子的聚集地,而且学生比起上班族,有更多的时间玩手机。
既然分析到学校了,我们肯定要来看看各个高校上玩知乎的男女比例:
不用我说你们就可以猜到,蓝色代表的是男生,女孩子要么在逛街,要么就在学习,低头玩手机的肯定是男孩子哈哈哈(虽然我也是男的)。
我们再来看看各地区有哪些高校是知乎重度用户,颜色越深代表该学校的知乎用户越多:
别说了,知乎人均985实锤了,我流下了羡慕的泪水,我想请问同学,是怎么做到玩和学习同时兼顾的?你如果教教我,我高考距离清华的录取分数线可能就更近一点了....
3、知乎的职业比例
除去学生之后,我们发现知乎的人都是....
产品经理最多,这是最近几年最火爆的职业吧,不过话说你的文档写好了?需求画好了?是不是知乎的页面交互你不太满意?不然还不去干活?
可以看到,除了一些互联网公司的常见职位外,教师和律师用户在知乎中也占据不小的比重。
我们再用一张热力图来观察知乎主流职业(前四名)在各个地区的分布情况,颜色越深,代表该职业在该地区的人数越多:
总结
我分析了这么多,不是想告诉你们知乎的用户到底怎么怎么样,而是想说如果想做数据分析,FineBI确实是一款很好用的工具,对个人和对企业都是这样。
当然了,上面才只是FineBI的冰山一角,更多的东西还得你们自己去探索。
Excel VBA实例(36) - 一键提取网页中的表格数据
网站优化 • 优采云 发表了文章 • 0 个评论 • 154 次浏览 • 2022-05-04 03:34
将永恒君的百宝箱设为星标精品文章第一时间读背景需求
先说一下问题背景:
这个网站可以查看到深圳各个区的空气质量信息,每个小时更新一次。
需求:把里面的表格信息快速提取并且保存。
Excel可以通过数据 – 自网站这个功能实现简单网页表格数据爬取,想必不少朋友都应该知道并且使用过。
这个方法对于一些简单的网页来说,还是很实用的。但是对于某些网页,就比如pm25.in,用上面的方法则会不太方便,如下图:
直接选中表格上方的√,无法导入。
而如果直接勾选整个页面的话,又会提取到除了表格之外的很多无用的信息。
效果演示
那么,这种情况呢,可以借助vba来灵活的解决这个问题。
先上效果:点击“更新”,直接提取表格信息
然后点击“保存汇总”,将该时刻提取到的信息保存到汇总表,方便后续使用。
核心代码
这整个过程其实不难,其中抓取表格数据最核心的功能代码就是下面这些,每一行代码的含义永恒君都标注在后面了。
如果要更换其他城市,只需要更改URL地址即可。
With Sheets(1).QueryTables.Add("URL;http://www.pm25.in/shenzhen", Range("A2")) '抓取网站网页地址<br /> .RefreshStyle = xlOverwriteCells '覆盖模式<br /> .WebFormatting = xlWebFormattingAll '包含全部格式<br /> .WebSelectionType = xlSpecifiedTables '指定table模式<br /> .WebTables = "1" '第1张table<br /> .Refresh False<br />End With<br />
之后的保存、汇总就是一些常规的vba代码了。
需要说明的是:这个代码只适用于,网页源代码中包含有表格数据的网页。
如果你对这个内容感兴趣的话,可以在公号内回复「网页表格」获取vba文件进行试用吧~~
功能扩展
这个网站的数据是每个小时更新一次,如果需要获取未来某一段时间的数据,需要手工每小时操作一次,也是麻烦事。
其实,VBA也可以实现定时操作的功能的。如果你对这个功能感兴趣的话,欢迎留言,有超过10位小伙伴的话,永恒君将在下篇文章做分享。
你可能还会想看:
查看全部
Excel VBA实例(36) - 一键提取网页中的表格数据
将永恒君的百宝箱设为星标精品文章第一时间读背景需求
先说一下问题背景:
这个网站可以查看到深圳各个区的空气质量信息,每个小时更新一次。
需求:把里面的表格信息快速提取并且保存。
Excel可以通过数据 – 自网站这个功能实现简单网页表格数据爬取,想必不少朋友都应该知道并且使用过。
这个方法对于一些简单的网页来说,还是很实用的。但是对于某些网页,就比如pm25.in,用上面的方法则会不太方便,如下图:
直接选中表格上方的√,无法导入。
而如果直接勾选整个页面的话,又会提取到除了表格之外的很多无用的信息。
效果演示
那么,这种情况呢,可以借助vba来灵活的解决这个问题。
先上效果:点击“更新”,直接提取表格信息
然后点击“保存汇总”,将该时刻提取到的信息保存到汇总表,方便后续使用。
核心代码
这整个过程其实不难,其中抓取表格数据最核心的功能代码就是下面这些,每一行代码的含义永恒君都标注在后面了。
如果要更换其他城市,只需要更改URL地址即可。
With Sheets(1).QueryTables.Add("URL;http://www.pm25.in/shenzhen", Range("A2")) '抓取网站网页地址<br /> .RefreshStyle = xlOverwriteCells '覆盖模式<br /> .WebFormatting = xlWebFormattingAll '包含全部格式<br /> .WebSelectionType = xlSpecifiedTables '指定table模式<br /> .WebTables = "1" '第1张table<br /> .Refresh False<br />End With<br />
之后的保存、汇总就是一些常规的vba代码了。
需要说明的是:这个代码只适用于,网页源代码中包含有表格数据的网页。
如果你对这个内容感兴趣的话,可以在公号内回复「网页表格」获取vba文件进行试用吧~~
功能扩展
这个网站的数据是每个小时更新一次,如果需要获取未来某一段时间的数据,需要手工每小时操作一次,也是麻烦事。
其实,VBA也可以实现定时操作的功能的。如果你对这个功能感兴趣的话,欢迎留言,有超过10位小伙伴的话,永恒君将在下篇文章做分享。
你可能还会想看:
Excel实战:如何抓取网页中的表格数据
网站优化 • 优采云 发表了文章 • 0 个评论 • 400 次浏览 • 2022-05-04 03:23
近几年,Python编程语言非常火,很多人都用Python开发网络爬虫工具。虽然Python简单,但学起来并不容易,需要一定基础。今天小编给大家介绍一个Excel爬虫函数,学起来相对容易些,可应对特定场景下的数据采集需求。
有一个基金类的网页#qdiie,网页中存在一个数据表格,如下图所示,需抓取红框标注的数据到Excel表,并定时更新表格数据。
抓取过程共六个步骤
第一步,使用Firefox火狐或Chrome谷歌浏览器打开目标网页,右键通过检查代码找到表格的id。如果表格不存在id,可使用表格class样式代替。
第二步,书写公式=GetTableByIdW(B1,"flex_qdiie"),其中B1指要抓取的网址,"flex_qdiie"指的是表格元素在网页中的id号。函数名中的W表示当前函数需借助Excel浏览器。细心的朋友可能会有疑问,为什么要借助Excel浏览器?原因在于现在的网页越来越复杂,通过传统的HttpGet()或HttpPost()方式无法读取完整的网页,所以需要使用浏览器读取全部网页数据。
第三步,打开Excel浏览器,设置网页循环抓取任务。因为需要定时更新网页数据,所以需要Excel浏览器循环抓取网页。
第四步,在Excel中刷新公式,此时抓取函数会返回表格"flex_qdiie"全部数据,这是一长串文本,可以发现每一列使用一个分号隔开,每一行使用两个分号分割。找到了个规律,我们就可以使用Split2Array()函数来拆分提取数据。
513100;纳指etf;4.284;-0.93%;4228.65;29762;100;4.0850;20-11-16;4.0552;20-11-17;5.64%;会员;会员;会员;纳斯达克100;-0.30%;0.50%;0.50%;国泰基金;;164906;中国互联;1.994;-0.85%;556.36;8077;94;1.9950;20-11-16;1.9332;20-11-17;3.15%;-;-;-;中证海外中国互联网指数;-3.26%;1.20%;1.50%;交银施罗德;;513050;中概互联;2.080;-0.43%;13851.75;244643;-1300;2.1344;20-11-16;2.0605;20-11-17;0.95%;-;-;-;中国互联网50;-3.03%;0.50%;0.50%;易方达;;159822;新经济;1.024;-0.19%;1186.78;74473;-1500;1.0415;20-11-16;1.0269;20-11-17;-0.28%;-;-;-;标普中国新经济行业指数;-1.05%;;1.50%;银华基金;;159941;纳指etf;2.439;-1.01%;6268.25;39605;400;2.4695;20-11-16;2.4515;20-11-17;-0.51%;会员;会员;会员;纳斯达克100;-0.30%;0.50%;0.50%;广发基金;;513300;纳斯达克;0.991;-1.10%;2062.63;85267;-150;1.0042;20-11-16;0.9969;20-11-17;-0.59%;会员;会员;会员;纳斯达克100;-0.30%;0.50%;0.50%;华夏基金;;164824;印度基金;0.953;-0.52%;77.46;3293;-12;0.9669;20-11-16;0.9620;20-11-17;-0.94%;会员;会员;会员;印度etp指数;-;1.20%;1.50%;工银瑞信;;...
第五步,拆分提取数据。先拆分每一行的数据,再拆分每一列的数据。
第六步,使用=AutoRefresh(120)公式,设置定时刷新任务,每隔120秒钟自动刷新表格数据。
一共六步,完美抓取到一个表格的数据,并实现了自动定时刷新。有了实时数据,就可以对数据进行加工运算,达到监控预警的目的。怎么样,还算简单吧,写公式就可以进行网页数据采集。
如果觉得这个技巧很实用,请帮忙转发给您的朋友 查看全部
Excel实战:如何抓取网页中的表格数据
近几年,Python编程语言非常火,很多人都用Python开发网络爬虫工具。虽然Python简单,但学起来并不容易,需要一定基础。今天小编给大家介绍一个Excel爬虫函数,学起来相对容易些,可应对特定场景下的数据采集需求。
有一个基金类的网页#qdiie,网页中存在一个数据表格,如下图所示,需抓取红框标注的数据到Excel表,并定时更新表格数据。
抓取过程共六个步骤
第一步,使用Firefox火狐或Chrome谷歌浏览器打开目标网页,右键通过检查代码找到表格的id。如果表格不存在id,可使用表格class样式代替。
第二步,书写公式=GetTableByIdW(B1,"flex_qdiie"),其中B1指要抓取的网址,"flex_qdiie"指的是表格元素在网页中的id号。函数名中的W表示当前函数需借助Excel浏览器。细心的朋友可能会有疑问,为什么要借助Excel浏览器?原因在于现在的网页越来越复杂,通过传统的HttpGet()或HttpPost()方式无法读取完整的网页,所以需要使用浏览器读取全部网页数据。
第三步,打开Excel浏览器,设置网页循环抓取任务。因为需要定时更新网页数据,所以需要Excel浏览器循环抓取网页。
第四步,在Excel中刷新公式,此时抓取函数会返回表格"flex_qdiie"全部数据,这是一长串文本,可以发现每一列使用一个分号隔开,每一行使用两个分号分割。找到了个规律,我们就可以使用Split2Array()函数来拆分提取数据。
513100;纳指etf;4.284;-0.93%;4228.65;29762;100;4.0850;20-11-16;4.0552;20-11-17;5.64%;会员;会员;会员;纳斯达克100;-0.30%;0.50%;0.50%;国泰基金;;164906;中国互联;1.994;-0.85%;556.36;8077;94;1.9950;20-11-16;1.9332;20-11-17;3.15%;-;-;-;中证海外中国互联网指数;-3.26%;1.20%;1.50%;交银施罗德;;513050;中概互联;2.080;-0.43%;13851.75;244643;-1300;2.1344;20-11-16;2.0605;20-11-17;0.95%;-;-;-;中国互联网50;-3.03%;0.50%;0.50%;易方达;;159822;新经济;1.024;-0.19%;1186.78;74473;-1500;1.0415;20-11-16;1.0269;20-11-17;-0.28%;-;-;-;标普中国新经济行业指数;-1.05%;;1.50%;银华基金;;159941;纳指etf;2.439;-1.01%;6268.25;39605;400;2.4695;20-11-16;2.4515;20-11-17;-0.51%;会员;会员;会员;纳斯达克100;-0.30%;0.50%;0.50%;广发基金;;513300;纳斯达克;0.991;-1.10%;2062.63;85267;-150;1.0042;20-11-16;0.9969;20-11-17;-0.59%;会员;会员;会员;纳斯达克100;-0.30%;0.50%;0.50%;华夏基金;;164824;印度基金;0.953;-0.52%;77.46;3293;-12;0.9669;20-11-16;0.9620;20-11-17;-0.94%;会员;会员;会员;印度etp指数;-;1.20%;1.50%;工银瑞信;;...
第五步,拆分提取数据。先拆分每一行的数据,再拆分每一列的数据。
第六步,使用=AutoRefresh(120)公式,设置定时刷新任务,每隔120秒钟自动刷新表格数据。
一共六步,完美抓取到一个表格的数据,并实现了自动定时刷新。有了实时数据,就可以对数据进行加工运算,达到监控预警的目的。怎么样,还算简单吧,写公式就可以进行网页数据采集。
如果觉得这个技巧很实用,请帮忙转发给您的朋友
excelvba抓取网页数据(如何获取百度查询结果——抓取网站数据(组图) )
网站优化 • 优采云 发表了文章 • 0 个评论 • 82 次浏览 • 2022-04-11 16:20
)
当用户通过 Web 浏览器登录到 Internet 时,他们将向 Web 服务器请求一个网页。服务器收到请求后,会做出响应,将设置好的页面文档发送到网页浏览器的显示界面。这是一个完整的请求和处理网页的过程。网页抓取就是在代码过程中尝试模拟这种交互过程。
首先,在 Excel 中使用 VBA 来捕获 网站 数据。
其次,无论是使用 Python、Java 还是 VBA 进行网页抓取,都需要对 HTTP 协议、HTML(HyperTextMarkup Language,超文本标记语言)和 DOM(Document Object Model,文档对象模型)等知识有一个初步的了解。
此外,还介绍了一个软件 Fiddler。网页抓取的成功需要准确真实的URL,模拟正确的请求包并分析服务器响应请求后返回的信息,而这些数据可以通过Fiddler软件获取。通过 Fiddler 很容易找到内容所在的 URL。
今天简单介绍一下如何获取百度查询结果——抓取百度查询结果的数量。
1.首先打开Fiddler软件,在浏览器中打开百度网站,搜索关键词“网络爬虫”。
2.在Fiddler软件中搜索“百度为你找到相关结果”,如下图。
3.点击对话框中第一个黄色数据,点击右侧Request框中的【Raw】按钮,可以查看发送到该请求的HTTP报文的详细数据。第一行是请求行,内容如下。
GET https://www.baidu.com/s%3Fwd%3 ... D6639 HTTP/1.1
开头的 GET 是请求方法字段,末尾的 HTTP/1.1 是协议版本字段,其余信息是 URL 字段。由于请求行使用GET方式,所以请求数据附加在URL后面,URL和请求数据用“?”隔开,其中多个参数用“&”连接。
尽管传输数据的参数很多,但并非所有参数都是必需的。选择Request框中的【WebForms】选项卡,可以查看多个参数的Names和对应的Values。百度搜索的关键词“网络爬虫”位于参数wd下,如下图所示。所以 URL 可以缩短如下。
网络爬虫
4.点击Request框中的【Raw】按钮查看响应消息的详细数据,点击框右下角的【View in Notepad】按钮将相关数据转换成记事本文件。在记事本中,搜索关键词“百度为你找到相关结果”,即可查看收录该关键词的相关数据。
示例代码如下。
<p>Sub WebQueryBaidu()
Dim objXMLHTTP As Object
Dim strURL As String
Dim strText As String
Set objXMLHTTP = CreateObject("MSXML2.XMLHTTP")
With objXMLHTTP
strURL = "https://www.baidu.com/s?wd=网络爬虫"
.Open "GET", strURL, False
.send
strText = .responseText
End With
Range("a1") = "百度:excelhome 结果个数为:"
Range("a2") = Split(Split(strText, "百度为您找到相关结果")(1), " 查看全部
excelvba抓取网页数据(如何获取百度查询结果——抓取网站数据(组图)
)
当用户通过 Web 浏览器登录到 Internet 时,他们将向 Web 服务器请求一个网页。服务器收到请求后,会做出响应,将设置好的页面文档发送到网页浏览器的显示界面。这是一个完整的请求和处理网页的过程。网页抓取就是在代码过程中尝试模拟这种交互过程。
首先,在 Excel 中使用 VBA 来捕获 网站 数据。
其次,无论是使用 Python、Java 还是 VBA 进行网页抓取,都需要对 HTTP 协议、HTML(HyperTextMarkup Language,超文本标记语言)和 DOM(Document Object Model,文档对象模型)等知识有一个初步的了解。
此外,还介绍了一个软件 Fiddler。网页抓取的成功需要准确真实的URL,模拟正确的请求包并分析服务器响应请求后返回的信息,而这些数据可以通过Fiddler软件获取。通过 Fiddler 很容易找到内容所在的 URL。
今天简单介绍一下如何获取百度查询结果——抓取百度查询结果的数量。
1.首先打开Fiddler软件,在浏览器中打开百度网站,搜索关键词“网络爬虫”。
2.在Fiddler软件中搜索“百度为你找到相关结果”,如下图。
3.点击对话框中第一个黄色数据,点击右侧Request框中的【Raw】按钮,可以查看发送到该请求的HTTP报文的详细数据。第一行是请求行,内容如下。
GET https://www.baidu.com/s%3Fwd%3 ... D6639 HTTP/1.1
开头的 GET 是请求方法字段,末尾的 HTTP/1.1 是协议版本字段,其余信息是 URL 字段。由于请求行使用GET方式,所以请求数据附加在URL后面,URL和请求数据用“?”隔开,其中多个参数用“&”连接。
尽管传输数据的参数很多,但并非所有参数都是必需的。选择Request框中的【WebForms】选项卡,可以查看多个参数的Names和对应的Values。百度搜索的关键词“网络爬虫”位于参数wd下,如下图所示。所以 URL 可以缩短如下。
网络爬虫
4.点击Request框中的【Raw】按钮查看响应消息的详细数据,点击框右下角的【View in Notepad】按钮将相关数据转换成记事本文件。在记事本中,搜索关键词“百度为你找到相关结果”,即可查看收录该关键词的相关数据。
示例代码如下。
<p>Sub WebQueryBaidu()
Dim objXMLHTTP As Object
Dim strURL As String
Dim strText As String
Set objXMLHTTP = CreateObject("MSXML2.XMLHTTP")
With objXMLHTTP
strURL = "https://www.baidu.com/s?wd=网络爬虫"
.Open "GET", strURL, False
.send
strText = .responseText
End With
Range("a1") = "百度:excelhome 结果个数为:"
Range("a2") = Split(Split(strText, "百度为您找到相关结果")(1), "
excelvba抓取网页数据(如何快速地从网站上来获取自己需要的数据哦! )
网站优化 • 优采云 发表了文章 • 0 个评论 • 274 次浏览 • 2022-04-10 00:05
)
有时候我们在做Excel表格的时候,很多数据源可能来自互联网,所以我们需要从网站下载数据供我们使用,或者需要手动一一输入……但这是太抱歉了,今天教大家一个快速从网站获取你需要的数据的方法!喜欢的记得采集哦!
脚步:
1.首先,我们打开一个网站,找到我们要的数据,先复制网站的链接。这里我们选择个人所得税税率表,我们要在网页中捕获该表的所有内容。
2.然后打开你的Excel表格,然后点击【数据】-【来自网站】,会弹出【新建网页】查询对话框。
然后将刚才复制的 网站 链接粘贴到地址栏中。然后选择【Go】,会自动跳转到网站的数据界面。
3.然后在【新建Web查询】对话框中点击所需表的【箭头】按钮,再点击右下角的【导入】。完成此操作后,我们需要的数据将被添加到 Excel 表格中。
4.当你要导入数据时,可以选择数据的位置,或者数据的起始位置,也可以新建一个工作表。选择后,单击[确定]。
这样,您可以看到网站中的数据已经一次性添加到您的Excel表格中。注意,如果数据量大,导入的时候可能会比较慢,但最后还是可以轻松抓取网站的数据!
最后,可以使用【Apply Table Style】将表格美化一点,就ok啦~
最终效果:
这是另一个动画演示给大家看。不明白的可以看这里!
好的~以上就是如何从网页抓取数据的一个小技巧。经常需要在网上搜集资料的朋友,希望能对你有所帮助。如果有用,请点赞、转发、采集!补充!
查看全部
excelvba抓取网页数据(如何快速地从网站上来获取自己需要的数据哦!
)
有时候我们在做Excel表格的时候,很多数据源可能来自互联网,所以我们需要从网站下载数据供我们使用,或者需要手动一一输入……但这是太抱歉了,今天教大家一个快速从网站获取你需要的数据的方法!喜欢的记得采集哦!
脚步:
1.首先,我们打开一个网站,找到我们要的数据,先复制网站的链接。这里我们选择个人所得税税率表,我们要在网页中捕获该表的所有内容。
2.然后打开你的Excel表格,然后点击【数据】-【来自网站】,会弹出【新建网页】查询对话框。
然后将刚才复制的 网站 链接粘贴到地址栏中。然后选择【Go】,会自动跳转到网站的数据界面。
3.然后在【新建Web查询】对话框中点击所需表的【箭头】按钮,再点击右下角的【导入】。完成此操作后,我们需要的数据将被添加到 Excel 表格中。
4.当你要导入数据时,可以选择数据的位置,或者数据的起始位置,也可以新建一个工作表。选择后,单击[确定]。
这样,您可以看到网站中的数据已经一次性添加到您的Excel表格中。注意,如果数据量大,导入的时候可能会比较慢,但最后还是可以轻松抓取网站的数据!
最后,可以使用【Apply Table Style】将表格美化一点,就ok啦~
最终效果:
这是另一个动画演示给大家看。不明白的可以看这里!
好的~以上就是如何从网页抓取数据的一个小技巧。经常需要在网上搜集资料的朋友,希望能对你有所帮助。如果有用,请点赞、转发、采集!补充!
excelvba抓取网页数据(ExcelCookie的网页抓取问题-,-scrapingExcel,Vba,)
网站优化 • 优采云 发表了文章 • 0 个评论 • 78 次浏览 • 2022-03-28 21:20
Excel cookie 的 Web 抓取问题 - 仅在一次手动浏览器调用后才抓取值
excelvbacookies网络抓取
Excel cookie 的 Web 抓取问题 - 仅在一次手动浏览器调用、excel、vba、cookie、web-scraping、setcookie、Excel、Vba、Cookie、Web Scraping、Setcookie 后才抓取值,我正在尝试从stock 获取市场上的数据 网站,目前我使用以下方法来获取数据纯 URL:此代码工作正常但需要更长的时间 Sub OI_Pull() Application.EnableEvents = FalseApplication.ScreenUpdating = FalseApplication.DisplayAlerts = FalseDim即作为新的 InternetExplorerSet 即 = CreateObject("InternetExplorer.Ap
我正在尝试从股票市场 网站 获取数据,目前我正在使用以下方法获取数据
普通网址:
此代码工作正常,但需要更长的时间
Sub OI_Pull()
Application.EnableEvents = False
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Dim ie As New InternetExplorer
Set ie = CreateObject("InternetExplorer.Application")
Dim Link As String
Link = Sheet5.Range("B5").Value
ie.Visible = True
ie.Top = 0
ie.Left = 0
ie.Width = 1000
ie.Height = 750
ie.AddressBar = 0
ie.StatusBar = 0
ie.Toolbar = 0
ie.navigate "https://www.nseindia.com/produ ... ot%3B
Do
DoEvents
Loop Until ie.readyState = READYSTATE_COMPLETE
Dim doc As HTMLDocument
Set doc = ie.Document
Dim objElement As HTMLObjectElement
Dim sDD As String
doc.Focus
'instrumentType
doc.getElementById("instrumentType").Focus 'Setting Instrument Type
doc.getElementById("instrumentType").selectedIndex = 2
doc.getElementById("instrumentType").FireEvent ("onchange")
doc.getElementById("year").Focus 'Setting Year
doc.getElementById("year").selectedIndex = 5 '2020
doc.getElementById("year").FireEvent ("onchange")
doc.getElementById("expiryDate").Focus 'Setting ExpiryDate
doc.getElementById("expiryDate").selectedIndex = 3
doc.getElementById("expiryDate").FireEvent ("onchange")
doc.getElementById("dateRange").Focus 'Date Range
doc.getElementById("dateRange").selectedIndex = 1 ' 7 days
doc.getElementById("dateRange").FireEvent ("onchange")
Dim i As Integer
For i = 1 To 428 '1 to 428
doc.getElementById("Symbol").Focus
doc.getElementById("Symbol").selectedIndex = i
doc.getElementById("Symbol").FireEvent ("onchange")
Set objElement = doc.getElementsByClassName("getdata-button")(0)
'Application.Wait Now + TimeValue("00:00:02")
objElement.Click
Application.Wait Now + TimeValue("00:00:03")
'------------------
Dim hTable As Object, hBody As Object, hTR As Object, hTD As Object
Dim tb As Object, bb As Object, tr As Object, td As Object
y = 1 'Column A in Excel
Z = 1 'Row 1 in Excel
Set hTable = doc.getElementsByTagName("Table")
'Set hTable = doc.getElementById("historicalData")
For Each tb In hTable
Set hBody = tb.getElementsByTagName("tbody")
For Each bb In hBody
Set hTR = bb.getElementsByTagName("tr")
For Each tr In hTR
Set hTD = tr.getElementsByTagName("td")
y = 1 ' Resets back to column A
For Each td In hTD
Sheets("OI Pull").Cells(Z, y).Value = td.innerText
y = y + 1
Next td
DoEvents
Z = Z + 1
Next tr
Exit For
Next bb
Exit For
Next tb
'-------------------
Application.Wait Now + TimeValue("00:00:01")
Next i
Application.Wait Now + TimeValue("00:00:01")
'ie.Quit
ie.Visible = True
Set doc = Nothing
Set ie = Nothing
Application.DisplayAlerts = True
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub
我设置的值如下面的屏幕截图所示
网站参数
大约有 250 个值要抓取,目前在浏览器打开的情况下需要 20 分钟才能抓取,直到抓取完成
所以我想让它更快,所以我尝试使用 MSXML2.XMLHTTP 方法
如果我使用 MSXML2.XMLHTTP 方法,则接收到错误的 URL 响应文本,如果我在浏览器中打开 URL,则只有 MSXML2.XMLHTTP 方法可以正常工作
所以这里的问题出在 cookie 上,首先传递 URL 并获取响应 cookie,然后再次传递 URL 和接收到的 cookie。我尝试使用 getallresponseheaders 获取 cookie,但始终无法获取 URL 的 cookie 查看全部
excelvba抓取网页数据(ExcelCookie的网页抓取问题-,-scrapingExcel,Vba,)
Excel cookie 的 Web 抓取问题 - 仅在一次手动浏览器调用后才抓取值
excelvbacookies网络抓取
Excel cookie 的 Web 抓取问题 - 仅在一次手动浏览器调用、excel、vba、cookie、web-scraping、setcookie、Excel、Vba、Cookie、Web Scraping、Setcookie 后才抓取值,我正在尝试从stock 获取市场上的数据 网站,目前我使用以下方法来获取数据纯 URL:此代码工作正常但需要更长的时间 Sub OI_Pull() Application.EnableEvents = FalseApplication.ScreenUpdating = FalseApplication.DisplayAlerts = FalseDim即作为新的 InternetExplorerSet 即 = CreateObject("InternetExplorer.Ap
我正在尝试从股票市场 网站 获取数据,目前我正在使用以下方法获取数据
普通网址:
此代码工作正常,但需要更长的时间
Sub OI_Pull()
Application.EnableEvents = False
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Dim ie As New InternetExplorer
Set ie = CreateObject("InternetExplorer.Application")
Dim Link As String
Link = Sheet5.Range("B5").Value
ie.Visible = True
ie.Top = 0
ie.Left = 0
ie.Width = 1000
ie.Height = 750
ie.AddressBar = 0
ie.StatusBar = 0
ie.Toolbar = 0
ie.navigate "https://www.nseindia.com/produ ... ot%3B
Do
DoEvents
Loop Until ie.readyState = READYSTATE_COMPLETE
Dim doc As HTMLDocument
Set doc = ie.Document
Dim objElement As HTMLObjectElement
Dim sDD As String
doc.Focus
'instrumentType
doc.getElementById("instrumentType").Focus 'Setting Instrument Type
doc.getElementById("instrumentType").selectedIndex = 2
doc.getElementById("instrumentType").FireEvent ("onchange")
doc.getElementById("year").Focus 'Setting Year
doc.getElementById("year").selectedIndex = 5 '2020
doc.getElementById("year").FireEvent ("onchange")
doc.getElementById("expiryDate").Focus 'Setting ExpiryDate
doc.getElementById("expiryDate").selectedIndex = 3
doc.getElementById("expiryDate").FireEvent ("onchange")
doc.getElementById("dateRange").Focus 'Date Range
doc.getElementById("dateRange").selectedIndex = 1 ' 7 days
doc.getElementById("dateRange").FireEvent ("onchange")
Dim i As Integer
For i = 1 To 428 '1 to 428
doc.getElementById("Symbol").Focus
doc.getElementById("Symbol").selectedIndex = i
doc.getElementById("Symbol").FireEvent ("onchange")
Set objElement = doc.getElementsByClassName("getdata-button")(0)
'Application.Wait Now + TimeValue("00:00:02")
objElement.Click
Application.Wait Now + TimeValue("00:00:03")
'------------------
Dim hTable As Object, hBody As Object, hTR As Object, hTD As Object
Dim tb As Object, bb As Object, tr As Object, td As Object
y = 1 'Column A in Excel
Z = 1 'Row 1 in Excel
Set hTable = doc.getElementsByTagName("Table")
'Set hTable = doc.getElementById("historicalData")
For Each tb In hTable
Set hBody = tb.getElementsByTagName("tbody")
For Each bb In hBody
Set hTR = bb.getElementsByTagName("tr")
For Each tr In hTR
Set hTD = tr.getElementsByTagName("td")
y = 1 ' Resets back to column A
For Each td In hTD
Sheets("OI Pull").Cells(Z, y).Value = td.innerText
y = y + 1
Next td
DoEvents
Z = Z + 1
Next tr
Exit For
Next bb
Exit For
Next tb
'-------------------
Application.Wait Now + TimeValue("00:00:01")
Next i
Application.Wait Now + TimeValue("00:00:01")
'ie.Quit
ie.Visible = True
Set doc = Nothing
Set ie = Nothing
Application.DisplayAlerts = True
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub
我设置的值如下面的屏幕截图所示
网站参数
大约有 250 个值要抓取,目前在浏览器打开的情况下需要 20 分钟才能抓取,直到抓取完成
所以我想让它更快,所以我尝试使用 MSXML2.XMLHTTP 方法
如果我使用 MSXML2.XMLHTTP 方法,则接收到错误的 URL 响应文本,如果我在浏览器中打开 URL,则只有 MSXML2.XMLHTTP 方法可以正常工作
所以这里的问题出在 cookie 上,首先传递 URL 并获取响应 cookie,然后再次传递 URL 和接收到的 cookie。我尝试使用 getallresponseheaders 获取 cookie,但始终无法获取 URL 的 cookie
excelvba抓取网页数据( 如何在不使用IE的情况下自动从框架源拉入电子表格 )
网站优化 • 优采云 发表了文章 • 0 个评论 • 62 次浏览 • 2022-03-28 21:18
如何在不使用IE的情况下自动从框架源拉入电子表格
)
如何在不在 vba 中创建 Internet Explorer 对象的情况下解析 html?
htmlvbaexcelinternet-explorer
如何在不在 vba 中创建 Internet Explorer 对象的情况下解析 html?,html,vba,excel,internet-explorer,Html,Vba,Excel,Internet Explorer,我在工作的任何计算机上都没有 Internet Explorer,所以我无法创建 Internet Explorer 的对象并使用 ie.navigate to解析 html 和搜索标签。我的问题是,如何在不使用 IE 的情况下自动将带有标记的特定数据从框架源提取到电子表格中?答案中的代码示例将非常有用:) 谢谢您可以使用 XMLHTTP 检索网页的 HTML 源代码: Function GetHTML(url As String) As StringWith CreateObject("MSXML2.XMLHTTP")
我在工作的任何计算机上都没有 Internet Explorer,所以我无法创建 Internet Explorer 的对象并使用 ie.navigate 来解析 html 和搜索标记。我的问题是,如何在不使用 IE 的情况下自动将带有标记的特定数据从框架源提取到电子表格中?答案中的代码示例将非常有用:) 谢谢您可以使用 XMLHTTP 检索网页的 HTML 源代码:
Function GetHTML(url As String) As String
With CreateObject("MSXML2.XMLHTTP")
.Open "GET", url, False
.Send
GetHTML = .ResponseText
End With
End Function
我不建议把它当成sheet函数使用,否则每次重新计算sheet时都会重新查询站点URL。一些 网站 具有通过频繁重复调用来检测抓取的逻辑,您的 IP 可能会被暂时或永久禁止,具体取决于 网站
一旦你有了源 HTML 字符串(最好存储在一个变量中以避免不必要的重复调用),你可以使用基本的文本函数来解析字符串以搜索标签
这个基函数将返回
和
之间的值:
Public Function getTag(url As String, tag As String, Optional occurNum As Integer) As String
Dim html As String, pStart As Long, pEnd As Long, o As Integer
html = GetHTML(url)
'remove if they exist so we can add our own
If Left(tag, 1) = "" Then
tag = Left(Right(tag, Len(tag) - 1), Len(Right(tag, Len(tag) - 1)) - 1)
End If
' default to Occurrence #1
If occurNum = 0 Then occurNum = 1
pEnd = 1
For o = 1 To occurNum
' find start beginning at 1 (or after previous Occurence)
pStart = InStr(pEnd, html, "", vbTextCompare)
If pStart = 0 Then
getTag = "{Not Found}"
Exit Function
End If
pStart = pStart + Len("")
' find first end after start
pEnd = InStr(pStart, html, "", vbTextCompare)
Next o
'return string between start & end
getTag = Mid(html, pStart, pEnd - pStart)
End Function
公共函数getTag(url作为字符串,标记作为字符串,可选的occurNum作为整数)作为字符串
Dim html为字符串,pStart为长,pEnd为长,o为整数
html=GetHTML(url)
'如果存在,请删除,以便我们可以添加自己的
如果左(标记,1)=“”,则
标签=左(右(标签,透镜(标签)-1),透镜(右(标签,透镜(标签)-1))-1)
如果结束
'默认为事件#1
如果occurNum=0,则occurNum=1
pEnd=1
当o=1时发生
'查找从1开始的开始(或在上一次发生后)
pStart=InStr(pEnd,html,“,vbTextCompare)
如果pStart=0,则
getTag=“{Not Found}”
退出功能
如果结束
pStart=pStart+Len(“”)
'在开始后查找第一个端点
pEnd=InStr(pStart,html,“,vbTextCompare)
下一个o
'在开始和结束之间返回字符串
getTag=Mid(html、pStart、pEnd-pStart)
端函数
这只会找到基本的
, 但您可以添加/删除/更改文本功能以满足您的需要
使用示例:
Sub-findTagExample()
常量testURL=”https://en.wikipedia.org/wiki/Web_scraping"
'搜索第二次出现的标记:即“内容”:
打印getTag(testURL,“,2)
“…这将返回第8次出现的“导航菜单”:
打印getTag(testURL,“,8)
“…这将返回一个HTML,其中包含“法律问题”部分的标题:
调试。打印getTag(“https://en.wikipedia.org/wiki/Web_scraping", "", 4)
端接头
任何做过网页抓取的人都会熟悉如何创建 Internet Explorer (IE) 实例并导航到一个网址,然后当页面准备好时,开始使用“Microsoft HTML 对象库”(MSHTML) 类型库来导航 DOM . 问题是,如果 IE 不可用怎么办。我的盒子运行 Windows 10 时也遇到了同样的情况
我曾怀疑可以独立于 IE 创建 MSHTML.HTMLDocument 的实例,但它的创建并不明显。感谢提问者现在提出这个问题。答案在于方法。您需要一个本地文件才能工作(编辑:您实际上也可以在其中放置一个 WebbyURL!),但是我们有一个漂亮而简洁的 WindowsAPI 函数来下载文件
该代码在运行 Microsoft Edge 而不是 Internet Explorer 的 My Windows 10 机器上运行。这是一个重要的发现,感谢提出这一发现的提问者
Option Explicit
'* Tools->Refernces Microsoft HTML Object Library
'* MSDN - URLDownloadToFile function - https://msdn.microsoft.com/en-us/library/ms775123(v=vs.85).aspx
Private Declare PtrSafe Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" _
(ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, _
ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long
Sub Test()
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Dim sLocalFilename As String
sLocalFilename = Environ$("TMP") & "\urlmon.html"
Dim sURL As String
sURL = "https://stackoverflow.com/user ... ot%3B
Dim bOk As Boolean
bOk = (URLDownloadToFile(0, sURL, sLocalFilename, 0, 0) = 0)
If bOk Then
If fso.FileExists(sLocalFilename) Then
'* Tools->Refernces Microsoft HTML Object Library
Dim oHtml4 As MSHTML.IHTMLDocument4
Set oHtml4 = New MSHTML.HTMLDocument
Dim oHtml As MSHTML.HTMLDocument
Set oHtml = Nothing
'* IHTMLDocument4.createDocumentFromUrl
'* MSDN - IHTMLDocument4 createDocumentFromUrl method - https://msdn.microsoft.com/en-us/library/aa752523(v=vs.85).aspx
Set oHtml = oHtml4.createDocumentFromUrl(sLocalFilename, "")
'* need to wait a little whilst the document parses
'* because it is multithreaded
While oHtml.readyState "complete"
DoEvents '* do not comment this out it is required to break into the code if in infinite loop
Wend
Debug.Assert oHtml.readyState = "complete"
Dim sTest As String
sTest = Left$(oHtml.body.outerHTML, 100)
Debug.Assert Len(Trim(sTest)) > 50 '* just testing we got a substantial block of text, feel free to delete
'* page specific logic goes here
Dim htmlAnswers As Object 'MSHTML.DispHTMLElementCollection
Set htmlAnswers = oHtml.getElementsByClassName("answer-hyperlink")
Dim lAnswerLoop As Long
For lAnswerLoop = 0 To htmlAnswers.Length - 1
Dim vAnswerLoop
Set vAnswerLoop = htmlAnswers.Item(lAnswerLoop)
Debug.Print vAnswerLoop.outerText
Next
End If
End If
End Sub
OPTION EXPLICIT '*Tools->Reference Microsoft HTML Object Library'*MSDN-URLDownloadToFileFunction-(v=vs.85).aspx 私有声明 PtrSafe 函数 URLDownloadToFile Lib "urlmon" alias "URLDownloadToFileA"_(ByVal pCaller is Long , ByVal szURL 是 String, ByVal szFileName 是 String String sLocalFilename=Environ$("tmp") and "\urlmon.html" as string Dim sURL sur="" Dim-bOk as boolean bOk=(URLDownloadToFile(0, sURL, sLocalFilename , 0, 0)=0)如果 fso.files(sLocalFilename) 存在则可用,则 '*tools->reference Microsoft HTML 对象库将 oHtml4 标记为 MSHTML.IHTMLDocument4 set oHtml4=New MSHTML.HTMLDocumentDim oHtml作为 MSHTML.HTMLDocument 设置 oHtml=Nothing'*IHTMLDocument4.createDocumentFromUrl'*MSDN-IHTMLDocument4 createDocumentFromUrl 方法-(v=vs.85).aspx set oHtml=oHtml4.createDocumentFromUrl(sLocalFilename, "") "*等待文档解析"* oHtml.readyState '完成' DoEvents' 因为它是多线程的'* 不要对此发表评论。
如果是死循环,需要断代码 Wind Debug.Assert oHtml.readyState="finished" 像字符串一样的暗棒 sTest=Left$(oHtml.body.outerHTML, 100)Assert Len( Trim (sTest)) > 50' * 刚测试我们有很多文本块,随意删除" * 页面具体逻辑如下 Dim HtmlLanswers as object MSHTML.dispHtmlLement采集 set htmlAnswers=oHtml.getElementsByClassName("answer hyperlinks" ) 暗绿色,如 long For lAnswerLoop=0 to htmlAnswers.Length-1 Dim WasswerLoop set vAnswerLoop=htmlAnswers.Item(lAnswerLoop) Debug.Print vAnswerLoop.outerText
Option Explicit
'* Tools->Refernces Microsoft HTML Object Library
'* MSDN - URLDownloadToFile function - https://msdn.microsoft.com/en-us/library/ms775123(v=vs.85).aspx
Private Declare PtrSafe Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" _
(ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, _
ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long
Sub Test()
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Dim sLocalFilename As String
sLocalFilename = Environ$("TMP") & "\urlmon.html"
Dim sURL As String
sURL = "https://stackoverflow.com/user ... ot%3B
Dim bOk As Boolean
bOk = (URLDownloadToFile(0, sURL, sLocalFilename, 0, 0) = 0)
If bOk Then
If fso.FileExists(sLocalFilename) Then
'* Tools->Refernces Microsoft HTML Object Library
Dim oHtml4 As MSHTML.IHTMLDocument4
Set oHtml4 = New MSHTML.HTMLDocument
Dim oHtml As MSHTML.HTMLDocument
Set oHtml = Nothing
'* IHTMLDocument4.createDocumentFromUrl
'* MSDN - IHTMLDocument4 createDocumentFromUrl method - https://msdn.microsoft.com/en-us/library/aa752523(v=vs.85).aspx
Set oHtml = oHtml4.createDocumentFromUrl(sLocalFilename, "")
'* need to wait a little whilst the document parses
'* because it is multithreaded
While oHtml.readyState "complete"
DoEvents '* do not comment this out it is required to break into the code if in infinite loop
Wend
Debug.Assert oHtml.readyState = "complete"
Dim sTest As String
sTest = Left$(oHtml.body.outerHTML, 100)
Debug.Assert Len(Trim(sTest)) > 50 '* just testing we got a substantial block of text, feel free to delete
'* page specific logic goes here
Dim htmlAnswers As Object 'MSHTML.DispHTMLElementCollection
Set htmlAnswers = oHtml.getElementsByClassName("answer-hyperlink")
Dim lAnswerLoop As Long
For lAnswerLoop = 0 To htmlAnswers.Length - 1
Dim vAnswerLoop
Set vAnswerLoop = htmlAnswers.Item(lAnswerLoop)
Debug.Print vAnswerLoop.outerText
Next
End If
End If
End Sub 查看全部
excelvba抓取网页数据(
如何在不使用IE的情况下自动从框架源拉入电子表格
)
如何在不在 vba 中创建 Internet Explorer 对象的情况下解析 html?
htmlvbaexcelinternet-explorer
如何在不在 vba 中创建 Internet Explorer 对象的情况下解析 html?,html,vba,excel,internet-explorer,Html,Vba,Excel,Internet Explorer,我在工作的任何计算机上都没有 Internet Explorer,所以我无法创建 Internet Explorer 的对象并使用 ie.navigate to解析 html 和搜索标签。我的问题是,如何在不使用 IE 的情况下自动将带有标记的特定数据从框架源提取到电子表格中?答案中的代码示例将非常有用:) 谢谢您可以使用 XMLHTTP 检索网页的 HTML 源代码: Function GetHTML(url As String) As StringWith CreateObject("MSXML2.XMLHTTP")
我在工作的任何计算机上都没有 Internet Explorer,所以我无法创建 Internet Explorer 的对象并使用 ie.navigate 来解析 html 和搜索标记。我的问题是,如何在不使用 IE 的情况下自动将带有标记的特定数据从框架源提取到电子表格中?答案中的代码示例将非常有用:) 谢谢您可以使用 XMLHTTP 检索网页的 HTML 源代码:
Function GetHTML(url As String) As String
With CreateObject("MSXML2.XMLHTTP")
.Open "GET", url, False
.Send
GetHTML = .ResponseText
End With
End Function
我不建议把它当成sheet函数使用,否则每次重新计算sheet时都会重新查询站点URL。一些 网站 具有通过频繁重复调用来检测抓取的逻辑,您的 IP 可能会被暂时或永久禁止,具体取决于 网站
一旦你有了源 HTML 字符串(最好存储在一个变量中以避免不必要的重复调用),你可以使用基本的文本函数来解析字符串以搜索标签
这个基函数将返回
和
之间的值:
Public Function getTag(url As String, tag As String, Optional occurNum As Integer) As String
Dim html As String, pStart As Long, pEnd As Long, o As Integer
html = GetHTML(url)
'remove if they exist so we can add our own
If Left(tag, 1) = "" Then
tag = Left(Right(tag, Len(tag) - 1), Len(Right(tag, Len(tag) - 1)) - 1)
End If
' default to Occurrence #1
If occurNum = 0 Then occurNum = 1
pEnd = 1
For o = 1 To occurNum
' find start beginning at 1 (or after previous Occurence)
pStart = InStr(pEnd, html, "", vbTextCompare)
If pStart = 0 Then
getTag = "{Not Found}"
Exit Function
End If
pStart = pStart + Len("")
' find first end after start
pEnd = InStr(pStart, html, "", vbTextCompare)
Next o
'return string between start & end
getTag = Mid(html, pStart, pEnd - pStart)
End Function
公共函数getTag(url作为字符串,标记作为字符串,可选的occurNum作为整数)作为字符串
Dim html为字符串,pStart为长,pEnd为长,o为整数
html=GetHTML(url)
'如果存在,请删除,以便我们可以添加自己的
如果左(标记,1)=“”,则
标签=左(右(标签,透镜(标签)-1),透镜(右(标签,透镜(标签)-1))-1)
如果结束
'默认为事件#1
如果occurNum=0,则occurNum=1
pEnd=1
当o=1时发生
'查找从1开始的开始(或在上一次发生后)
pStart=InStr(pEnd,html,“,vbTextCompare)
如果pStart=0,则
getTag=“{Not Found}”
退出功能
如果结束
pStart=pStart+Len(“”)
'在开始后查找第一个端点
pEnd=InStr(pStart,html,“,vbTextCompare)
下一个o
'在开始和结束之间返回字符串
getTag=Mid(html、pStart、pEnd-pStart)
端函数
这只会找到基本的
, 但您可以添加/删除/更改文本功能以满足您的需要
使用示例:
Sub-findTagExample()
常量testURL=”https://en.wikipedia.org/wiki/Web_scraping"
'搜索第二次出现的标记:即“内容”:
打印getTag(testURL,“,2)
“…这将返回第8次出现的“导航菜单”:
打印getTag(testURL,“,8)
“…这将返回一个HTML,其中包含“法律问题”部分的标题:
调试。打印getTag(“https://en.wikipedia.org/wiki/Web_scraping", "", 4)
端接头
任何做过网页抓取的人都会熟悉如何创建 Internet Explorer (IE) 实例并导航到一个网址,然后当页面准备好时,开始使用“Microsoft HTML 对象库”(MSHTML) 类型库来导航 DOM . 问题是,如果 IE 不可用怎么办。我的盒子运行 Windows 10 时也遇到了同样的情况
我曾怀疑可以独立于 IE 创建 MSHTML.HTMLDocument 的实例,但它的创建并不明显。感谢提问者现在提出这个问题。答案在于方法。您需要一个本地文件才能工作(编辑:您实际上也可以在其中放置一个 WebbyURL!),但是我们有一个漂亮而简洁的 WindowsAPI 函数来下载文件
该代码在运行 Microsoft Edge 而不是 Internet Explorer 的 My Windows 10 机器上运行。这是一个重要的发现,感谢提出这一发现的提问者
Option Explicit
'* Tools->Refernces Microsoft HTML Object Library
'* MSDN - URLDownloadToFile function - https://msdn.microsoft.com/en-us/library/ms775123(v=vs.85).aspx
Private Declare PtrSafe Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" _
(ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, _
ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long
Sub Test()
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Dim sLocalFilename As String
sLocalFilename = Environ$("TMP") & "\urlmon.html"
Dim sURL As String
sURL = "https://stackoverflow.com/user ... ot%3B
Dim bOk As Boolean
bOk = (URLDownloadToFile(0, sURL, sLocalFilename, 0, 0) = 0)
If bOk Then
If fso.FileExists(sLocalFilename) Then
'* Tools->Refernces Microsoft HTML Object Library
Dim oHtml4 As MSHTML.IHTMLDocument4
Set oHtml4 = New MSHTML.HTMLDocument
Dim oHtml As MSHTML.HTMLDocument
Set oHtml = Nothing
'* IHTMLDocument4.createDocumentFromUrl
'* MSDN - IHTMLDocument4 createDocumentFromUrl method - https://msdn.microsoft.com/en-us/library/aa752523(v=vs.85).aspx
Set oHtml = oHtml4.createDocumentFromUrl(sLocalFilename, "")
'* need to wait a little whilst the document parses
'* because it is multithreaded
While oHtml.readyState "complete"
DoEvents '* do not comment this out it is required to break into the code if in infinite loop
Wend
Debug.Assert oHtml.readyState = "complete"
Dim sTest As String
sTest = Left$(oHtml.body.outerHTML, 100)
Debug.Assert Len(Trim(sTest)) > 50 '* just testing we got a substantial block of text, feel free to delete
'* page specific logic goes here
Dim htmlAnswers As Object 'MSHTML.DispHTMLElementCollection
Set htmlAnswers = oHtml.getElementsByClassName("answer-hyperlink")
Dim lAnswerLoop As Long
For lAnswerLoop = 0 To htmlAnswers.Length - 1
Dim vAnswerLoop
Set vAnswerLoop = htmlAnswers.Item(lAnswerLoop)
Debug.Print vAnswerLoop.outerText
Next
End If
End If
End Sub
OPTION EXPLICIT '*Tools->Reference Microsoft HTML Object Library'*MSDN-URLDownloadToFileFunction-(v=vs.85).aspx 私有声明 PtrSafe 函数 URLDownloadToFile Lib "urlmon" alias "URLDownloadToFileA"_(ByVal pCaller is Long , ByVal szURL 是 String, ByVal szFileName 是 String String sLocalFilename=Environ$("tmp") and "\urlmon.html" as string Dim sURL sur="" Dim-bOk as boolean bOk=(URLDownloadToFile(0, sURL, sLocalFilename , 0, 0)=0)如果 fso.files(sLocalFilename) 存在则可用,则 '*tools->reference Microsoft HTML 对象库将 oHtml4 标记为 MSHTML.IHTMLDocument4 set oHtml4=New MSHTML.HTMLDocumentDim oHtml作为 MSHTML.HTMLDocument 设置 oHtml=Nothing'*IHTMLDocument4.createDocumentFromUrl'*MSDN-IHTMLDocument4 createDocumentFromUrl 方法-(v=vs.85).aspx set oHtml=oHtml4.createDocumentFromUrl(sLocalFilename, "") "*等待文档解析"* oHtml.readyState '完成' DoEvents' 因为它是多线程的'* 不要对此发表评论。
如果是死循环,需要断代码 Wind Debug.Assert oHtml.readyState="finished" 像字符串一样的暗棒 sTest=Left$(oHtml.body.outerHTML, 100)Assert Len( Trim (sTest)) > 50' * 刚测试我们有很多文本块,随意删除" * 页面具体逻辑如下 Dim HtmlLanswers as object MSHTML.dispHtmlLement采集 set htmlAnswers=oHtml.getElementsByClassName("answer hyperlinks" ) 暗绿色,如 long For lAnswerLoop=0 to htmlAnswers.Length-1 Dim WasswerLoop set vAnswerLoop=htmlAnswers.Item(lAnswerLoop) Debug.Print vAnswerLoop.outerText
Option Explicit
'* Tools->Refernces Microsoft HTML Object Library
'* MSDN - URLDownloadToFile function - https://msdn.microsoft.com/en-us/library/ms775123(v=vs.85).aspx
Private Declare PtrSafe Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" _
(ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, _
ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long
Sub Test()
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Dim sLocalFilename As String
sLocalFilename = Environ$("TMP") & "\urlmon.html"
Dim sURL As String
sURL = "https://stackoverflow.com/user ... ot%3B
Dim bOk As Boolean
bOk = (URLDownloadToFile(0, sURL, sLocalFilename, 0, 0) = 0)
If bOk Then
If fso.FileExists(sLocalFilename) Then
'* Tools->Refernces Microsoft HTML Object Library
Dim oHtml4 As MSHTML.IHTMLDocument4
Set oHtml4 = New MSHTML.HTMLDocument
Dim oHtml As MSHTML.HTMLDocument
Set oHtml = Nothing
'* IHTMLDocument4.createDocumentFromUrl
'* MSDN - IHTMLDocument4 createDocumentFromUrl method - https://msdn.microsoft.com/en-us/library/aa752523(v=vs.85).aspx
Set oHtml = oHtml4.createDocumentFromUrl(sLocalFilename, "")
'* need to wait a little whilst the document parses
'* because it is multithreaded
While oHtml.readyState "complete"
DoEvents '* do not comment this out it is required to break into the code if in infinite loop
Wend
Debug.Assert oHtml.readyState = "complete"
Dim sTest As String
sTest = Left$(oHtml.body.outerHTML, 100)
Debug.Assert Len(Trim(sTest)) > 50 '* just testing we got a substantial block of text, feel free to delete
'* page specific logic goes here
Dim htmlAnswers As Object 'MSHTML.DispHTMLElementCollection
Set htmlAnswers = oHtml.getElementsByClassName("answer-hyperlink")
Dim lAnswerLoop As Long
For lAnswerLoop = 0 To htmlAnswers.Length - 1
Dim vAnswerLoop
Set vAnswerLoop = htmlAnswers.Item(lAnswerLoop)
Debug.Print vAnswerLoop.outerText
Next
End If
End If
End Sub
excelvba抓取网页数据(VBA教材有点基础再说吧,有找我怎么学?)
网站优化 • 优采云 发表了文章 • 0 个评论 • 75 次浏览 • 2022-03-23 02:09
这玩意儿是原创,原理是用VBA从网页抓取数据,但不需要打开网页。
VBA在后台打开一个虚拟网页,解析并抓取数据,速度相当快。我这里的网速一般,抓取一个网页的数据只需要1秒左右。
该程序可以实现以下功能:
1、导入任何股票上市以来的开盘价、收盘价、最高价、最低价、成交量等数据;
2、导入任何股票在任何交易日的交易详情。包括交易时间、交易价格、交易量、交易金额等。对于一些需要高频数据的同学来说,这个东西很实用。这个程序稍作修改,一个循环甚至可以导出所有股票的所有历史交易明细。有需要的同学可以找我。
3、导入新股会议数据,包括公司名称、申报时间、会议时间、当前状态等信息。
一般情况下,网页上的数据都可以通过VBA进行抓取。如果应用得好,可以实现对大量数据的动态监控。
如果需要采集其他数据,可以私信我。
这么好的东西不应该沉没,有钱就回复下载吧;如果你没钱,回复然后私信我,我发给你。
[隐藏][/隐藏]
补充内容(2014-3-22 14:21):
几个额外的问题:
1、很多人向我要文件,我尽力了,但很抱歉我不能全部发送。
2、有人问我源代码密码,抱歉我不能一一回答,也不容易发到这里。
3、如果你让我教你如何学习VBA,我们来谈谈这本教材的基础知识。 查看全部
excelvba抓取网页数据(VBA教材有点基础再说吧,有找我怎么学?)
这玩意儿是原创,原理是用VBA从网页抓取数据,但不需要打开网页。
VBA在后台打开一个虚拟网页,解析并抓取数据,速度相当快。我这里的网速一般,抓取一个网页的数据只需要1秒左右。
该程序可以实现以下功能:
1、导入任何股票上市以来的开盘价、收盘价、最高价、最低价、成交量等数据;
2、导入任何股票在任何交易日的交易详情。包括交易时间、交易价格、交易量、交易金额等。对于一些需要高频数据的同学来说,这个东西很实用。这个程序稍作修改,一个循环甚至可以导出所有股票的所有历史交易明细。有需要的同学可以找我。
3、导入新股会议数据,包括公司名称、申报时间、会议时间、当前状态等信息。
一般情况下,网页上的数据都可以通过VBA进行抓取。如果应用得好,可以实现对大量数据的动态监控。
如果需要采集其他数据,可以私信我。
这么好的东西不应该沉没,有钱就回复下载吧;如果你没钱,回复然后私信我,我发给你。
[隐藏][/隐藏]
补充内容(2014-3-22 14:21):
几个额外的问题:
1、很多人向我要文件,我尽力了,但很抱歉我不能全部发送。
2、有人问我源代码密码,抱歉我不能一一回答,也不容易发到这里。
3、如果你让我教你如何学习VBA,我们来谈谈这本教材的基础知识。
excelvba抓取网页数据(基于ExcelVBA的能源电力新闻网抓插件演示视频_哔哩哔哩)
网站优化 • 优采云 发表了文章 • 0 个评论 • 78 次浏览 • 2022-03-15 16:21
之前写过很多基于实际应用场景的VBA网页抓包程序。我觉得最方便的就是xmlhttp对象了。它的优点是速度快,稳定性和兼容性好,还可以使用post方式发送邮件。登录帐户等。但是,这种方法不适合动态网页。简而言之,如果网页的内容可以通过运行 JavaScript 获取,那么这个方法是抓不到的。然后有些xmlhttp就不能做剩下的了,可以选择IE控件来做,但是经常报错,自己调试后就可以用了,但是真的不好给别人用。
通过VBA的这些网络捕获方式获取数据后,后续的输出和分析将因地制宜。目前论坛中关于json格式数据、正则表达式或者二进制输出文件的帖子相当多,大家可以自行学习。
一般来说,VBA能抓取哪些页面,并不取决于页面有多复杂或多花哨,而是该页面是否为动态网页以及该网页的源代码是什么样的,不方便数据处理之类的. 个人觉得最好抓的是各种新闻的标题网站,一般都是直接返回源码获取,有时head标签写在html代码中,使用正则表达式或者html。文档对象很好处理。比如下面这几种看起来很杂乱花哨的能源和电力网站,虽然看起来很复杂很花哨,但其实它们的结构很简单。
由于工作原因,需要及时获取相关行业新闻,所以之前做了一个能源电力新闻的网页抓取程序。我想了想,把它放在TB宝藏中哈哈。我觉得学习VBA还是可以给我带来一些收入的。,来吧,话题!
演示视频:基于ExcelVBA的能源电力新闻网络抓取插件演示视频_bilibili_bilibili 查看全部
excelvba抓取网页数据(基于ExcelVBA的能源电力新闻网抓插件演示视频_哔哩哔哩)
之前写过很多基于实际应用场景的VBA网页抓包程序。我觉得最方便的就是xmlhttp对象了。它的优点是速度快,稳定性和兼容性好,还可以使用post方式发送邮件。登录帐户等。但是,这种方法不适合动态网页。简而言之,如果网页的内容可以通过运行 JavaScript 获取,那么这个方法是抓不到的。然后有些xmlhttp就不能做剩下的了,可以选择IE控件来做,但是经常报错,自己调试后就可以用了,但是真的不好给别人用。
通过VBA的这些网络捕获方式获取数据后,后续的输出和分析将因地制宜。目前论坛中关于json格式数据、正则表达式或者二进制输出文件的帖子相当多,大家可以自行学习。
一般来说,VBA能抓取哪些页面,并不取决于页面有多复杂或多花哨,而是该页面是否为动态网页以及该网页的源代码是什么样的,不方便数据处理之类的. 个人觉得最好抓的是各种新闻的标题网站,一般都是直接返回源码获取,有时head标签写在html代码中,使用正则表达式或者html。文档对象很好处理。比如下面这几种看起来很杂乱花哨的能源和电力网站,虽然看起来很复杂很花哨,但其实它们的结构很简单。

由于工作原因,需要及时获取相关行业新闻,所以之前做了一个能源电力新闻的网页抓取程序。我想了想,把它放在TB宝藏中哈哈。我觉得学习VBA还是可以给我带来一些收入的。,来吧,话题!
演示视频:基于ExcelVBA的能源电力新闻网络抓取插件演示视频_bilibili_bilibili
excelvba抓取网页数据(每类数据自动新建Excel软件怎么用?如何快速提取表格数据 )
网站优化 • 优采云 发表了文章 • 0 个评论 • 94 次浏览 • 2022-03-08 03:13
)
EXCEL批量数据抽取是一款界面简单、操作最少的表格数据抽取工具。可以帮助用户简单快速的提取表格数据,将用户需要使用的数据提取到新的表格中,方便用户处理表格数据;EXCEL批量数据提取功能强大、专业、实用。用户只需添加一个表格,然后设置提取数据参数即可提取数据内容,让用户快速获取所需数据。整个数据提取操作非常简单快捷;EXCEL批量数据提取支持表头文件设置、数据保存、自动提取表格数据等功能,非常方便易用。有需要的用户可以下载使用。
软件功能
1、EXCEL批量数据提取好用,快速提取你需要的数据
2、自动从庞大的数据表中提取,可以在软件中输入需要提取的数据类型
3、在软件中输入多个数据类,让软件都能识别Excel里面的数据
4、软件自动识别单元格数据并将数据提取到新的Excel文件中
5、可以匹配部分内容,可以准确找到要提取的数据
6、直接在表格列中搜索数据,提取指定列数据
7、提取的数据类型可以独立保存,每种数据类型在Excel中自动创建
软件功能
1、EXCEL批量数据提取好用,为需要汇总数据的朋友提供自动提取功能
2、帮助用户从多个表单中采集数据,软件即时识别所有表单
3、用户只需要设置保存表的文件夹即可进行提取操作
4、每次提取数据时都会创建一个新表。如果没有检测到数据,则不会创建。
5、可以从软件中指定表头,选择已经设置好的Excel文件进行搜索
6、本软件支持office2007以上的Excel文件,也支持WPS表格
指示
1、点击下载管理找到软件安装zip包点击解压,找到.exe文件双击直接进入软件,右键创建桌面快捷方式
2、双击桌面快捷键进入Excel批量数据提取软件操作页面,点击选择版本选择版本软件,同时设置软件参数
3、点击软件要解压的文件所在路径和文件夹的按钮,弹出本地文件管理弹框,点击选择文件再点击选择文件夹即可成功设置解压文件的路径
4、解压后点击路径按钮保存到文件夹
5、在提取文件数据前,可以点击提取参数设置,点击勾选提取功能,让用户更好的提取数据
6、点击软件页面,进入软件主产品功能页面。在该页面,您可以点击选择批量数据排序下的文件处理功能,进入相应页面进行操作。
查看全部
excelvba抓取网页数据(每类数据自动新建Excel软件怎么用?如何快速提取表格数据
)
EXCEL批量数据抽取是一款界面简单、操作最少的表格数据抽取工具。可以帮助用户简单快速的提取表格数据,将用户需要使用的数据提取到新的表格中,方便用户处理表格数据;EXCEL批量数据提取功能强大、专业、实用。用户只需添加一个表格,然后设置提取数据参数即可提取数据内容,让用户快速获取所需数据。整个数据提取操作非常简单快捷;EXCEL批量数据提取支持表头文件设置、数据保存、自动提取表格数据等功能,非常方便易用。有需要的用户可以下载使用。

软件功能
1、EXCEL批量数据提取好用,快速提取你需要的数据
2、自动从庞大的数据表中提取,可以在软件中输入需要提取的数据类型
3、在软件中输入多个数据类,让软件都能识别Excel里面的数据
4、软件自动识别单元格数据并将数据提取到新的Excel文件中
5、可以匹配部分内容,可以准确找到要提取的数据
6、直接在表格列中搜索数据,提取指定列数据
7、提取的数据类型可以独立保存,每种数据类型在Excel中自动创建
软件功能
1、EXCEL批量数据提取好用,为需要汇总数据的朋友提供自动提取功能
2、帮助用户从多个表单中采集数据,软件即时识别所有表单
3、用户只需要设置保存表的文件夹即可进行提取操作
4、每次提取数据时都会创建一个新表。如果没有检测到数据,则不会创建。
5、可以从软件中指定表头,选择已经设置好的Excel文件进行搜索
6、本软件支持office2007以上的Excel文件,也支持WPS表格
指示
1、点击下载管理找到软件安装zip包点击解压,找到.exe文件双击直接进入软件,右键创建桌面快捷方式

2、双击桌面快捷键进入Excel批量数据提取软件操作页面,点击选择版本选择版本软件,同时设置软件参数

3、点击软件要解压的文件所在路径和文件夹的按钮,弹出本地文件管理弹框,点击选择文件再点击选择文件夹即可成功设置解压文件的路径

4、解压后点击路径按钮保存到文件夹

5、在提取文件数据前,可以点击提取参数设置,点击勾选提取功能,让用户更好的提取数据

6、点击软件页面,进入软件主产品功能页面。在该页面,您可以点击选择批量数据排序下的文件处理功能,进入相应页面进行操作。

excelvba抓取网页数据(22期Python读书笔记,先聊聊为什么要坚持对Python的学习~)
网站优化 • 优采云 发表了文章 • 0 个评论 • 81 次浏览 • 2022-03-06 07:16
不知不觉中,我坚持更新了 22 条 Python 阅读笔记。说说为什么要坚持学习Python吧~
作为一个勤奋做Excel知识分享的人,为什么突然分享Python呢?
一、说说Excel的缺点
1、大数据处理能力不足
Excel可以处理几千行、几万行甚至几十万行,但处理几百万行数据总是那么无能为力。能够打开海量数据就很好了,不说怎么处理分析了~
2、抓取网页内容的能力不足
Excel 的另一个缺点是无法抓取网页。之前我也用VBA实现了一些朋友的网页内容爬取需求。可能是我能力有限,没有充分发挥VBA的威力。太好了,很想使用 Python 来获得更多解决方案。
二、谈谈你的个人学习方向
以上缺点已经指明了小编学习、数据处理和网页抓取的方向。
上周四,帮朋友用pandas实现了按某列拆分成不同文件的需求。如果你知道“阿凯的Excel”插件,你就知道我写的插件可以实现这个功能。但是当这个插件面对百万行数据时,我只能说No~
一开始我跟那个朋友说用Python来实现,对方拒绝了,然后我以QQ远程桌面的形式给他展示了用Python处理的速度。怎么形容速度?也就是我执行代码的时候直接生成文件,不用等待时间,然后对方按照我分享的笔记安装Python安装包!
至于网络爬虫,无非是我自己的个人爱好,加上别人的需求~我也想把个人方向改成网站内容抓取-数据自动分析-辅助决策的方向。所以第一个数据源一定要自己解决,只能一点一点的学习~ 查看全部
excelvba抓取网页数据(22期Python读书笔记,先聊聊为什么要坚持对Python的学习~)
不知不觉中,我坚持更新了 22 条 Python 阅读笔记。说说为什么要坚持学习Python吧~
作为一个勤奋做Excel知识分享的人,为什么突然分享Python呢?
一、说说Excel的缺点
1、大数据处理能力不足
Excel可以处理几千行、几万行甚至几十万行,但处理几百万行数据总是那么无能为力。能够打开海量数据就很好了,不说怎么处理分析了~
2、抓取网页内容的能力不足
Excel 的另一个缺点是无法抓取网页。之前我也用VBA实现了一些朋友的网页内容爬取需求。可能是我能力有限,没有充分发挥VBA的威力。太好了,很想使用 Python 来获得更多解决方案。
二、谈谈你的个人学习方向
以上缺点已经指明了小编学习、数据处理和网页抓取的方向。
上周四,帮朋友用pandas实现了按某列拆分成不同文件的需求。如果你知道“阿凯的Excel”插件,你就知道我写的插件可以实现这个功能。但是当这个插件面对百万行数据时,我只能说No~
一开始我跟那个朋友说用Python来实现,对方拒绝了,然后我以QQ远程桌面的形式给他展示了用Python处理的速度。怎么形容速度?也就是我执行代码的时候直接生成文件,不用等待时间,然后对方按照我分享的笔记安装Python安装包!
至于网络爬虫,无非是我自己的个人爱好,加上别人的需求~我也想把个人方向改成网站内容抓取-数据自动分析-辅助决策的方向。所以第一个数据源一定要自己解决,只能一点一点的学习~
excelvba抓取网页数据(使用Excel自带的PowerQuery获取网页表格数据(图))
网站优化 • 优采云 发表了文章 • 0 个评论 • 109 次浏览 • 2022-02-19 22:03
推荐阅读:SEO干货网站内链优化与网站优化>>推荐阅读:企业公众号运营全稿>>
VBA抢网的想法最初是因为我想在股票交易中更快地获取信息,又不想购买昂贵的经纪软件。后来调查发现Python其实是最著名的爬虫制作工具,但是需要安装环境,而且只能在自己的电脑上使用。抓牢。
(一)使用 Excel 自带的 Power Query 获取 web 表单
如果一种方法解决了现有的需求,老实说,我没有动力去寻找第二种方法。在使用VBA网页抓取之前,我已经开始使用Excel的Poewr Query做股票信息分析。我首先使用Power Query的“新建查询”功能从网页获取表格数据(具体方法请参考:/tech/2021 -05-06/doc-ikmyaawc3588981.shtml),可以直接更新到 Excel 表。当时选择的数据源是中国财经网的数据引擎(/cfidata.aspx)。不得不说,这个网站对于使用Excel自动获取web数据源来说真的很友好,因为都是可识别的表格数据。. 这是更新 Excel 后的样子。之后,您可以快速清洁,
但是后来发现这种方法的局限性,就是对数据源要求太高了。很多网站表格数据不能以Excel导入的网站数据源的形式识别,我想股票或者期货的历史数据不收录在这个网站里面。并且爬虫数据分析的Power Query方式,不支持WPS。就这样,我终于放弃了这个想法,开始探索真正的VBA网络捕获实现方法。
(二)Excel VBA实现期货行情获取及历史数据下载
第一步是选择数据源。如果使用 Python 网页抓取,其实数据源很容易找到。许多在线界面都对 Python 开放。开发者甚至不需要寻找源网页,就可以直接使用各种接口提供的现成的结构化数据。,甚至省略了数据处理步骤。不过毕竟还是有很多像我这样的人电脑上没有Python,也不想在电脑上安装Python库(这些现成的接口都需要电脑上安装Python库),或者不想看到电脑软件的变化。在不能使用的情况下,数据源还是比较通用的。在考察了中国期货市场后,我发现可以从四大交易所(郑州、大连、上海、中国金融期货交易所)的官网获取数据。这些网站提供下载链接和一键下载功能。然而,在对html请求和响应的后续分析中,最让我这个强迫症患者无法接受的情况发生了。四个交换中,三个可以被抓到,一个不能被反爬虫抓到。. . 这样,我们只好找其他接口,不行,我不能接受!后来发现,新浪界面真是个宝。所有四个交易所都包括在内。如果好,我决定分析这个网页,然后爬取。它成功了!附上新浪界面链接(这个网页需要自己分析,
实时报价:.cn/quotes_service/view/qihuohangqing.html#titlePos_1
历史数据:.cn/q/view/vFutures_History.php?jys=czce&pz=AP&hy=AP0&breed=AP0&type=inner&start=2021-11-23&end=2021-12-23
第二步是实现代码。VBA爬网入门可以参考B站UP主发布的免费教程(链接/视频/BV1uJ411t7hY/)。这次抢期货的时候,先分析了新浪财经的网页,发现这个界面并不复杂,可以直接用Winhttp请求,然后用正则表达式处理返回的数据。核心代码如下:
发送请求部分
正则表达式匹配并写入数组部分
需要注意的是,在更新产品市场时,产品名称是通过unicode码返回的,所以需要额外转换成汉字。在这一部分中,编写了一个自定义函数。代码如下:
网页抓取部分要注意的另一点是返回的json格式数据的处理。其实VBA可以参考脚本组件实现快速便捷的json数据解析,参考此类组件解析json,自动将unicode转成汉字。但是在这种方法的测试中,wps运行正常,但是有的excel会报错,说是429错误爬虫数据分析缺少ActiveX控件,不好解决。一般这种错误不是excel版本引起的,大概率是没有完整安装,或者wps和office同时安装导致部分系统组件注册失败。这种错误不能通过修改代码来解决(除非代码逻辑改了,其余的组件都没有调用),是系统问题,比如注册表键损坏,操作系统文件被删除,excel不完整安装完毕,系统文件损坏等等。所以最后为了增加兼容性,避免出现此类错误,重新修改了代码,不再使用脚本组件解析json,而是使用了正则表达式。
抓网后,简单写一些数据处理函数公式,设计两种存储方式(保存到当前工作簿,或者新建工作簿),这样软件功能就完成了。在计算日期时,excel自带的工作日功能非常有用。
第三步是交互形式。最后,设计了数据输入的交互表单。代码主要使用输入框方法。核心代码和接口如下:
目前我已经在我的网盘中共享了这个软件,后续更新(如果网络爬不上)版本也会在同一个网盘链接上共享。不过,我一直在努力开发一个软件,我仍然希望能得到一些支持。您可以试试T a B宝搜索“ExcelVBA期货市场历史数据下载器自动计算所有交易所产品的当期期差”。
类似获取股票信息的教程,可以参考我的另一篇文章文章/p/442447962
或T a B宝搜索“股票信息下载软件历史股价分红财务报表自动更新Excel网络爬虫VBA”。 查看全部
excelvba抓取网页数据(使用Excel自带的PowerQuery获取网页表格数据(图))
推荐阅读:SEO干货网站内链优化与网站优化>>推荐阅读:企业公众号运营全稿>>
VBA抢网的想法最初是因为我想在股票交易中更快地获取信息,又不想购买昂贵的经纪软件。后来调查发现Python其实是最著名的爬虫制作工具,但是需要安装环境,而且只能在自己的电脑上使用。抓牢。
(一)使用 Excel 自带的 Power Query 获取 web 表单
如果一种方法解决了现有的需求,老实说,我没有动力去寻找第二种方法。在使用VBA网页抓取之前,我已经开始使用Excel的Poewr Query做股票信息分析。我首先使用Power Query的“新建查询”功能从网页获取表格数据(具体方法请参考:/tech/2021 -05-06/doc-ikmyaawc3588981.shtml),可以直接更新到 Excel 表。当时选择的数据源是中国财经网的数据引擎(/cfidata.aspx)。不得不说,这个网站对于使用Excel自动获取web数据源来说真的很友好,因为都是可识别的表格数据。. 这是更新 Excel 后的样子。之后,您可以快速清洁,

但是后来发现这种方法的局限性,就是对数据源要求太高了。很多网站表格数据不能以Excel导入的网站数据源的形式识别,我想股票或者期货的历史数据不收录在这个网站里面。并且爬虫数据分析的Power Query方式,不支持WPS。就这样,我终于放弃了这个想法,开始探索真正的VBA网络捕获实现方法。
(二)Excel VBA实现期货行情获取及历史数据下载
第一步是选择数据源。如果使用 Python 网页抓取,其实数据源很容易找到。许多在线界面都对 Python 开放。开发者甚至不需要寻找源网页,就可以直接使用各种接口提供的现成的结构化数据。,甚至省略了数据处理步骤。不过毕竟还是有很多像我这样的人电脑上没有Python,也不想在电脑上安装Python库(这些现成的接口都需要电脑上安装Python库),或者不想看到电脑软件的变化。在不能使用的情况下,数据源还是比较通用的。在考察了中国期货市场后,我发现可以从四大交易所(郑州、大连、上海、中国金融期货交易所)的官网获取数据。这些网站提供下载链接和一键下载功能。然而,在对html请求和响应的后续分析中,最让我这个强迫症患者无法接受的情况发生了。四个交换中,三个可以被抓到,一个不能被反爬虫抓到。. . 这样,我们只好找其他接口,不行,我不能接受!后来发现,新浪界面真是个宝。所有四个交易所都包括在内。如果好,我决定分析这个网页,然后爬取。它成功了!附上新浪界面链接(这个网页需要自己分析,
实时报价:.cn/quotes_service/view/qihuohangqing.html#titlePos_1
历史数据:.cn/q/view/vFutures_History.php?jys=czce&pz=AP&hy=AP0&breed=AP0&type=inner&start=2021-11-23&end=2021-12-23
第二步是实现代码。VBA爬网入门可以参考B站UP主发布的免费教程(链接/视频/BV1uJ411t7hY/)。这次抢期货的时候,先分析了新浪财经的网页,发现这个界面并不复杂,可以直接用Winhttp请求,然后用正则表达式处理返回的数据。核心代码如下:
发送请求部分

正则表达式匹配并写入数组部分

需要注意的是,在更新产品市场时,产品名称是通过unicode码返回的,所以需要额外转换成汉字。在这一部分中,编写了一个自定义函数。代码如下:


网页抓取部分要注意的另一点是返回的json格式数据的处理。其实VBA可以参考脚本组件实现快速便捷的json数据解析,参考此类组件解析json,自动将unicode转成汉字。但是在这种方法的测试中,wps运行正常,但是有的excel会报错,说是429错误爬虫数据分析缺少ActiveX控件,不好解决。一般这种错误不是excel版本引起的,大概率是没有完整安装,或者wps和office同时安装导致部分系统组件注册失败。这种错误不能通过修改代码来解决(除非代码逻辑改了,其余的组件都没有调用),是系统问题,比如注册表键损坏,操作系统文件被删除,excel不完整安装完毕,系统文件损坏等等。所以最后为了增加兼容性,避免出现此类错误,重新修改了代码,不再使用脚本组件解析json,而是使用了正则表达式。
抓网后,简单写一些数据处理函数公式,设计两种存储方式(保存到当前工作簿,或者新建工作簿),这样软件功能就完成了。在计算日期时,excel自带的工作日功能非常有用。
第三步是交互形式。最后,设计了数据输入的交互表单。代码主要使用输入框方法。核心代码和接口如下:


目前我已经在我的网盘中共享了这个软件,后续更新(如果网络爬不上)版本也会在同一个网盘链接上共享。不过,我一直在努力开发一个软件,我仍然希望能得到一些支持。您可以试试T a B宝搜索“ExcelVBA期货市场历史数据下载器自动计算所有交易所产品的当期期差”。
类似获取股票信息的教程,可以参考我的另一篇文章文章/p/442447962
或T a B宝搜索“股票信息下载软件历史股价分红财务报表自动更新Excel网络爬虫VBA”。
excelvba抓取网页数据(如何不使用Python去爬取网页表格数据功能?)
网站优化 • 优采云 发表了文章 • 0 个评论 • 92 次浏览 • 2022-02-16 00:01
现在很多朋友都知道Python可以用来爬取数据,但是如果你想从零基础开始学习Python爬虫,还是需要一些时间来学习Python的。但是,如果是为了一些简单的网页表格数据爬取,就没有必要使用Python了。
所以今天我将教大家如何在不使用 Python 的情况下抓取网页数据。
Excel的通用方法之一就是Excel,Excel表格可以帮你实现简单的网页表格数据爬取功能。
首先找到你要爬取的数据表
比如今天爬中国天气网的广东天气预报~
然后我们从 网站 复制链接,打开 Excel,在菜单栏上找到:Data – From 网站
然后将刚才复制的链接粘贴到刚刚打开的链接中:New Web Query
点击Go打开网站,在这里预览中找到你要导入的数据表,勾选左上角
选择好后点击右下角的导入,将选中的表格数据导入Excel
数据导入...
接下来就可以在Excel表格中一一看到想要呈现的数据了~
也有一些朋友有疑问。这样导出的数据是固定的。如果网页数据更新了,是否需要重新导入?
其实不是,Excel还自带数据刷新功能。我们还是在菜单栏中找到:data-refresh all下的link properties
在链接属性处选择刷新条件、刷新频率、时间等,然后Excel会根据你设置的刷新属性自动更新数据~
以上就是一个自动抓取刷新数据的Excel表格的完成啦~~
当然,使用 Excel 表格爬取数据有利有弊。优点是利用Excel自带的函数来采集和更新数据,简单方便,不涉及编程等繁琐操作。缺点是Excel网页数据抓取只能抓取表格数据,其他数据获取起来有些困难。
所以如果你想获得更多样化的网页数据,不妨学习一下Python,它是目前爬虫中最容易学习的。一波安利~
如果还想知道更多实用的小技巧,可以关注一下,下次更新及时通知 W= 查看全部
excelvba抓取网页数据(如何不使用Python去爬取网页表格数据功能?)
现在很多朋友都知道Python可以用来爬取数据,但是如果你想从零基础开始学习Python爬虫,还是需要一些时间来学习Python的。但是,如果是为了一些简单的网页表格数据爬取,就没有必要使用Python了。
所以今天我将教大家如何在不使用 Python 的情况下抓取网页数据。
Excel的通用方法之一就是Excel,Excel表格可以帮你实现简单的网页表格数据爬取功能。
首先找到你要爬取的数据表
比如今天爬中国天气网的广东天气预报~
然后我们从 网站 复制链接,打开 Excel,在菜单栏上找到:Data – From 网站
然后将刚才复制的链接粘贴到刚刚打开的链接中:New Web Query
点击Go打开网站,在这里预览中找到你要导入的数据表,勾选左上角
选择好后点击右下角的导入,将选中的表格数据导入Excel
数据导入...
接下来就可以在Excel表格中一一看到想要呈现的数据了~
也有一些朋友有疑问。这样导出的数据是固定的。如果网页数据更新了,是否需要重新导入?
其实不是,Excel还自带数据刷新功能。我们还是在菜单栏中找到:data-refresh all下的link properties
在链接属性处选择刷新条件、刷新频率、时间等,然后Excel会根据你设置的刷新属性自动更新数据~
以上就是一个自动抓取刷新数据的Excel表格的完成啦~~
当然,使用 Excel 表格爬取数据有利有弊。优点是利用Excel自带的函数来采集和更新数据,简单方便,不涉及编程等繁琐操作。缺点是Excel网页数据抓取只能抓取表格数据,其他数据获取起来有些困难。
所以如果你想获得更多样化的网页数据,不妨学习一下Python,它是目前爬虫中最容易学习的。一波安利~
如果还想知道更多实用的小技巧,可以关注一下,下次更新及时通知 W=
excelvba抓取网页数据( 一下如何用Excel快速抓取网页数据(图))
网站优化 • 优采云 发表了文章 • 0 个评论 • 111 次浏览 • 2022-02-13 16:02
一下如何用Excel快速抓取网页数据(图))
网站上的数据来源是我们统计分析的重要信息来源。我们生活中经常听到一个词叫“爬虫”,它可以快速爬取网页上的数据,这对于数据分析相关的工作来说是极其重要的,也是必备的技能之一。但是,大多数爬虫都需要编程知识,普通人很难上手。今天我将向您展示如何使用 Excel 快速抓取 Web 数据。
1、首先打开要抓取的数据的网站,复制网站的地址。
2、创建一个新的 Excel 工作簿,然后单击“数据”菜单 >“获取外部数据”选项卡中的“来自网站”选项。
在弹出的“New Web Query”对话框中,在地址栏中输入要捕获的网站的地址,点击“Go”
点击黄色导入箭头,选择要抓取的部分,如图。点击导入。
3、选择存储数据的位置(默认选中的单元格),点击确定。一般建议将数据存储在“A1”单元格中。
4、如果想让Excel工作簿数据根据网站的数据实时自动更新,那么我们需要在“属性”中进行设置。可以设置“允许后台刷新”、“刷新频率”、“打开文件时刷新数据”等。
拿到数据之后,就需要对数据进行处理,而处理数据是比较重要的一环。更多数据处理技巧,请关注我!
如果对你有帮助,记得点赞转发。
关注我,了解更多 Excel 技巧,让工作更轻松。 查看全部
excelvba抓取网页数据(
一下如何用Excel快速抓取网页数据(图))
网站上的数据来源是我们统计分析的重要信息来源。我们生活中经常听到一个词叫“爬虫”,它可以快速爬取网页上的数据,这对于数据分析相关的工作来说是极其重要的,也是必备的技能之一。但是,大多数爬虫都需要编程知识,普通人很难上手。今天我将向您展示如何使用 Excel 快速抓取 Web 数据。
1、首先打开要抓取的数据的网站,复制网站的地址。
2、创建一个新的 Excel 工作簿,然后单击“数据”菜单 >“获取外部数据”选项卡中的“来自网站”选项。
在弹出的“New Web Query”对话框中,在地址栏中输入要捕获的网站的地址,点击“Go”
点击黄色导入箭头,选择要抓取的部分,如图。点击导入。
3、选择存储数据的位置(默认选中的单元格),点击确定。一般建议将数据存储在“A1”单元格中。
4、如果想让Excel工作簿数据根据网站的数据实时自动更新,那么我们需要在“属性”中进行设置。可以设置“允许后台刷新”、“刷新频率”、“打开文件时刷新数据”等。
拿到数据之后,就需要对数据进行处理,而处理数据是比较重要的一环。更多数据处理技巧,请关注我!
如果对你有帮助,记得点赞转发。
关注我,了解更多 Excel 技巧,让工作更轻松。
excelvba抓取网页数据(Sub提取word表格()()表格当中图)
网站优化 • 优采云 发表了文章 • 0 个评论 • 139 次浏览 • 2022-02-13 15:26
今天的例子来自公众号的一位粉丝,如下图:
有几个word文档形式相同但内容不同。要求是:将word中表格的所有内容汇总成一个excel表格,如下图:
是的,你也可以在word中使用vba代码。
思路也很简单:遍历读取每个word文档,将指定的表格内容提取到excel表格中。源码如下。
子提取词表()
mypath=ThisWorkbook.Path&"\"
myname=Dir(mypath&"*.docx")
m=1
DoWhilemyname""
Setmydoc=GetObject(mypath&myname)
用我的文档
m=m+1
With.Tables(1)
单元格(m,1)=m-1'Number
Range("A1:F1")=Array("序列号","姓名","性别","身份证号","地址","联系方式")
Cells(m,2)=Replace(.cell(1,2).Range.Text,"","")
Cells(m,3)=Replace(.cell(2,2).Range.Text,"","")
Cells(m,4)=Replace(.cell(3,2).Range.Text,"","")
Cells(m,5)=Replace(.cell(4,2).Range.Text,"","")
Cells(m,6)=Replace(.cell(5,2).Range.Text,"","")
结束
.CloseFalse
结束
我的名字=Dir()
循环
Setmydoc=Nothing
MsgBox "提取完成"
结束子
看效果:
是不是很神奇?
如果您在操作过程中有任何问题,欢迎交流。源文件准备好,如有需要,可以后台回复“word form”。 查看全部
excelvba抓取网页数据(Sub提取word表格()()表格当中图)
今天的例子来自公众号的一位粉丝,如下图:
有几个word文档形式相同但内容不同。要求是:将word中表格的所有内容汇总成一个excel表格,如下图:
是的,你也可以在word中使用vba代码。
思路也很简单:遍历读取每个word文档,将指定的表格内容提取到excel表格中。源码如下。
子提取词表()
mypath=ThisWorkbook.Path&"\"
myname=Dir(mypath&"*.docx")
m=1
DoWhilemyname""
Setmydoc=GetObject(mypath&myname)
用我的文档
m=m+1
With.Tables(1)
单元格(m,1)=m-1'Number
Range("A1:F1")=Array("序列号","姓名","性别","身份证号","地址","联系方式")
Cells(m,2)=Replace(.cell(1,2).Range.Text,"","")
Cells(m,3)=Replace(.cell(2,2).Range.Text,"","")
Cells(m,4)=Replace(.cell(3,2).Range.Text,"","")
Cells(m,5)=Replace(.cell(4,2).Range.Text,"","")
Cells(m,6)=Replace(.cell(5,2).Range.Text,"","")
结束
.CloseFalse
结束
我的名字=Dir()
循环
Setmydoc=Nothing
MsgBox "提取完成"
结束子
看效果:
是不是很神奇?
如果您在操作过程中有任何问题,欢迎交流。源文件准备好,如有需要,可以后台回复“word form”。
excelvba抓取网页数据( VBA·5个月前如何使用VBA网抓的,我基本都没有回复 )
网站优化 • 优采云 发表了文章 • 0 个评论 • 66 次浏览 • 2022-02-05 22:04
VBA·5个月前如何使用VBA网抓的,我基本都没有回复
)
使用Excel+VBA操作网页
黄晨
·因为5个月前知乎的一些回答,最近有私信问我怎么用VBA抓图,但我基本没有回复。因为这个问题太大了,对于有基础知识的人来说,在百度或者ExcelHome论坛上其实很容易找到答案,我也不用多说。对于没有基础知识的人来说,三言两语是不可能解决问题的。我不想将私人消息变成聊天窗口。趁着知乎开专栏的机会,正好来详细解释一下这个问题。
我对Excel和VBA的了解有限,只能解决一些遇到的问题,不一定适用于所有场景。以下内容基于对基本 VBA 使用以及 HTML 语言知识的理解:
一、前期准备
据我所知,VBA不能操作任何浏览器和网页,我们能做的就是在IE上做一些操作,没错,就是IE。不要告诉我我的电脑上没有IE,所以我可以Exit Sub。就像 Python 使用 import 和 C# 使用 using 一样,VBA 也需要引用一些库来操作 IE,不过好在它是微软的产品,所以我们可以轻松使用 VBA 自带的一些库。
我们要做的第一件事就是参考 VBA 中的 Micorsoft Internet Controls。从名字上我们就知道它是用来帮助我们控制IE页面的。
二、网络运营
引用 Micorsoft Internet Controls 之后,我们可以对页面做任何我们想做的事情,但我们必须在主页上拥有一个页面,上帝说我们应该有一个页面!
1、打开网页
我们以百度搜索“chahu”关键词为例:
1 With CreateObject("internetexplorer.application")
2 .Visible = True
3 .Navigate "https://www.baidu.com/s?wd=扯乎"
4'关闭网页
5' .Quit
6 End With
7
8
代码很简单,先创建一个IE对象,然后赋值一些属性。Visible 是可见性,表示在操作网页时是否会看到该网页。熟练后可以设置为False,这样不仅让程序运行起来感觉很神秘(其实不然),速度也快了一点。
但是有一点要记住,这个网页我们打开后并没有关闭,也就是说程序结束后需要手动关闭。如果网页不可见,则无法手动关闭。代码的注释部分用于关闭网页。导航不用说就是URL。
我们必须等待网页完全加载后才能开始抓取信息。这时候,我们使用:(从这里开始,所有的代码都需要写在With代码块中)
1 While .ReadyState 4 Or .Busy
2 DoEvents
3 Wend
4
5
Busy是网页的忙碌状态,ReadyState是HTTP的五个就绪状态,对应如下:
2、获取信息
我们先抓取页面上的所有内容,后面过滤掉有用的部分,然后慢慢的给抓取添加条件。
1 Set dmt = .Document
2 For i = 0 To dmt.all.Length - 1
3 Set htMent = dmt.all(i)
4 With ActiveSheet
5 .Cells(i + 2, "A") = htMent.tagName
6 .Cells(i + 2, "B") = TypeName(htMent)
7 .Cells(i + 2, "C") = htMent.ID
8 .Cells(i + 2, "D") = htMent.Name
9 .Cells(i + 2, "E") = htMent.Value
10 .Cells(i + 2, "F") = htMent.Text
11 .Cells(i + 2, "G") = htMent.innerText
12 End With
13 Next i
14
15
这段代码有点类似于JS,需要从IE.Document.all中找出页面上的所有节点。这里还有一些其他的方法:
这些都是在爬取整个页面内容后方便用来帮助过滤有效信息的。当然,all 仍然是最好用的,因为 all 也有 all("IDName") 和 all.IDName 用法。
上面代码部分返回的属性值是HTML的基本内容,就不一一解释了。
3、填写信息
当然,爬网神器依然是 Python。大多数人使用Excel的目的是自动填写页面内容,直接将表单提交到页面,输入问卷。爬取页面内容后,填充就更简单了,直接给页面标签的Value属性赋值即可。
但是网页中除了文本框外,可能还有其他一些没有Value的标签,比如:下拉菜单、单选按钮。给这个内容赋值需要一些基本的HTML知识。
1'下拉菜单选择
2.all("select")(0).Selected = True
3'单选按钮选择
4.all("radio").Checked = True
5'复选按钮选择
6.all("checkbox").Checked = True
7
8
下拉菜单是一个选择标签,每个选项都在一个选项标签中,所以要返回一个集合,如果需要选择一个选项,需要修改对应的Selected属性为True。单选按钮和复选按钮都是输入标签。不同的是类型是单选和复选框。要选择一个选项,您需要修改相应的 Checked 属性。
三、数据接口
有时我们可以直接获取一些API。当然,通过API返回数据比打开网页更方便快捷,使用的方法也不同。
1、请求接口
比如我从网上找了一个可以按城市查询免费WIFI的API,通过Excel接口使用如下代码访问:(虽然是免费的,但我隐藏了我的AppKey以免麻烦)
1 Dim http
2 Set http = CreateObject("Microsoft.XMLHTTP")
3 http.Open "GET", "http://api.avatardata.cn/Wifi/QueryByCity", False
4 http.setRequestHeader "CONTENT-TYPE", "application/x-www-form-urlencoded"
5 http.send "key=[AppKey]&city=北京&page=1"
6
7
这时候我们创建的对象就不再是IE了,而是一个HTTP对象。这里使用ajax的Open方法,GET为数据发送方法,第二个参数为接口地址,第三个参数指定请求方法是否异步。如果这个API有账号密码,分别写在第四个和第五个参数中。
setRequestHeader就是向接口发送一个HTTP协议头文件,send的最终内容就是接口参数。当然,这个QueryString也可以直接写在URL中,发送一个空字符串即可。
2、接口返回
接口返回采集的方式很简单:
1 If http.Status = 200 Then Range("A1").Value = http.responseText
2
3 查看全部
excelvba抓取网页数据(
VBA·5个月前如何使用VBA网抓的,我基本都没有回复
)
使用Excel+VBA操作网页
黄晨
·因为5个月前知乎的一些回答,最近有私信问我怎么用VBA抓图,但我基本没有回复。因为这个问题太大了,对于有基础知识的人来说,在百度或者ExcelHome论坛上其实很容易找到答案,我也不用多说。对于没有基础知识的人来说,三言两语是不可能解决问题的。我不想将私人消息变成聊天窗口。趁着知乎开专栏的机会,正好来详细解释一下这个问题。
我对Excel和VBA的了解有限,只能解决一些遇到的问题,不一定适用于所有场景。以下内容基于对基本 VBA 使用以及 HTML 语言知识的理解:
一、前期准备
据我所知,VBA不能操作任何浏览器和网页,我们能做的就是在IE上做一些操作,没错,就是IE。不要告诉我我的电脑上没有IE,所以我可以Exit Sub。就像 Python 使用 import 和 C# 使用 using 一样,VBA 也需要引用一些库来操作 IE,不过好在它是微软的产品,所以我们可以轻松使用 VBA 自带的一些库。
我们要做的第一件事就是参考 VBA 中的 Micorsoft Internet Controls。从名字上我们就知道它是用来帮助我们控制IE页面的。
二、网络运营
引用 Micorsoft Internet Controls 之后,我们可以对页面做任何我们想做的事情,但我们必须在主页上拥有一个页面,上帝说我们应该有一个页面!
1、打开网页
我们以百度搜索“chahu”关键词为例:
1 With CreateObject("internetexplorer.application")
2 .Visible = True
3 .Navigate "https://www.baidu.com/s?wd=扯乎"
4'关闭网页
5' .Quit
6 End With
7
8
代码很简单,先创建一个IE对象,然后赋值一些属性。Visible 是可见性,表示在操作网页时是否会看到该网页。熟练后可以设置为False,这样不仅让程序运行起来感觉很神秘(其实不然),速度也快了一点。
但是有一点要记住,这个网页我们打开后并没有关闭,也就是说程序结束后需要手动关闭。如果网页不可见,则无法手动关闭。代码的注释部分用于关闭网页。导航不用说就是URL。
我们必须等待网页完全加载后才能开始抓取信息。这时候,我们使用:(从这里开始,所有的代码都需要写在With代码块中)
1 While .ReadyState 4 Or .Busy
2 DoEvents
3 Wend
4
5
Busy是网页的忙碌状态,ReadyState是HTTP的五个就绪状态,对应如下:
2、获取信息
我们先抓取页面上的所有内容,后面过滤掉有用的部分,然后慢慢的给抓取添加条件。
1 Set dmt = .Document
2 For i = 0 To dmt.all.Length - 1
3 Set htMent = dmt.all(i)
4 With ActiveSheet
5 .Cells(i + 2, "A") = htMent.tagName
6 .Cells(i + 2, "B") = TypeName(htMent)
7 .Cells(i + 2, "C") = htMent.ID
8 .Cells(i + 2, "D") = htMent.Name
9 .Cells(i + 2, "E") = htMent.Value
10 .Cells(i + 2, "F") = htMent.Text
11 .Cells(i + 2, "G") = htMent.innerText
12 End With
13 Next i
14
15
这段代码有点类似于JS,需要从IE.Document.all中找出页面上的所有节点。这里还有一些其他的方法:
这些都是在爬取整个页面内容后方便用来帮助过滤有效信息的。当然,all 仍然是最好用的,因为 all 也有 all("IDName") 和 all.IDName 用法。
上面代码部分返回的属性值是HTML的基本内容,就不一一解释了。
3、填写信息
当然,爬网神器依然是 Python。大多数人使用Excel的目的是自动填写页面内容,直接将表单提交到页面,输入问卷。爬取页面内容后,填充就更简单了,直接给页面标签的Value属性赋值即可。
但是网页中除了文本框外,可能还有其他一些没有Value的标签,比如:下拉菜单、单选按钮。给这个内容赋值需要一些基本的HTML知识。
1'下拉菜单选择
2.all("select")(0).Selected = True
3'单选按钮选择
4.all("radio").Checked = True
5'复选按钮选择
6.all("checkbox").Checked = True
7
8
下拉菜单是一个选择标签,每个选项都在一个选项标签中,所以要返回一个集合,如果需要选择一个选项,需要修改对应的Selected属性为True。单选按钮和复选按钮都是输入标签。不同的是类型是单选和复选框。要选择一个选项,您需要修改相应的 Checked 属性。
三、数据接口
有时我们可以直接获取一些API。当然,通过API返回数据比打开网页更方便快捷,使用的方法也不同。
1、请求接口
比如我从网上找了一个可以按城市查询免费WIFI的API,通过Excel接口使用如下代码访问:(虽然是免费的,但我隐藏了我的AppKey以免麻烦)
1 Dim http
2 Set http = CreateObject("Microsoft.XMLHTTP")
3 http.Open "GET", "http://api.avatardata.cn/Wifi/QueryByCity", False
4 http.setRequestHeader "CONTENT-TYPE", "application/x-www-form-urlencoded"
5 http.send "key=[AppKey]&city=北京&page=1"
6
7
这时候我们创建的对象就不再是IE了,而是一个HTTP对象。这里使用ajax的Open方法,GET为数据发送方法,第二个参数为接口地址,第三个参数指定请求方法是否异步。如果这个API有账号密码,分别写在第四个和第五个参数中。
setRequestHeader就是向接口发送一个HTTP协议头文件,send的最终内容就是接口参数。当然,这个QueryString也可以直接写在URL中,发送一个空字符串即可。
2、接口返回
接口返回采集的方式很简单:
1 If http.Status = 200 Then Range("A1").Value = http.responseText
2
3
excelvba抓取网页数据( VBA·5个月前如何使用VBA网抓的? )
网站优化 • 优采云 发表了文章 • 0 个评论 • 88 次浏览 • 2022-02-04 15:23
VBA·5个月前如何使用VBA网抓的?
)
使用Excel+VBA操作网页
黄晨5 个月前
由于知乎中的一些答案,最近总是有私信问我如何使用VBA进行抓包,但我基本没有回复。因为这个问题太大了,对于有基础知识的人来说,在百度或者ExcelHome论坛上其实很容易找到答案,我也不用多说。对于没有基础知识的人来说,三言两语是不可能解决问题的。我不想将私人消息变成聊天窗口。趁着知乎开专栏的机会,正好来详细解释一下这个问题。
我对Excel和VBA的了解有限,只能解决一些遇到的问题,不一定适用于所有场景。以下内容是在了解基本VBA使用和HTML语言知识的基础上创建的:css
1、前期准备
据我所知,VBA不能操作任何浏览器和网页,我们能做的就是在IE上做一些操作,是的,只有IE。不要告诉我我的电脑上没有IE,所以我可以Exit Sub。就像 Python 使用 import 和 C# 使用 using 一样,VBA 也需要参考一些库来操作 IE,但好在它们都是微软的产品,所以我们可以轻松使用 VBA 自带的一些库。阿贾克斯
我们要做的第一件事就是参考 VBA 中的 Micorsoft Internet Controls。从名字上我们就知道它是用来帮助我们控制IE页面的。json
2、网页操作
引用微软互联网控制之后,我们可以对页面做任何我们想做的事情,但我们必须在主页上有一个页面,上帝说我们必须有一个页面!api
一、打开网页数组
以百度搜索“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 的五个就绪状态,对应如下: 异步
二、获取信息
我们先抓取页面上的所有内容,后面过滤掉有用的部分,然后慢慢给抓取添加条件。
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的基本内容,就不一一解释了。
三、填写信息
虽然网页爬取神器还是Python,但是大部分人使用Excel的目的是自动填写页面内容,直接提交表单到页面,输入问卷。爬取页面内容后,填充就更简单了,只需要直接给页面标签的Value属性赋值即可。
但是网页中除了文本框外,可能还有其他一些没有Value的标签,比如:下拉菜单、单选按钮。给这个内容赋值需要一些基本的HTML知识。
'下拉菜单选择
.all("select")(0).Selected = True
'单选按钮选择
.all("radio").Checked = True
'复选按钮选择
.all("checkbox").Checked = True
下拉菜单是一个选择标签,每个选项都在一个选项标签中,所以返回一个集合。要选择一个选项,请将相应的 Selected 属性修改为 True。单选按钮和复选按钮都是输入标签。不同的是类型是单选和复选框。要选择一个选项,您需要修改相应的 Checked 属性。
3、数据接口
有时我们可以直接获取一些API。当然,通过 API 返回数据比打开网页更方便快捷,但使用的方法也不同。
一、请求接口
比如我从网上获取了一个可以查询某城市免费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协议头文件,最后send的内容就是接口参数。当然,这个QueryString也可以直接写在URL中,发送一个空字符串即可。
二、接口返回
接口返回采集的方式很简单:
If http.Status = 200 Then Range("A1").Value = http.responseText 查看全部
excelvba抓取网页数据(
VBA·5个月前如何使用VBA网抓的?
)
使用Excel+VBA操作网页

黄晨5 个月前
由于知乎中的一些答案,最近总是有私信问我如何使用VBA进行抓包,但我基本没有回复。因为这个问题太大了,对于有基础知识的人来说,在百度或者ExcelHome论坛上其实很容易找到答案,我也不用多说。对于没有基础知识的人来说,三言两语是不可能解决问题的。我不想将私人消息变成聊天窗口。趁着知乎开专栏的机会,正好来详细解释一下这个问题。
我对Excel和VBA的了解有限,只能解决一些遇到的问题,不一定适用于所有场景。以下内容是在了解基本VBA使用和HTML语言知识的基础上创建的:css
1、前期准备
据我所知,VBA不能操作任何浏览器和网页,我们能做的就是在IE上做一些操作,是的,只有IE。不要告诉我我的电脑上没有IE,所以我可以Exit Sub。就像 Python 使用 import 和 C# 使用 using 一样,VBA 也需要参考一些库来操作 IE,但好在它们都是微软的产品,所以我们可以轻松使用 VBA 自带的一些库。阿贾克斯
我们要做的第一件事就是参考 VBA 中的 Micorsoft Internet Controls。从名字上我们就知道它是用来帮助我们控制IE页面的。json
2、网页操作
引用微软互联网控制之后,我们可以对页面做任何我们想做的事情,但我们必须在主页上有一个页面,上帝说我们必须有一个页面!api
一、打开网页数组
以百度搜索“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 的五个就绪状态,对应如下: 异步
二、获取信息
我们先抓取页面上的所有内容,后面过滤掉有用的部分,然后慢慢给抓取添加条件。
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的基本内容,就不一一解释了。
三、填写信息
虽然网页爬取神器还是Python,但是大部分人使用Excel的目的是自动填写页面内容,直接提交表单到页面,输入问卷。爬取页面内容后,填充就更简单了,只需要直接给页面标签的Value属性赋值即可。
但是网页中除了文本框外,可能还有其他一些没有Value的标签,比如:下拉菜单、单选按钮。给这个内容赋值需要一些基本的HTML知识。
'下拉菜单选择
.all("select")(0).Selected = True
'单选按钮选择
.all("radio").Checked = True
'复选按钮选择
.all("checkbox").Checked = True
下拉菜单是一个选择标签,每个选项都在一个选项标签中,所以返回一个集合。要选择一个选项,请将相应的 Selected 属性修改为 True。单选按钮和复选按钮都是输入标签。不同的是类型是单选和复选框。要选择一个选项,您需要修改相应的 Checked 属性。
3、数据接口
有时我们可以直接获取一些API。当然,通过 API 返回数据比打开网页更方便快捷,但使用的方法也不同。
一、请求接口
比如我从网上获取了一个可以查询某城市免费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协议头文件,最后send的内容就是接口参数。当然,这个QueryString也可以直接写在URL中,发送一个空字符串即可。
二、接口返回
接口返回采集的方式很简单:
If http.Status = 200 Then Range("A1").Value = http.responseText