ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 用VBA按网页下拉框指定期号抓取所需内容

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-12-2 16:20 | 显示全部楼层

老师编写的代码很好!以最新附件只需修改下面几处,就能圆满实现我的心中所想:
1.A5:C85932开奖历史数据的排列顺序:
     要么以http://kaijiang.500.com/jsk3.shtml 下拉框里的顺序【全倒序】:2018-11-30--2018-11-29--2018-11-28......直到B2指定的2015-11-03结束,这样,下一步只需把A5:C85932里抓取到的数据上下倒置,就是日期期号的升序排列;
      要么把B2指定151103001【开始期号】【全正序】填入A5,以下是151103002......151103082;1511104001-1511104082;直至181130001-181130082结束,这样,抓取到的数据不需要进行上下倒置,直接就是日期期号的升序排列,方便了下一步的统计。
20181202160808.png

20181202160859.png
2.指定B1为需要抓取数据的网址,B2为抓取数据的开始期号,B3为抓取数据的结束期号,把B1:B3当作变量写入代码。这样同一个sub过程,在工作表《江苏快三》里抓取的是“江苏快三”的历史数据,而在工作表《安徽快三》里,抓取的则是“安徽快三”的历史数据。
麻烦老师按照上面两点修改和完善代码。最新附件如下:

按B1指定的网址和B2B3指定的期号下载开奖数据.zip (1.67 MB, 下载次数: 8)

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-12-2 18:18 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-12-3 07:06 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2018-12-3 07:57 | 显示全部楼层
建议你,分段抓取数据,慢慢积累数据,以防ip被封,至于倒着排列,录个排序的宏就完事了。

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-12-3 08:23 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
Kaohsing 发表于 2018-12-3 07:57
建议你,分段抓取数据,慢慢积累数据,以防ip被封,至于倒着排列,录个排序的宏就完事了。

感谢老师提醒。

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-12-3 08:30 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

恳请老师按照21楼的要求,修改和完善18楼的代码。

TA的精华主题

TA的得分主题

发表于 2018-12-3 08:40 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-12-3 08:41 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
Kaohsing 发表于 2018-12-3 07:57
建议你,分段抓取数据,慢慢积累数据,以防ip被封,至于倒着排列,录个排序的宏就完事了。

老师:1.怎样才能把指定B1为需要抓取数据的网址写入代码?这样,只需修改B1指定的网址,就能让代码在《江苏快三》和《安徽快三》通用了!
2.如果按期号正序抓取数据不方便,可修改代码为从B3指定的最大期号开始,至B2指定的最小期号结束【即全部按期号从大到小的顺序抓取数据】

如此,怎样修改18楼的代码?

TA的精华主题

TA的得分主题

发表于 2018-12-3 08:43 | 显示全部楼层
WYS67 发表于 2018-12-3 08:30
恳请老师按照21楼的要求,修改和完善18楼的代码。
  1. Sub Main()
  2.     Dim StDate As Date, EndDate As Date, tempDate As Date, ShengFen$
  3.     Dim rsArr()
  4.    
  5.     Range("A5:C" & Cells(Rows.Count, 1).End(xlUp).Row + 1).ClearContents
  6.    
  7.     ShengFen = [B1].Value
  8.     ShengFen = Mid(ShengFen, InStrRev(ShengFen, "/") + 1)
  9.     ShengFen = Left(ShengFen, InStr(ShengFen, "k3.") - 1)

  10.     StDate = Format("20" & Left([B2].Value, 6), "0000/00/00")
  11.     EndDate = Format("20" & Left([B3].Value, 6), "0000/00/00")
  12.    
  13.     tempDate = EndDate
  14.     Do
  15.         rsArr = getDataFromWebByDate(tempDate, ShengFen)
  16.         Range("A" & Cells(Rows.Count, 1).End(xlUp).Row + 1).Resize(UBound(rsArr), 3) = rsArr
  17.         tempDate = tempDate - 1
  18.     Loop Until tempDate < StDate
  19.    
  20. End Sub

  21. Function getDataFromWebByDate(dDate As Date, ShengFen As String)
  22.     Dim strText As String, arr, brr, rsArr(), i%, j%
  23.    
  24.     With CreateObject("MSXML2.XMLHTTP")
  25.         .Open "GET", "http://kaijiang.500.com/static/info/kaijiang/xml/" & ShengFen & "k3/" & Format(dDate, "yyyymmdd") & ".xml", False
  26.         .Send
  27.         strText = .responsetext
  28.     End With
  29.    
  30.     If InStr(strText, "404 Not Found") Then
  31.         ReDim rsArr(1 To 1, 1 To 3)
  32.         GoTo TheEnd
  33.     End If
  34.    
  35.     strText = Replace(strText, " expect=""", "|")
  36.     strText = Replace(strText, """ opencode=""", "|")
  37.     strText = Replace(strText, """ opentime=""", "|")
  38.     strText = Replace(strText, Chr(10), "")
  39.     strText = Replace(strText, """               />", "")
  40.    
  41.     arr = Split(strText, "<row")

  42.     ReDim rsArr(1 To UBound(arr), 1 To 3)
  43.     For i = 1 To UBound(arr)
  44.         brr = Split(arr(i), "|")
  45.         rsArr(i, 1) = brr(1)
  46.         rsArr(i, 2) = brr(3)
  47.         rsArr(i, 3) = brr(2)
  48.     Next
  49. TheEnd:
  50.     getDataFromWebByDate = rsArr
  51. End Function
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-12-3 08:49 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
Kaohsing 发表于 2018-12-3 08:40
这种大概就属于io密集型。

坦白说,我对VBA纯属小白一个,只是知道能够解决用函数公式无法解决的问题。还请老师帮忙则个!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

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

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

GMT+8, 2024-4-25 11:34 , Processed in 0.039825 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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