ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 求助!求助 vba从网页中提取数据

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-8-8 09:30 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
mxf21cn 发表于 2018-8-7 22:45
Ctrl+F    搜索用户名cqgytyy或者密码123456会有黄色标记的会话,点开RAW就是下面的内容

POST http:// ...

老师  我看不懂啊   可以给我一个完整的vba语句 吗? 现在每天手动在网站查数据, 拜托你了。

TA的精华主题

TA的得分主题

发表于 2018-8-8 09:45 | 显示全部楼层
谢礼军 发表于 2018-8-8 09:30
老师  我看不懂啊   可以给我一个完整的vba语句 吗? 现在每天手动在网站查数据, 拜托你了。

你連照抄那個stop也不懂自己刪除
連基本的基本也不懂,給你做好也有很多情況出現問題也不會解決啊

TA的精华主题

TA的得分主题

发表于 2018-8-8 11:41 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
可以看看。。
TIM截图20180808113541.jpg
结果如下:
11.jpg

TA的精华主题

TA的得分主题

发表于 2018-8-8 20:17 | 显示全部楼层
mxf21cn 发表于 2018-8-7 22:45
Ctrl+F    搜索用户名cqgytyy或者密码123456会有黄色标记的会话,点开RAW就是下面的内容

POST http:// ...

http://fdm.yyjzt.com/search/merc ... category&page=1

http://fdm.yyjzt.com/
在fidldler中找cqgytyy
都沒找到黃色
為什麼?

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-8-9 14:22 | 显示全部楼层
fxl447098457 发表于 2018-8-8 11:41
可以看看。。

结果如下:

谢谢大神,你帮了我很大的忙,给我工作提高了非常很大效率。 太感谢了,万分感谢,好人一生平安!

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-8-16 19:31 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 谢礼军 于 2018-8-16 20:04 编辑
fxl447098457 发表于 2018-8-7 12:22
人家的stop只是拿来断点测试的。我也是醉了。你这是小白中的小白的。

Sub gedata()
   Dim ie As Object, http As Object, dom As Object, win As Object, strtext As String
   Dim url As String, arr, i&, k&, brr(), stock As String
   Set http = CreateObject("msxml2.xmlhttp")
   Set dom = CreateObject("htmlfile")
   Set win = dom.parentwindow
   UserName = "cqgytyy"
   Password = "123456"
   With http
      .Open "post", "http://fdm.yyjzt.com/user/topLogin.json", False
      .setrequestheader "content-type", "application/x-www-form-urlencoded;charset=UTF-8"
      .send "jzt_username=" & UserName & "&jzt_password=" & Password
      dom.write "<script src=""http://ajax.microsoft.com/ajax/jquery/jquery-1.4.min.js""></script><body></body>"
      
      For Page = 1 To 1 '抓取2页
         url = "http://fdm.yyjzt.com/search/merchandise.htm?keyword&category&page=" & Page
         .Open "GET", url, False
         .send
         Do
           DoEvents
         Loop Until .Status = 200
         arr = Split(.responsetext, "<table")
         For i = 1 To UBound(arr)
             dom.body.innerhtml = "<table>" & Split(arr(i), "</table>")(0) & "</table>"
             k = k + 1: ReDim Preserve brr(1 To 7, 1 To k)
             brr(1, k) = win.eval("$('a').contents().filter(function(){return this.nodeType==3;}).text()")
             brr(2, k) = win.eval("$('td a span.u_goods_spec').eq(0).text()")
             brr(3, k) = win.eval("$('td p.u_goods_com').eq(0).text()")
             brr(4, k) = win.eval("$('td span.u_goods_pric').eq(0).text()")
             brr(5, k) = win.eval("$('td p span.m_tag_kw').eq(1).text()")
             stock = Split(Split(arr(i - 1), "u_goods_txt"">")(1), "<")(0)
             brr(6, k) = re(stock)
             brr(7, k) = win.eval("$('a) p class.u_goods_txt').eq(0).text()")
            
             Next
         Application.Wait (Now + TimeValue("0:00:05"))   '休息10秒
      Next
      [a1:g1] = [{"药品名称","规格","厂家","销售价格","件装","库存","效期"}]
      [a2].Resize(k, 7) = Application.Transpose(brr)
      [a:g].EntireColumn.AutoFit
   End With
