ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[原创] 不懂html也来学网抓(xmlhttp/winhttp+fiddler)

    [复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-12-1 10:08 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖已被收录到知识树中,索引项:网页交互
renahu 发表于 2014-11-29 09:33
吴老师,虽然i动态参数frmid不用管,把它当成静态参数用照样可以抓出数据,但我还是想知道如何用这个网提 ...
  1. Sub Main()
  2.     Static ruidIndex As Integer
  3.     Dim strText As String
  4.     With CreateObject("MSXML2.XMLHTTP")
  5.         .Open "GET", "http://www.rtshutu.com/basedata/format/release/aspx/1aecf7e5000b940bce.aspx?&pinst=1ad691ca0000cc0bce", False
  6.         .Send
  7.         strText = .responseText
  8.     End With
  9.     With CreateObject("HTMLFILE")
  10.         .write strText & "<script>var ruidIndex=" & ruidIndex & "</script>"
  11.         Debug.Print .parentWindow.eval("GenerateRUID()")
  12.         ruidIndex = ruidIndex + 1
  13.     End With
  14. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-12-1 15:59 | 显示全部楼层
本帖最后由 wcymiss 于 2014-12-1 16:07 编辑
renahu 发表于 2014-12-1 15:02
连POST都不是唬人的。.Open "GET", "http://www.rtshutu.com/basedata/format/release/aspx/1aecf7e5000b ...
  1. Sub 抓图书类别和总数()
  2.     Dim i As Integer
  3.     Dim strText As String
  4.     Dim arr, brr()
  5.     Dim objWB As Object
  6.     Dim objHTTP As Object
  7.     Const strURL As String = "http://www.rtshutu.com/basedata/format/release/aspx/1aecf7e5000b940bce.aspx?pinst=1ad691ca0000cc0bce&navruid="
  8.     Const ParentNavruid As String = "1ad180a50009a40bce"
  9.    
  10.     Set objWB = Sheets("分类数据")
  11.     Set objHTTP = CreateObject("MSXML2.XMLHTTP")
  12.    
  13.     With objHTTP
  14.         .Open "GET", strURL & ParentNavruid, False
  15.         .Send
  16.         arr = Split(.ResponseText, "div class=""navseccl"" id=""")
  17.         
  18.         ReDim brr(0 To UBound(arr), 0 To 2)
  19.         brr(0, 0) = ParentNavruid
  20.         brr(0, 1) = "全部"
  21.         brr(0, 2) = Split(Split(arr(UBound(arr)), "readonly=""true"">")(1), "<")(0)
  22.         
  23.         For i = 1 To UBound(arr)
  24.             brr(i, 0) = Split(arr(i), """>")(0)
  25.             brr(i, 1) = Split(Split(arr(i), """ title=""")(1), """")(0)
  26.             .Open "GET", strURL & brr(i, 0), False
  27.             .Send
  28.             brr(i, 2) = Split(Split(.ResponseText, "readonly=""true"">")(1), "<")(0)
  29.         Next
  30.     End With
  31.    
  32.     With objWB
  33.         .Range("a6:c" & .Rows.Count).ClearContents
  34.         .[a6:c6] = [{"类别ID","类别","总数"}]
  35.         .[a7].Resize(UBound(brr) + 1, 3) = brr
  36.     End With
  37.    
  38.     Set objWB = Nothing
  39.     Set objHTTP = Nothing
  40. End Sub
复制代码
不过这个网站用POST的话速度快。因为它的responsetext的字节少。

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-12-3 09:27 | 显示全部楼层
renahu 发表于 2014-12-3 08:46
吴老师几个登陆练习就差网易登陆没有成功了,还是想问一问网易登陆的问题:

这是我在fiddler中寻找登陆 ...

我上传我的163邮箱登录的session包和赶集网登录的代码,你自己对照吧。

一定要在纯净的环境下抓包。


163邮箱登录saz.rar

98.1 KB, 下载次数: 160

赶集网登录.rar

8.37 KB, 下载次数: 127

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-12-3 15:31 | 显示全部楼层
zongyj 发表于 2014-12-3 13:35
英超数据,请问老师正则中(.*?)a+........(.*?)a+怎么简化

你想得到n个Submatches就只能n个()了。

ya+(?:(.*?)a+)+ 这样的只能得到1个submatches

或者你用两个正则对象。或者改用split等其他方式。

假如你只是需要书写上的简化的话,可以replace(sring(20,"*"),"*","(.*?)a+"))

评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-12-6 20:44 来自手机 | 显示全部楼层
本帖最后由 wcymiss 于 2014-12-6 21:02 编辑
coby001 发表于 2014-12-6 20:02
别鄙视网易了 ~~注意看链接的协议: https
这是个加密传输协议。你之所以看到 ...


对https了解还不多,不敢妄言。

但,对于这个网页,我用vba代码登录,username和password是明明白白的写在SendDate里的。冲这点就足够我鄙视它了。不说和淘宝、新浪比吧,改版前的百度也是明码,可也还是有两个加密参数的。

另外,https也只是为了数据传输的安全,不影响网抓代码的编写(数据POST之后会变成怎样的密文我就不必关心了)。至少这个网页是如此。

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-12-23 12:19 | 显示全部楼层
zss427607 发表于 2014-12-23 06:09
吴姐,按照动态参数的例子。尝试登陆我厂的内部网站失败,能否指定一下呀。

这个应该不难啊。准确发送__VIEWSTATE和__EVENTVALIDATION应该就可以啊(每次请求都要发送从上一次的responsetext里获取的这两个参数的值)。注意url的转码。你代码怎么写的?

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-12-24 15:03 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
zss427607 发表于 2014-12-23 20:16
谢谢 吴姐百忙中帮忙解答,请帮忙指正。
转码代码如下
Public Function UTF8ToGB2312(ByVal varIn As V ...

1、UTF8ToGB2312这个函数你根本没用上,事实上,仅仅登录,不提取数据的话也不需要用这个函数。
2、第二次post里的Content-Type后面的内容错误。
3、strDistUser和strDLname假如是中文的话都需要用encodeURI函数转码。
4、第一次GET,应该不需要设置Content-Type。
另外,split的结果的元素本身就是文本,不需要用CStr转文本了。

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-12-25 15:02 | 显示全部楼层
hhaa999 发表于 2014-12-25 13:29
这是论坛上的一段代码,Debug.Print .responseText立即窗口出现的源代码显示的数据不全,无法提取数据,但是 ...

首先,你满足了本帖一楼的“学网抓对vba要求”吗?

其次,你看了本帖的每一楼吗?

对于基础的vba问题,自己在论坛里学吧。我懒得解释。

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-12-26 10:30 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
yangyangzhifeng 发表于 2014-12-25 23:03
http://my.qzone.qq.com/app/607.html
这个登录是MD5加密的 能帮忙看看吗?谢谢

这个就一个skey值就能登录了。连bkn都用不着。我帖子里有获取skey的方法。不过是单个账号的。

根据qq号和密码获取skey的代码我也写过。不过这个不宜公开。其实百度能找到相关代码。。。

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-1-8 10:22 | 显示全部楼层
ciwei99 发表于 2015-1-7 23:35
请教http://www.dq123.com/price/ 中价格列表数据怎么抓取,他的post网址是变动的

不难吧。复制POST的参数在fiddler里查找就行。那个innermodel查找要有点耐心。

查找结果如下:

一级ID清单:
http://www.dq123.com/price/cache/factory.js

二级ID清单:(即POST的classid值)
http://www.dq123.com/price/cache/一级ID号.js

本体附件等选项清单:(即POST的innermodel值,各选项间用“≌”连接)
http://www.dq123.com/price/cache/param/classid值.js
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

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

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

GMT+8, 2024-4-26 13:29 , Processed in 0.048506 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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