ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 12550|回复: 55

[分享] 网抓技巧-复制网页表格,不用遍历单元格

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2022-5-23 16:31 | 显示全部楼层 |阅读模式
     其实我一直是遍历读取Table内容的,今天看到一个帖子求助类似于复制网页表格。我专门搜了一下,还真可以直接复制网页表格,这里我稍微改进了一下,应该有表格的网页都能通用
参考:https://club.excelhome.net/thread-1192289-1-1.html

参考:https://stackoverflow.com/questi ... oping-through-cells

求助帖:https://club.excelhome.net/thread-1628185-1-2.html


  1. ''''对应表格复制
  2. Sub tableTest()
  3.     Set winhttp = CreateObject("winhttp.WinHttpRequest.5.1")
  4.     Set HTML = CreateObject("htmlfile")
  5.     Set oWindow = HTML.ParentWindow
  6.     Url = "https://www.taiwanlottery.com.tw/Lotto/BINGOBINGO/drawing.aspx"
  7.     With winhttp
  8.         .Open "GET", Url, False
  9.         .send
  10.         strText = .responsetext
  11. ''            Debug.Print strText
  12.     End With
  13.     HTML.body.innerhtml = strText
  14.     Set tables = HTML.getElementsByClassName("tableFull")
  15.     Set Table = tables(0)
  16.    
  17.     '''写入剪切板 第一种
  18.     oWindow.ClipboardData.SetData "text", Table.outerHTML
  19.    
  20.     '''写入剪切板 第二种
  21. '    Set clipboard = New MSForms.DataObject
  22. '    clipboard.SetText Table.outerHTML
  23. '    clipboard.PutInClipboard

  24.     ActiveSheet.Range("a1").Select
  25.     ActiveSheet.Paste
  26.    
  27.     Set winhttp = Nothing
  28.     Set HTML = Nothing
  29.     Set oWindow = Nothing
  30. End Sub
  31. ''''所有表格
  32. Sub alltableTest()
  33.     Set winhttp = CreateObject("winhttp.WinHttpRequest.5.1")
  34.     Set HTML = CreateObject("htmlfile")
  35.     Set oWindow = HTML.ParentWindow
  36.     Url = "https://www.taiwanlottery.com.tw/Lotto/BINGOBINGO/drawing.aspx"
  37.     With winhttp
  38.         .Open "GET", Url, False
  39.         .send
  40.         strText = .responsetext
  41. ''            Debug.Print strText
  42.     End With
  43.     HTML.body.innerhtml = strText
  44.     Set tables = HTML.getElementsByTagName("table")
  45.     aa = 1
  46.     For i = 0 To tables.Length - 1
  47.         Set Table = tables(i)
  48.         
  49.         '''写入剪切板 第一种
  50.         oWindow.ClipboardData.SetData "text", Table.outerHTML
  51.         
  52.         '''写入剪切板 第二种
  53.     '    Set clipboard = New MSForms.DataObject
  54.     '    clipboard.SetText Table.outerHTML
  55.     '    clipboard.PutInClipboard
  56.    
  57.         ActiveSheet.Cells(1, aa).Select
  58.         ActiveSheet.Paste
  59.         oWindow.ClipboardData.SetData "text", ""
  60.         aa = ActiveSheet.UsedRange.Columns.Count + 2
  61.     Next
  62.     Set winhttp = Nothing
  63.     Set HTML = Nothing
  64.     Set oWindow = Nothing
  65. End Sub
复制代码


评分

6

查看全部评分

TA的精华主题

TA的得分主题

发表于 2022-5-23 22:13 | 显示全部楼层
谢谢楼主认真回复。
我复制进Excel里F8运行,可是在.sent 语句处 还是自动化错误。见下图。
是不是我电脑不行啊。。。我是XP系统.Exce l2007版本。能远程下不?

粘宾6网.jpg

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-5-24 09:27 | 显示全部楼层
maxi20 发表于 2022-5-23 22:13
谢谢楼主认真回复。
我复制进Excel里F8运行,可是在.sent 语句处 还是自动化错误。见下图。
是不是我电脑 ...

