ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] VBA 网页抓取数据进行翻页,单步执行可以,F5运行出错

[复制链接]

TA的精华主题

TA的得分主题

发表于 2014-9-27 15:44 | 显示全部楼层 |阅读模式
本帖已被收录到知识树中,索引项:网页交互
本帖最后由 张文洲 于 2014-9-27 16:04 编辑

最近在学习网页抓取数据,比如要在百度地图查询  “武汉 公园” 的信息,要对查询结果进行翻页,单步运行代码没有问题,按F5就提示:“对象变量或With模块变量未设置”
请大神们指点迷津
  1. Sub LOADIE()   '在代码的常见的处理情况
  2. Dim i, w, k1, n
  3. Dim k
  4. Set iea = CreateObject("InternetExplorer.Application")
  5. iea.Visible = True
  6. iea.Navigate "http://map.baidu.com/"  '←打开某个网页,要一定时间,但代码会往下执行
  7. Do Until iea.ReadyState = 4 '  检查网页是否加载完毕(4表示完全加载)
  8.    DoEvents                '循环中交回工作权限给系统,以免“软死机”
  9. Loop
  10. Set dmt = iea.Document
  11. dmt.all("PoiSearch").Value = "武汉 公园"
  12. dmt.all("PoiSearchbtn").Click
  13. Do Until iea.ReadyState = 4 '  检查网页是否加载完毕(4表示完全加载)
  14.    DoEvents                '循环中交回工作权限给系统,以免“软死机”
  15. Loop
  16. i = 1
  17. w = 2
  18. k1 = 0
  19. Do Until i = w + 0
  20.     k1 = dmt.all("result_page_c").sourceIndex  '此语句位置出错,单步运行没有问题
  21.         For n = 1 To 14
  22.             If dmt.all(k1 + n).tagName = "SPAN" And dmt.all(k1 + n).innerText = "下一页>" Then
  23.                 m = k1 + n - 1
  24.                 w = dmt.all(m).innerText + 0
  25.                 Exit For
  26.             Else
  27.             End If
  28.         Next
  29.     dmt.all(m + 2).Click
  30. i = i + 1
  31. Loop
  32. End Sub
复制代码
网页数据抓取.rar (13.08 KB, 下载次数: 55) 1.jpg

TA的精华主题

TA的得分主题

发表于 2014-9-27 22:36 | 显示全部楼层
试一下
  1. Sub 按钮1_单击()
  2.     Dim url, js
  3.     Set js = CreateObject("scriptcontrol")
  4.     [a2:b20].ClearContents
  5.     js.Language = "jscript"
  6.     For p = 1 To 4
  7.     url = "http://map.baidu.com/"
  8.     url = url & "?newmap=1"
  9.     url = url & "&qt=s"
  10.     url = url & "&c=218"
  11.     url = url & "&wd=武汉 公园"
  12.     url = url & "&nn=" & (p - 1) * 10 '第一页是0,第二页是10,第三页是20,以此类推
  13.     url = url & "&ie=utf-8"
  14.     With CreateObject("msxml2.xmlhttp")
  15.         .Open "get", url, False
  16.         .send
  17.         js.addcode ("suwenkai = " & .responsetext)

  18.         slen = js.eval("suwenkai.content.length") - 1

  19.         For i = 0 To slen
  20.             n = n + 1
  21.             Cells(n + 1, 1) = js.eval("suwenkai.content[" & i & "].name")
  22.             Cells(n + 1, 2) = js.eval("suwenkai.content[" & i & "].addr")
  23.         Next
  24.     End With
  25.     Next
  26. End Sub
复制代码

武汉 公园.zip

9.24 KB, 下载次数: 144

点评

