由网页下载程序(完美下载图片、js、css、修改网页)解析三大网页难题

       百忙之中抽时间编写了这个小程序,功能是:完美保存整个网页,包括:图片、JS脚本、CSS样式,并且修改网页源码进行“本地化”。由于我火星了,竟然不知道浏览器自带这个功能,因此自己动手做了一个,虽然这个程序不大,但是涉及了三大难题(后文将会详细讲解)。

       本来不打算发布源码的,既然浏览器有这个功能,那我就发布一下源码以供大家学习!这个程序的效果和浏览器的效果是完全相同的!而且我对比了一下,获取的js、css、图片一个也不比浏览器获取的少。大家可以参照这个去发挥:做一个网站整站下载器。当然数据库你是绝对下不到的…..

使用说明:

1.填写网页地址然后点转到,这时会激活一键下载,加载网页需要时间,没加载完就点一键下载会有提示,尽量在网速比较好的时候使用!

2.下载完成后会在软件目录下生成一个以网页标题为名称的文件夹,所有必须文件都存放于此,其中以网页标题为名称的HTM文件就是保存的页面,在没有网络的情况下,双击查看的效果和在网络上看是一样的!。

程序截图:

解决的难题:

      1.判断网页加载完成。以前都是已知目的网页,可以用“标志法”判断,但是在这个程序里一切是未知的。所以必须用新方法,这里用了HTML对象的Onload事件,结合webbrowser控件完美实现判断网页加载完成,这是目前最安全、最准确、最可靠的方法!适用于一切环境。

      判断网页加载完成一直是个非常头疼的问题,至少在VB中是这样。网上所说的方法基本上是不行的,好一点的是有时候行、有时候不行。现在我就贴出一个代码,来终结这个问题

'引用“Microsoft HTML Object Library”

Dim WithEvents page As HTMLWindow2   '注意要定义成全局的

Private Sub WebBrowser1_NavigateComplete2(ByVal pDisp As Object, URL As Variant)
    Set page = Me.WebBrowser1.document.parentWindow
End Sub

Private Sub page_onload()
    Debug.Print "加载完毕"
End Sub

     2.获取网页js和css。曾经看到很多人在猪八戒网发帖求人做程序,要求获取网页里所有的js和css。其实这个并不难,百度一下我们可以发现javascript语言提供了这个接口。下面我就演示一下如何利用这个接口获取。

首先用webbrowser控件加载你要提取的网页。

获取js:

strBasicHTM = WebBrowser1.Document.documentElement.outerHTML

WebBrowser1.Navigate "javascript:str='<HTML><HEAD><BASE HREF="" ';str+=document.URL;str+='""></HEAD><BODY><br>\n';c=document.scripts;for(i=0;i<c.length;i++){o=c[i];if (o.src=='')continue;str+='<a href=""';str+=o.src;str+='"">';str+=o.src;str+='</a><br>\n';};str+='</BODY></HTML>';document.write(str);"

While strBasicHTM = WebBrowser1.Document.documentElement.outerHTML '相等说明任务没有执行完毕
    
    DoEvents
    
Wend

For lngIndex = 0 To WebBrowser1.Document.links.length - 1
    
    Debug.print WebBrowser1.Document.links.Item(lngIndex).innerText
        
Next

结果图:

     通过上边这段代码webbrowser控件里显示的就是该网页中所有的js路径,这个路径就是网页源码中的路径,不做任何修改。也就是说:如果源码中写的是绝对路径,例如http:/www.xxx.com/x.js,那么返回的就是绝对路径http:/www.xxx.com/x.js;如果是相对路径,例如/js/x.js,那么返回的就是相对路径/js/x.js。

     最后用一个循环获取webbrowser控件中显示的js路径(其实就是获取超链接文本)

还有就是注意一下上边代码中的strBasicHTM变量,这个变量是为了获取webbrowser执行javascript语句前后的变化,以判断是否执行完毕,使程序更加安全。

获取css:

获取css和获取js过程一模一样,只需要把