替换CreateObject("winhttp.WinHttpRequest.5.1")
可以用这些对象
CreateObject("MSXML2.XMLHTTP")   
CreateObject("Microsoft.XMLHTTP")
CreateObject("MSXML2.ServerXMLHTTP")
参考5楼:https://club.excelhome.net/forum ... 760&pid=6122066

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2022-5-24 12:29 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
  1. ''''所有表格
  2. Sub alltableTest()
  3.     Set winhttp = CreateObject("winhttp.WinHttpRequest.5.1")
  4.     Set HTML = CreateObject("htmlfile")
  5.     Set oWindow = HTML.ParentWindow
  6.     Url = "http://fx.cmbchina.com/Hq/History.aspx?nbr=%u7F8E%u5143&page=1" 'page=1这里的1是第1页,我要捉取网页的第1页和第2页,要怎么改

  7.     With winhttp
  8.         .Open "GET", Url, False
  9.         .send
  10.         strText = .responsetext
  11. ''            Debug.Print strText
  12.     End With
  13.     HTML.body.innerhtml = strText
  14.     Set tables = HTML.getElementsByTagName("table")
  15.     aa = 1
  16.     For i = 0 To tables.Length - 1
  17.         Set Table = tables(i)
  18.         
  19.         '''写入剪切板 第一种
  20.         oWindow.ClipboardData.SetData "text", Table.outerHTML
  21.         
  22.         '''写入剪切板 第二种
  23.     '    Set clipboard = New MSForms.DataObject
  24.     '    clipboard.SetText Table.outerHTML
  25.     '    clipboard.PutInClipboard
  26.    
  27.         ActiveSheet.Cells(1, aa).Select
  28.         ActiveSheet.Paste
  29.         oWindow.ClipboardData.SetData "text", ""
  30.         aa = ActiveSheet.UsedRange.Columns.Count + 2
  31.     Next
  32.     Set winhttp = Nothing
  33.     Set HTML = Nothing
  34.     Set oWindow = Nothing
  35. End Sub
复制代码
Url = "http://fx.cmbchina.com/Hq/History.aspx?nbr=%u7F8E%u5143&page=1" 'page=1这里的1是第1页,我要捉取网页的第1页和第2页,要怎么改



麻烦老师帮我改下吗,谢谢

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-5-24 14:51 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
shenzhenyang 发表于 2022-5-24 12:29
Url = "http://fx.cmbchina.com/Hq/History.aspx?nbr=%u7F8E%u5143&page=1" 'page=1这里的1是第1页,我要捉 ...

加一个外循环,把aa=1放在外循环外面
参考:


111.png
222.png

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2022-5-24 14:54 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
Mark一下,方便查询

TA的精华主题

TA的得分主题

发表于 2022-5-24 15:40 | 显示全部楼层
perfect131 发表于 2022-5-24 14:51
加一个外循环,把aa=1放在外循环外面
参考:

11.png 22.png 44.png



Set winhttp = CreateObject("Microsoft.XMLHTTP")
我换成这个从第58列写入第2页的网页数据,

我想网页第2页从52行开始写入,不要第2页的标题,老师麻烦帮我看下,谢谢

求助.rar

17.19 KB, 下载次数: 26

TA的精华主题

TA的得分主题

发表于 2022-5-24 15:50 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-5-24 16:07 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
lwx228 发表于 2022-5-24 15:50
好吧、来个更简单的

不错,不过你这个感觉跟 excel pq一样,pq是自带的方便一点,还不如用pq

TA的精华主题

TA的得分主题

发表于 2022-5-24 16:54 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
perfect131 发表于 2022-5-24 09:27
替换CreateObject("winhttp.WinHttpRequest.5.1")
可以用这些对象
CreateObject("MSXML2.XMLHTTP")   
...

谢谢认真回复。
这语句CreateObject("winhttp.WinHttpRequest.5.1") 我换那几个了,F8都是.send时报错拷图样自动化错误,出错代码略不同。

我将你这两vba程序拷到邻居家,他是Win10系统,第二段所有表格vab程序可以运行的通。你既然发出这程序段,肯定是分析过那网页能运行的,那就是我Xp系统电脑不匹配呗.....
你介绍的论坛第5楼,我看的不明就里。
小白真难。。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-16 10:40 , Processed in 0.048284 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表