ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享] 关于学习网页采集课程的注意事项及必备能力

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2015-3-21 09:39 | 显示全部楼层 |阅读模式
本帖最后由 liucqa 于 2015-3-23 09:41 编辑

        最近这几年,不少会员找我上课,一对一的学习网页采集的知识。对目前论坛网页采集大军肯于钻研的这种欣欣向荣的景象,俺感到十分的高兴。

    这说明Excel与第三方控件的整合应用各种场景,已经被广大会员所认知,网页采集逐步成为会员们所日常工作中的正常需求。实际上,Excel与第三方控件的整合应用,才是Excel软件的精髓之一,也是掌握难点。一旦认识或者攻破的这个难点,会员们对Excel能力的理解就会进入到一个更加广阔的世界!


    考虑到近期找我上课的会员较多,而网页采集属于VBA应用的高级课程,并非适合每一个会员。下面我简单说一下学习本课程需要具备的知识和能力基础。

    基础技能:
    1、学习本课程应具备VBA基础知识,例如变量定义、基本语句、基本函数(特别是字符串函数Split、Replace等)的初步掌握。
    2、学习本课程建议具备VBA中级知识,例如数组、字典、Excel对象等。这些知识不是必须的,但是已经掌握的人比没掌握的人在学习课程之后能够更快的实现工作目标。
    3、代码调试修改能力,例如已知的代码整合与修改(改成sub或者function,改改逻辑关系等)、监视变量、中断代码(stop)、调试代码、文本输出(通过剪贴板)。
    学习网页采集的知识无需自己创造代码,一切需要的代码都能在教程或网上找到,你所要做的仅仅就是修改而已,这个能力很重要,它会加快你掌握知识的进度。

    学习能力:
    1、应具备基本的英文知识,至少认识26个英文字母,能够记忆基本的英文单词,例如Sent、Open之类的。
    2、应具备基本的钻研能力,能够将课堂上给出的代码记住并做简单修改而不至于晕眩。(所谓简单修改就是在十行代码里面能够修改两三行)
    3、应具备基本的百度搜索能力,以便将课堂上所讲的有限的知识在课程结束之后,能够维持并应用于工作中。
    4、应具备良好的心态。学习任何一门新知识都不能一蹴而就,更不可能瞬间变成高手。任何知识的学习都离不开坚持和勤奋。妄图学习两堂课就能攻陷网页知识的人,一般我都称其为“天才”!
    5、应具备基本的时间掌控能力,不能因没有时间作为借口不做作业,更不能以此为借口轻易放弃学习。
       (话说,这样的人之前是为啥要上课来着,为啥不直接在论坛找义工呢?)


    下列几种情况,不适合参加本课程:
    1、VBA基础薄弱,看不懂英文字母,不具备最简单代码书写能力者。
    2、不具备学习能力和时间,仅仅是想通过上课立刻学会网页采集的代码,并想当然认为能够通用在各种网页而无需修改者。
    3、不愿意腾出时间钻研,认为我报名上课了,能不能学会就是老师的事情了,一切都依赖老师给提供代码者。
    4、心态急躁,两堂课学不会就要求放弃者。(迄今为止,我还没发现谁能在两堂课学会网页采集呢。为什么你不能坚持呢?)
    最后说一下,世上没有免费的午餐,天上也不会掉下来好吃的馅饼,金钱不能在不努力的条件下换来知识,知识也不会在不学习的人身上留下痕迹。老师可以领你入门,但老师不能替代你工作。那些认为上课之后就能找到免费义工的想法,还是尽早放弃吧,谢谢理解!


    如果你有兴趣在Excel高级应用的道路上入门并前行的话,请认真阅读上面的文字,想想我们为什么来学习,为什么而工作。


    知识的掌握是不能用金钱来衡量的,几堂简单的课程带你入门,也许以后就能出现一个Excel应用方面的高手,我对此有着充分的信心。


    世事虽变幻,一切皆可能!
    世上无难事,只要肯攀登。


    祝愿各位会员在Excel知识的海洋里能够越游越远,越游越开心!



******************我是分隔线*******************

网页采集理论课内容:
1、fiddler使用介绍
2、xmlhttp属性方法及示例
3、http介绍
4、Headers讲解
5、其他知识
本课程不涉及代码实践,正式上课前请自备需要采集的网站抓包(Fiddler)
本课程是对本人在论坛发布的网页教程的补充,请在上课前自行阅读该公开教程。

网页采集(网页提交)教程第一课





   







评分

4

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-3-21 09:48 | 显示全部楼层
请诸位勿回帖,本贴为保留贴,仅用于上课学员的阅读和理解。