WebBrowser1.Navigate "javascript:str='<HTML><HEAD><BASE HREF="" ';str+=document.URL;str+='""></HEAD><BODY><br>\n';c=document.scripts;for(i=0;i<c.length;i++){o=c[i];if (o.src=='')continue;str+='<a href=""';str+=o.src;str+='"">';str+=o.src;str+='</a><br>\n';};str+='</BODY></HTML>';document.write(str);"

改成:

WebBrowser1.Navigate "javascript:str='<HTML><HEAD><BASE HREF="" ';str+=document.URL;str+='""></HEAD><BODY><br>\n';c=document.styleSheets;for(i=0;i<c.length;i++){o=c[i];if (o.src=='')continue;str+='<a href="" ';str+=o.href;str+='"">';str+=o.href;str+='</a><br>\n';};str+='</BODY></HTML>';document.write(str);"


最后说明一点:

javascript没有直接提供获取js文件内容的接口,因此首先要对注册表进行改造:运行regedit,定位到HKEY_CLASSES_ROOT\.js,在它下面增加两个字符串类型的值:

Content Type=application/x-javascript

PerceivedType=text

如果修改的时候不放心,可以参考HKEY_CLASSES_ROOT\.css的缺省设置,它们只是Content Type的值不同。注册表改造是一次性的工作,改完就不用再动。

用代码改就是:

Dim lhwy
Set lhwy = CreateObject("wscript.shell")
lhwy.regwrite "HKEY_CLASSES_ROOT\.js\Content Type", "application/x-javascript"
lhwy.regwrite "HKEY_CLASSES_ROOT\.js\PerceivedType", "text"

     3.判断网页编码。先以GB编码保存,然后再读取,如果和保存之前不一样,说明是UTF-8编码,再用UTF-8编码保存。

用GB编码保存:

Open App.Path & "\xx.HTM" For Output As #1
    Print #1, strHTM
Close #1

用UTF-8编码保存:

'引用Microsoft ActiveX Data Objects 2.8 Library
Dim objStream As New ADODB.Stream
Dim str As String
     
With objStream
.Type = 2
.Mode = 3
.Open
.Charset = "UTF-8"
.WriteText strHTM, adWriteLine
.SaveToFile App.Path & "\xxHTM", adSaveCreateOverWrite
.Close
End With

程序源码下载地址

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
网页抓取工具5.1可以抓取互联网、wap网站上的任何网页,包括需要登录后才能访问的页面。对抓取到页面内容进行解析,得到结构化的信息,比如:新闻标题、作者、来源、正文等。支持列表页的自动翻页抓取,支持正文页多页合并,支持图片、文件的抓取,可以抓取静态网页,也可以抓取带参数的动态网页,功能极其强大。 用户指定要抓取的网站、抓取的网页类型(固定页面、分页显示的页面等等),并配置如何解析数据项(如新闻标题、作者、来源、正文等),系统可以根据配置信息自动实时抓取数据,启动抓取的时间也可以通过配置设定,真正做到“按需抓取,一次配置,永久抓取”。抓来的数据可以保存到数据库中。支持当前主流数据库,包括:Oracle、SQL Server、MySQL等。 本工具完全可以替代传统的编辑手工处理信息的模式,能够实时、准确、一天24*60不间断为企业提供最新资讯和情报,真正能为企业降低成本,提高竞争力。 本工具主要特点如下: *适用范围广,可以抓取任何网页(包括登录后才能访问的网页) *处理速度快,如果网络畅通,1小时可以抓取、解析10000个网页 *采用独特的重复数据过滤技术,支持增量式数据抓取,可以抓取实时数据,如:股票交易信息、天气预报等 *抓取信息的准确性高,系统提供了强大的数据校验功能,保证了数据的正确性 *支持断点续抓,在当机或出现异常情况后可以恢复抓取,继续后续的抓取工作,提高了系统的抓取效率 *对于列表页,支持翻页,可以抓取到所有列表页中的数据。对于正文页,可以对分页显示的内容自动进行合并; *支持页面深度抓取,页面间可以一级一级地抓下去。比如,通过列表页抓取到正文页URL,然后再抓取正文页。各级页面可以分别入库; *WEB操作界面,一处安装,随处使用 *分步解析,分步入库 *一次配置,永久抓取,一劳永逸

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值