scriptcontrol 控件很给力!  发表于 2014-9-29 14:40

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-9-28 14:55 | 显示全部楼层
加了一句延时等待语句和防错语句,就可以顺利运行了。
  1. Sub LOADIE()   '在代码的常见的处理情况
  2. On Error Resume Next
  3. Set iea = CreateObject("InternetExplorer.Application")
  4. iea.Visible = True
  5. iea.Navigate "http://map.baidu.com/"  '←打开某个网页,要一定时间,但代码会往下执行
  6. Do Until iea.ReadyState = 4 '  检查网页是否加载完毕(4表示完全加载)
  7.    DoEvents                '循环中交回工作权限给系统,以免“软死机”
  8. Loop
  9. Set dmt = iea.Document
  10. dmt.all("PoiSearch").Value = "武汉 公园"   ' 设置查询参数
  11. dmt.all("PoiSearchbtn").Click ' 进行查询
  12. Do Until iea.ReadyState = 4 '  检查网页是否加载完毕(4表示完全加载)
  13.    DoEvents                '循环中交回工作权限给系统,以免“软死机”
  14. Loop
  15. i = 1
  16. w = 2
  17. k1 = 0
  18. Cells.Clear
  19. For i = 1 To 5000
  20.     k1 = dmt.all("result_page_c").sourceIndex
  21.         For n = 1 To 14
  22.             If dmt.all(k1 + n).tagName = "SPAN" And dmt.all(k1 + n).innerText = "下一页>" Then
  23.                 m = k1 + n - 1
  24.                 w = dmt.all(m).innerText + 0
  25.                 Exit For
  26.             Else
  27.             End If
  28.         Next
  29.     If i > w Then Exit For
  30.     dmt.all(m + 2).Click
  31.     StartTime = Now()
  32.     Do
  33.         DoEvents
  34.     Loop Until CLng(DateDiff("S", StartTime, Now())) > 1    '延时1秒
  35. Next
  36. iea.Quit
  37. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-9-28 15:15 | 显示全部楼层
suwenkai 发表于 2014-9-27 22:36
试一下

对于大神的代码,只能望尘莫及啊
敬佩之情油然而生

TA的精华主题

TA的得分主题

发表于 2014-9-28 20:17 | 显示全部楼层
本帖最后由 HHAAMM 于 2014-9-29 00:01 编辑
suwenkai 发表于 2014-9-27 22:36
试一下
  1. http://map.baidu.com/?newmap=1&reqflag=pcmap&biz=1&from=webmap&qt=s&from=webmap&c=218&pl_data_type=scope&pl_sub_type=&pl_price_section=0%2C%2B&pl_sort_type=&pl_sort_rule=0&pl_discount2_section=0%2C%2B&pl_groupon_section=0%2C%2B&pl_cater_book_pc_section=0%2C%2B&pl_ticket_book_flag_section=0%2C%2B&pl_movie_book_section=0%2C%2B&pl_business_type=scope&pl_business_id=&pl_activity_gwj_section=0%2C%2B&pl_free_section=0%2C%2B&wd=%E6%AD%A6%E6%B1%89%20%E5%85%AC%E5%9B%AD&pn=1&db=0&wd2=&sug=0&da_src=pcmappg.poi.page&on_gel=1&src=7&gr=3&b=(12704351.65,3541101.7;12747167.65,3571949.7)&l=12&addr=0&nn=10&tn=B_NORMAL_MAP&ie=utf-8&t=1411905878789
复制代码


  1. 我看到的url是这么一串,该怎么分析那些是必须的那??
复制代码

TA的精华主题

TA的得分主题

发表于 2014-9-28 22:16 | 显示全部楼层
HHAAMM 发表于 2014-9-28 20:17

我也不明白是什么意思,一个一个的试出来的。要的保留,不要的删除。

TA的精华主题

TA的得分主题

发表于 2014-9-28 22:56 | 显示全部楼层
suwenkai 发表于 2014-9-28 22:16
我也不明白是什么意思,一个一个的试出来的。要的保留,不要的删除。

哦 谢谢!!

弄着玩,下载的数据我又添加几样,包括那个小图片
QQ截图--.jpg
武汉 公园(1).rar (11.49 KB, 下载次数: 274)

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2014-9-28 23:00 | 显示全部楼层
HHAAMM 发表于 2014-9-28 22:56
哦 谢谢!!

弄着玩,下载的数据我又添加几样,包括那个小图片

版主利害啊。

TA的精华主题

TA的得分主题

发表于 2014-9-28 23:04 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
suwenkai 发表于 2014-9-28 23:00
版主利害啊。

惭愧!! 惭愧,我是学习修改了点您的代码

TA的精华主题

TA的得分主题

发表于 2014-9-28 23:06 | 显示全部楼层
本帖最后由 HHAAMM 于 2014-9-29 01:39 编辑

我会点javascript,但一直没这么样用过scriptcontrol对象,这次学习了!!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

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

GMT+8, 2024-4-26 18:40 , Processed in 0.043641 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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