ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > 我的酷贴 > Excel VBA > 网抓小作品-淘宝搜索抓取宝贝数据用到知识点Microsoft.XMLHTTP和正则表达式、遍历文件

网抓小作品-淘宝搜索抓取宝贝数据用到知识点Microsoft.XMLHTTP和正则表达式、遍历文件

作者:绿色风 分类: 时间:2022-08-18 浏览:111
楼主
minren118

本人做淘宝电商,经常会在淘宝首页的搜索中抓取些信息,经过学习和参考社区里的前辈的指引,作成了一个小小的作品,可以在淘宝首页上抓取信息,不过属于半自动,图片方面只能用正则把图片地址抓取下来,再用迅雷工具批量下载,有兴趣的朋友们可以下载看看,最大的知识点是<span style="line-height: 1.5;">Microsoft.XMLHTTP 和正则,小批量数据抓取还算效果不错。也欢迎大侠们指点更好的思路,因代码之前写的是自用的,备注写得有些潦草,有疑问的地方可以跟帖提出,刚刚开始分享自己工作中的EXCEL应用,可能都比较嫩,不到位的地方请多多前辈们包涵。</span>
  1. Sub 搜索淘宝低价()

  2.     Dim url, a As Long, b As Long, i As Integer, j As Integer, arr1(), matchs, tt As String
  3.     Dim item As Integer, num
  4.     Dim reg As Object, regnum


  5.     url = InputBox("请输入抓取网址")
  6.     num = InputBox("请输入抓取页数,一页40条宝贝", , 3)
  7. 'url = "http://s.taobao.com/search?spm=a230r.1.7.1.ywgunN&promote=0&sort=sale-desc&initiative_id=tbindexz_20130814&tab=all&q=%BE%C5%D1%F4+%D4%AD%D6%AD%BB%FA+E16&source=suggest&suggest=history_1&s="
  8. 'num = 3

  9.    
  10.     For i = 0 To num - 1
  11.         a = Range("a" & Rows.Count).End(xlUp).Row   '开始行
  12.        Application.StatusBar = "现在第" & i & "个循环"
  13.         With CreateObject("Microsoft.XMLHTTP")
  14.             .Open "GET", Split(url, "s=")(0) & "s=" & i * 40 & "#J_relative", True
  15.             .send
  16.                     Do Until .ReadyState = 4
  17.             DoEvents
  18.         Loop
  19.             tt = .responseText
  20.         End With

  21.         Set reg = CreateObject("VBSCRIPT.REGEXP")
  22.          
  23.         With reg
  24.             .Pattern = "<h3 class=.+?href=""(.+?)"".+?title=""(.+?)"""   '查找标题、宝贝链接
  25.             .Global = True
  26.             .IgnoreCase = False
  27.             If .Test(tt) Then
  28.                 Set matchs = .Execute(tt)
  29.                 regnum = matchs.Count
  30.                 ReDim arr1(1 To regnum, 1 To 9)
  31.                 For j = 1 To regnum
  32.                 arr1(j, 1) = Date
  33.                 arr1(j, 3) = matchs(j - 1).submatches(1)
  34.                 arr1(j, 4) = matchs(j - 1).submatches(0)
  35.                 Next
  36.             End If
  37.             
  38.             
  39.         End With



  40.         With reg
  41.             .Pattern = "lazyload=""(.+)"""   '查找图片链接
  42.             .Global = True
  43.             .IgnoreCase = False
  44.             If .Test(tt) Then
  45.                 Set matchs = .Execute(tt)

  46.                 For j = 1 To regnum
  47.                 arr1(j, 2) = matchs(j - 1).submatches(0)
  48.                 arr1(j, 9) = Split(matchs(j - 1).submatches(0), "/")(UBound(Split(matchs(j - 1).submatches(0), "/")))
  49.                 Next
  50.             End If
  51.         End With

  52.         
  53.         With reg
  54.             .Pattern = "user_number_id=.+?>(.+?)<"     '查找店铺名
  55.             .Global = True
  56.             .IgnoreCase = False
  57.             If .Test(tt) Then
  58.                 Set matchs = .Execute(tt)

  59.                 For j = 1 To regnum
  60.                 arr1(j, 5) = matchs(j - 1).submatches(0)
  61.                 Next
  62.             End If
  63.         End With

  64.         With reg
  65.             .Pattern = "col price"">¥(.+?)<"     '价格
  66.             .Global = True
  67.             .IgnoreCase = False
  68.             If .Test(tt) Then
  69.                 Set matchs = .Execute(tt)

  70.                 For j = 1 To regnum
  71.                 arr1(j, 6) = CLng(matchs(j - 1).submatches(0))
  72.                 Next
  73.             End If
  74.         End With
  75.         
  76.            With reg
  77.             .Pattern = "最近30天 (\d+)人付款 (\d+)人收货"     '成交人数
  78.             .Global = True
  79.             .IgnoreCase = False
  80.             If .Test(tt) Then
  81.                 Set matchs = .Execute(tt)

  82.                 For j = 1 To regnum
  83.                 arr1(j, 7) = CInt(matchs(j - 1).submatches(0))
  84.                 arr1(j, 8) = CInt(matchs(j - 1).submatches(1))
  85.                 Next
  86.             End If
  87.         End With
  88. Range("a" & a + 1).Resize(regnum, 9) = arr1

  89.     Next
  90. Application.StatusBar = False
  91. End Sub




批量下载淘宝搜索内容v4.zip


2楼
minren118
正则部分是用前期绑定,需要在VBE的工具/引用 上选择正则库。
999999999.jpg  

3楼
hustclm
最近在学习正则,希望有机会交流交流
4楼
水星钓鱼
很不错
5楼
minren118
感谢水星的鼓励,工作中也做了挺多这些小应用,就是没有心思整理,或者怕太菜了,不好意思放出来。
6楼
hustclm
行家一出手,就知有没有啊!
7楼
wise



谢谢分享,的确很不错。
8楼
minren118
感谢版主如此高评价

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap