ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[原创] 网页采集(网页抓取)教程第二课-用WinHTTP提交Post,viewstate获取和URLEncode编码方法

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2012-7-18 02:47 | 显示全部楼层
本帖已被收录到知识树中,索引项:网页交互
本帖最后由 星剑所指 于 2012-7-18 02:50 编辑
'下面是POST的字符串构建过程。
        postdata = "ctl00$ScriptManager2=" & ScriptManager2 & _
                   "&__EVENTTARGET=" & EncodePostdata(eventtarget) & _
                   "&__EVENTARGUMENT=" & _
                   "&__LASTFOCUS=" & _
                   "&__VIEWSTATE=" & EncodePostdata(viewstate) & _
                   "&__VIEWSTATEENCRYPTED=" & _
                   "&__EVENTVALIDATION=" & EncodePostdata(eventvalidation) & _
                   "&ctl00$WidthPixel=" & _
                   "&ctl00$HeightPixel=" & _
                   "&ctl00$cph_content$drpTitle=" & drptitle & _
                   "&ctl00$cph_content$drpZzdj=" & drpZzdj & _
                   "&ctl00$cph_content$txtEnterName=" & _
                   "&ctl00$cph_content$txtDay=" & txtDay & _
                   "&ctl00$cph_content$GridViewPaging1$txtGridViewPagingForwardTo=" & PagingForwardTo & _
                   "&ctl00$cph_content$GridViewPaging1$btnForwardToPage=Go"
向大师求教 关于3楼的POST的字符串构建过程,为什么不是把所有参数和参数值合并后最后来一个 EncodePostdata

'下面是POST的字符串构建过程。
        postdata =EncodePostdata("ctl00$ScriptManager2=" & ScriptManager2 & _
                   "&__EVENTTARGET=" & eventtarget & _
                   "&__EVENTARGUMENT=" & _
                   "&__LASTFOCUS=" & _
                   "&__VIEWSTATE=" & viewstate & _
                   "&__VIEWSTATEENCRYPTED=" & _
                   "&__EVENTVALIDATION=" &eventvalidation& _
                   "&ctl00$WidthPixel=" & _
                   "&ctl00$HeightPixel=" & _
                   "&ctl00$cph_content$drpTitle=" & drptitle & _
                   "&ctl00$cph_content$drpZzdj=" & drpZzdj & _
                   "&ctl00$cph_content$txtEnterName=" & _
                   "&ctl00$cph_content$txtDay=" & txtDay & _
                   "&ctl00$cph_content$GridViewPaging1$txtGridViewPagingForwardTo=" & PagingForwardTo & _
                   "&ctl00$cph_content$GridViewPaging1$btnForwardToPage=Go"

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-7-18 08:48 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 liucqa 于 2012-7-18 08:49 编辑
星剑所指 发表于 2012-7-18 02:47
向大师求教 关于3楼的POST的字符串构建过程,为什么不是把所有参数和参数值合并后最后来一个 EncodePostdat ...

只做一次URLEncode编码也是可以的,但需要修改EncodePostData函数,去掉对__和&$=等特殊符号的编码

示例中的编码函数不完整,所以没用采用一次编码的方法

TA的精华主题

TA的得分主题

发表于 2012-7-18 09:01 | 显示全部楼层
liucqa 发表于 2012-7-17 18:46
看一楼

谢谢,我好好学下,不知能否学会

TA的精华主题

TA的得分主题

发表于 2012-7-18 14:29 | 显示全部楼层
大师为介绍相关知识,讲得比较全面。但针对1楼的问题我给出另外一种解决思路(XMLHTTP + QURYTABLE)
xml_qureytable.rar (30.97 KB, 下载次数: 512)

方法说明:
1,我没有每次post前都提取_viewstate等相关值,而是从第一次打开http://www.gzgcjg.com/gzqypjtx/Estimate/ZY/MainQueryMarkZY.aspx 输入第1页,点"go"之后获得的post参数。在以后跳页时只要修改"...GridViewPagingForwardTo=***..."星号部分。当然也可以在此基础上改其他参数。
2,XMLHTTP的缺点是后期繁琐的字符串处理,会占用很长时间,但它的提前源文件的速度很快。而QURYTABLE的缺点是无法提取静态网址下的表格,但只要给了它网址和表格名称,提取速度很快且非常节约开发时间。所以以上附件结合两者优点进行。为以后其它网页数据提取提供快捷的通用框架。
希望对听这节课的初学者有帮助。


评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-7-18 14:37 | 显示全部楼层
kangatang 发表于 2012-7-18 14:29
大师为介绍相关知识,讲得比较全面。但针对1楼的问题我给出另外一种解决思路(XMLHTTP + QURYTABLE)

你试一下提取专业资质为建筑装修装饰工程的公司列表,你现在提取的是默认的地基与基础工程

TA的精华主题

TA的得分主题

发表于 2012-7-18 15:12 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2012-7-18 15:21 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
liucqa 发表于 2012-7-18 14:37
你试一下提取专业资质为建筑装修装饰工程的公司列表,你现在提取的是默认的地基与基础工程

建筑装修装饰工程的公司列表
xml_qureytable2.rar (52.94 KB, 下载次数: 266)

TA的精华主题

TA的得分主题

发表于 2012-7-18 16:27 | 显示全部楼层
本帖最后由 引子玄 于 2012-7-18 16:44 编辑
kangatang 发表于 2012-7-18 15:21
建筑装修装饰工程的公司列表


从源文件的"表"可以获取23个分页面的源文件,我想地址可能就在里面?我只取了第1个和第2个分页,分页地址你是咋找出来的?对网页编码俺还不太熟悉.

查看专业资质排名.rar

69.5 KB, 下载次数: 169

TA的精华主题

TA的得分主题

发表于 2012-7-18 16:46 | 显示全部楼层
kangatang 发表于 2012-7-18 14:29
大师为介绍相关知识,讲得比较全面。但针对1楼的问题我给出另外一种解决思路(XMLHTTP + QURYTABLE)

你这个做得好,学习了

TA的精华主题

TA的得分主题

发表于 2012-7-18 16:59 | 显示全部楼层
本帖最后由 kangatang 于 2012-7-18 17:00 编辑
引子玄 发表于 2012-7-18 16:27
从源文件的"表"可以获取23个分页面的源文件,我想地址可能就在里面?我只取了第1个和第2个分页, ...


简单地讲xlmhttp获取每页的网页源文件,在硬盘上保存为一个html文件,然后用querytable导入。保存到硬盘的速度相对于网络连接来说,对提取速度丝毫没有影响。

评分

1

查看全部评分

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-22 18:32 , Processed in 0.040175 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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