谢谢!

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-3-21 18:43 | 显示全部楼层

  1. Option Explicit

  2. Sub test()
  3.     Dim ohttp As Object, strResText As String, URL$, posturl$, postdata$

  4.     Set ohttp = CreateObject("WinHttp.WinHttpRequest.5.1")
  5.     URL = "http://www.boc.cn/sourcedb/whpj/"
  6.     ohttp.Open "GET", URL, False
  7.     ohttp.send
  8.     strResText = ohttp.ResponseText
  9.     strResText = BytesToBstr(ohttp.ResponseBody, "UTF-8")
  10.     PutClipboard (strResText)

  11.     postdata = "erectDate=2015-03-18?hing=2015-03-18&pjname=0"

  12.     posturl = "http://srh.bankofchina.com/search/whpj/search.jsp"

  13.     ohttp.Open "POST", posturl, False
  14.     ohttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
  15.     ohttp.setRequestHeader "Content-Length", Len(postdata)
  16.     ohttp.setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko"
  17.     ohttp.setRequestHeader "Referer", "http://www.boc.cn/sourcedb/whpj/"
  18.     ohttp.send (postdata)
  19.     strResText = ohttp.ResponseText
  20.     PutClipboard (strResText)
  21. End Sub

  22. Public Sub PutClipboard(ByVal str$)
  23.     With CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
  24.         .SetText str
  25.         .PutInClipboard
  26.     End With
  27. End Sub

  28. Function BytesToBstr(strBody, CodeBase)    '使用Adodb.Stream对象提取字符串
  29.     Dim objStream
  30.     On Error Resume Next
  31.     Set objStream = CreateObject("Adodb.Stream")
  32.     With objStream
  33.         .Type = 1    '二进制
  34.         .Mode = 3    '读写
  35.         .Open
  36.         .Write strBody    '二进制数组写入Adodb.Stream对象内部
  37.         .Position = 0    '位置起始为0
  38.         .Type = 2    '字符串
  39.         .Charset = CodeBase    '数据的编码格式
  40.         BytesToBstr = .ReadText    '得到字符串
  41.     End With
  42.     objStream.Close
  43.     Set objStream = Nothing
  44.     If Err.Number <> 0 Then BytesToBstr = ""
  45.     On Error GoTo 0
  46. End Function


复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-3-21 18:45 | 显示全部楼层
本帖最后由 liucqa 于 2015-3-23 09:40 编辑

网页采集的知识主要分三部分:
1、抓包工具的使用(fiddler等)
2、网页采集控件使用(xmlhttp、winhttp等)
3、网页提取(htmlfile、json、xml、正则、字符串处理等)

一般来说,网页采集和网页提取是两个不同的课程,不能混为一谈。前者建议找老师上课,系统的学习理论知识,后者可以自学(需要有坚实的vba基础和百度能力)。

如果要做一个成功的网页提取,上面三部分所占用的精力分别是
抓包并分析:    50%
写采集代码:    20%
提取网页数据:30%

越复杂的网站,抓包和提取所占据的工作量越大。

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-3-21 18:54 | 显示全部楼层
本帖最后由 liucqa 于 2015-6-2 08:11 编辑

高级教程,异步采集,推荐使用WINHTTP.
.
异步采集.JPG


TA的精华主题

TA的得分主题

 楼主| 发表于 2015-3-23 09:38 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 liucqa 于 2015-6-2 14:06 编辑

网页后台采集插件,高级采集技巧,采用C#编程.

该方法的原理与网游后台插件原理相同,
可以抓包采集任何通过http协议访问的数据,也可以拦截和修改网站返回的页面信息,或者拦截和修改浏览器发送给网站的信息。

玩过页游的,大概知道这种代码的真实作用,当然具体操作可能还需要解析AMF,嘿嘿...


cnzz.JPG


TA的精华主题

TA的得分主题

 楼主| 发表于 2015-6-2 08:19 | 显示全部楼层
本帖最后由 liucqa 于 2015-6-2 09:37 编辑

Flash页面的采集技巧


要使用VB,Delphi,C++等WinForm编程软件来发送AMF格式数据都是十分困难的,几乎没有现成的组件可以使用,C#可以使用FluorineFx组件解析AMF。  

AMF是ADOBE公司的专用协议,若不想用C#解析,最好下一份AMF文档,自己解析结构,不过肯定会很困难。


在C#中处理AMF,无论是AMF0还是AMF3都很简单。

网上搜索到的AMF.net和AMFExplorer等等,其实都不能用, 不是有BUG ,就是类库不新,数据类型支持不完全。

应该使用FluorineFx这个类库,

只要两行代码即可:

AMFDeserializer deserializer = new AMFDeserializer(stream);
AMFMessage message = deserializer.ReadAMFMessage();


即可以在message中看到所有的信息 ,而上面的stream对象就是一堆二进制的流,可以是从Httpwebresponse中返回的,也可以是从文件中读取的。

有关FluorineFx类的详细4,可以到它的官方网站上查询 http://www.fluorinefx.com/

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-6-2 08:25 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 liucqa 于 2015-9-2 10:31 编辑


C# 多线程并发请求,默认线程池是1000多个线程,提交请求的效率比较高。

2.gif


C#代码UI和HttpRequest一共800多行。


TA的精华主题

TA的得分主题

 楼主| 发表于 2015-9-2 10:39 | 显示全部楼层
本帖最后由 liucqa 于 2016-2-14 22:16 编辑

采集新加坡交易所的A50指数的实时行情,WebSocket推送

2.gif

TA的精华主题

TA的得分主题

发表于 2016-2-12 14:13 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-3-29 08:24 , Processed in 0.060106 second(s), 13 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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