挺有意思的,分析的比较细致。guoshuang commet.
由 eureka 提交于 星期四, 六月 24, 2004 - 12:40 工具和服务 | 计划打算想法
在网上花了些时间去找这样的工具没找到, WEB4C 在其6月5日的BLOG里写了关于如何完整抓取页面的文章,后面是“未完待续”今天已经24号了,也未见其“下”部分刊出。看其上部分所写的,使用了一些工具,象wget,不但要熟悉这些工具,用起来其实还是挺麻烦。以下是我的试验笔记和想法:
以http://www.csszengarden.com/tr/chinese/(CSS禅意花园中文版[繁体]为例)。
用IE的“另存为”选“网页,全部”保存网页,会保存一个.htm文件和一个??.files的文件夹,在files文件夹里会保存用到的js, css 和图片文件。象在本例中只保存了一个001-zh.css文件。html页面中显示的图片因为是在css中的,所以没有被保存。用IE保存还有一个缺点就是它大量的修改的原文件。把原本xhtml全部改成了HTML4.0.1。这时重新打开文件保存的文件,却再也看不到原页面的效果了!
使用firefox打开该网页,用“页面另存为”,选择“网页,全部”,它象IE一样创建一个.files文件夹,里面放些图片。这次却连.css文件都没有下来。但它所下载的.html页面里却忠实的保存原来的xhtml格式。
那么,如果要抓取一个网页的所需部分,先看看网页是除了正常的html页面本身外,还可能会从外面导入哪些东东来构成的:
img标签,即文内图片,也就是部分。(这部分一般浏览器能很好的抓下来)。
Applet标签,里面的achive文件IE却是抓不下来的,但现在网上用Applet的比较少,如果需要的话,可以抓取applet标签里的achive属性所带的文件。
embed标签,该标签可以让你插入音乐等内容。可用在ie和ns上,但它不是W3C的标准。若用IE进行保存,是不会保存该标签的src属性部分的。
object标签,象著名的Flash,就是通过该标签插入的,里面的value属性会带上flash文件地地址。IE也不能直接下载文内flash。
其它象input标签里也可能会带上图片,使用src属性引入。
通过scrip标签载入脚本,使用src属性引入脚本。
通过style和link标签导入的CSS还会在CSS正文里继续导入CSS和图片。
通过@import导入CSS文件。
通过url()导入图片文件。
在body标签的background属性会引入背景图片
象href属性所带的内容一般是一些资源,基本与页面显示关系不大,而象base标签可能对导入文件的位置有影响。
下面是以手工的方式抓取一个页面的过程:
抓取html页面,为了避免ie另存为对页面的修改,可以用两种方式:通过其它到该页面的链接使用“目标另存为”方式存下该页面。或使用“查看源文件”然后用记事本保存该页。另外使用一些下载工具,如flashget等下载当然也不会更改该html内容。
参照上述标签内容搜寻该页面的外部内容url地址:这里参照所举的例子(主要讨论css部分),在style标签里有@import “/001/001-zh.css”;的语句。
把该语句使用了绝对路径。因此,只要加上域名即可下载。即:http://www.csszengarden.com/001/001-zh.css。
查看该文件,找里面的url()语句,有: url(/001/blossoms.jpg), url(/001/zen-bg.jpg),url(/001/h1.gif),url(/001/h2.gif),url(/001/paper-bg.jpg),url(/001/h3.gif),url(/001/h4.gif),url(/001/h5.gif),url(/001/h6.gif), url(/001/cr1.gif),url(/001/cr2.gif) 将这些地址前面加上http://www.csszengarden.com/即可下载这些图片。
我们修改源文件重新定位这些图片文件,在这里为方便起见下级目录001,然后把些文件放上,把url()里的绝对路径改成相对,即去掉“/001/”(注意css文件里的图片地址是相对与css文件位置而不是html文件位置。现在可以看到整个html的页面设计了。
现在的关键是怎样以最方便的方法利用程序自动抓取整个html。
以下是我的想法:
利用程序(我用php)自动解析所给网页,生成所有需下载内容的链接,并生成足够的提示来指示如何操作下载后的文件。
利用非常流行的下载软件,如flashget, 浏览该页,然后使用“下载全部链接”方式一次性下载所有内容。
根据前一步的提示组织这些文件。好了,到此,就很好的下载了整个html文件。
这个小项目正在考虑,现在还没有去实现,如果大家觉得有必要去实现这样的功能,请在这里留言。
原文地址在:
http://www.ee-studio.com/drupal/node/view/303
Leave a reply