End Sub
Function re(str)
   With CreateObject("vbscript.regexp")
      .Pattern = "\s+"
      .Global = True
      re = .Replace(str, "")
   End With
End Function

范老师你好,  领导又要求抓取有效期,我按照你的代码 找到网页的源代码,找到语句,brr(7, k) = win.eval("$('a) p class.u_goods_txt').eq(0).text()")就是我加上去的,麻烦你看看哪儿出错了   谢谢你,范老师。

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-8-16 19:54 | 显示全部楼层
本帖最后由 谢礼军 于 2018-8-16 20:28 编辑
fxl447098457 发表于 2018-8-8 11:41
可以看看。。

结果如下:
  1. <p>
  2. Sub gedata()
  3.    Dim ie As Object, http As Object, dom As Object, win As Object, strtext As String
  4.    Dim url As String, arr, i&, k&, brr(), stock As String
  5.    Set http = CreateObject("msxml2.xmlhttp")
  6.    Set dom = CreateObject("htmlfile")
  7.    Set win = dom.parentwindow
  8.    UserName = "cqgytyy"
  9.    Password = "123456"
  10.    With http
  11.       .Open "post", "<a >http://fdm.yyjzt.com/user/topLogin.json</a>", False
  12.       .setrequestheader "content-type", "application/x-www-form-urlencoded;charset=UTF-8"
  13.       .send "jzt_username=" & UserName & "&jzt_password=" & Password
  14.       dom.write "<script src=""<a href='http://ajax.microsoft.com/ajax/jquery/jquery-1.4.min.js""></script><body></body'>http://ajax.microsoft.com/ajax/jquery/jquery-1.4.min.js""></script><body></body</a>>"
  15.       
  16.       For Page = 1 To 2 '抓取2页
  17.          url = "<a >http://fdm.yyjzt.com/search/merchandise.htm?keyword&category&page</a>=" & Page
  18.          .Open "GET", url, False
  19.          .send
  20.          Do
  21.            DoEvents
  22.          Loop Until .Status = 200
  23.          arr = Split(.responsetext, "<table")
  24.          For i = 1 To UBound(arr)
  25.              dom.body.innerhtml = "<table>" & Split(arr(i), "</table>")(0) & "</table>"
  26.              k = k + 1: ReDim Preserve brr(1 To 7, 1 To k)
  27.              brr(1, k) = win.eval("$('a').contents().filter(function(){return this.nodeType==3;}).text()")
  28.              brr(2, k) = win.eval("$('td a span.u_goods_spec').eq(0).text()")
  29.              brr(3, k) = win.eval("$('td p.u_goods_com').eq(0).text()")
  30.              brr(4, k) = win.eval("$('td span.u_goods_pric').eq(0).text()")
  31.              brr(5, k) = win.eval("$('td p span.m_tag_kw').eq(1).text()")
  32.              stock = Split(Split(arr(i - 1), "u_goods_txt"">")(1), "<")(0)
  33.              brr(6, k) = re(stock)
  34.              brr(7, k) = win.eval("$('td p.u_goods_exp_start').eq(0).text()")
  35.              Next
  36.          Application.Wait (Now + TimeValue("0:00:05"))   '休息5秒
  37.       Next
  38.       [a1:g1] = [{"药品名称","规格","厂家","销售价格","件装","库存","效期"}]
  39.       [a2].Resize(k, 7) = Application.Transpose(brr)
  40.       [a:g].EntireColumn.AutoFit
  41.    End With
  42. End Sub</p><p>Function re(str)
  43.    With CreateObject("vbscript.regexp")
  44.       .Pattern = "\s+"
  45.       .Global = True
  46.       re = .Replace(str, "")
  47.    End With
  48. End Function</p><p> </p><p>

  49. </p>
复制代码



范老师你好,领导又说要抓取有效期,我照你的代码,在网页的源代码找到语句,增加上去,可能哪儿出错了,请范老师帮我看看。谢谢了

TA的精华主题

TA的得分主题

发表于 2018-8-16 20:39 | 显示全部楼层
谢礼军 发表于 2018-8-16 19:31
Sub gedata()
   Dim ie As Object, http As Object, dom As Object, win As Object, strtext As String ...

brr(7, k) = Split(win.eval("$('td p.m_goods_des').eq(3).text()"), ":")(1)
因为有近远有效期两个,我都弄进来了。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-12 07:51 , Processed in 0.022810 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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