西西河

主题:当右键西西河的页面时,为什么整个page source -- 华夏英雄

共:💬17 🌺9 新:
全看树展主题 · 分页首页 上页
/ 2
下页 末页
家园 当右键西西河的页面时,为什么整个page source

看上去没有多少中文呢?

难道是转码?

好奇一下。

家园 小秘密

西西河是铁手用JS code在你的浏览器中写出来的,光看静态的HTML没用。

家园 唉,这个好也不好

在手机上支持不是特别好,排版被弄得千奇百怪的

家园 有没有办法复原那些中文呢?
家园 那这个页面分析一下

先加载了"/incs/rs.php?T=2&V=1"这个javascript文件,里面有zJ_PE()函数,负责最初的解码工作。

整个页面分为上下左右四个div,分别是DG_Top, DG_Bottom, DG_Left和DG_Right。以DG_Top为例,它的实际内容存在ts这个变量中,你可以看见:

var ts="1#$<Cdi ......";

走zJ_PE()解码以后,就是普通的HTML了:

<div><a href="/" class="fL"> ......

至于文章的内容,存在ls这个变量里面,比如本页面就是:

<b>当右键西西河的页面时,为什么整个page source</b> [ 华夏英雄 ] <small>于:2011-02-11 12:11:48 主题帖</small><br/><p>看上去没有多少中文呢?</p><p>难道是转码?</p><p>好奇一下。</p>

呵呵,什么秘密都显露出来了

家园 继续深入

感觉zJ_PE()就是把故意搞复杂的东西又还原为原貌。对吗?

这个函数中有一个decodeURIComponent函数,不知道是做什么的。

另外,还有ls、bs等变量,也不知道做什么的。

还想知道,你是如何得到

<b>当右键西西河的页面时,为什么整个page source</b> [ 华夏英雄 ] <small>于:2011-02-11 12:11:48 主题帖</small><br/><p>看上去没有多少中文呢?</p><p>难道是转码?</p><p>好奇一下。</p>

的呢?

家园 其实很简单的

decodeURIComponent() 是 Javascript 标准定义的内建的函数,用来解码 URI,主要是除去 URI 里面的特殊字符的转码

zJ_PE() 是铁手写的解码页面内容的函数

用 Firebug 可以很容易地在firefox里面看出整个 Javascript 的运行效果。

家园 谢了!原来firebug这么强大

问个问题:如果要crawl类似西西河这样的网站(应用了JS),一定要用到firebug吗?

用Java能够调用firebug吗?

家园 不用,写个CHROME EXTENSION就成了。
家园 Chrome自带了类似firebug的工具

右键页面选择inspect element就可以了。

家园 这个我也注意到了。

我想知道,能否在Java application中调用这个功能,或者提取chrome inspector或者firebug的内容?

家园 能详细的说说你想做什么么?

chrome inspector 和firebug就是针对javascript的IDE,只是功能没有Elipse那么强。

家园 你的思路基本是本末倒置,而且根本就不懂ajax开发 --

或者DOM模型。

chrome inspector在CHROMIUM的设计上是什么?

当右键打开chrome inspector时,chrome将打开一个url(chrome://devtools/devtools.html的render进程。这个进程的任务就是将要INSPECTING的网页的DOM原始数据读出(通过某种代理机制),然后在chrome://devtools/devtools.html的这个进程里面“可视化”。这个“可视化”的计算成本非常高,这个可以通过右键打开chrome inspector的时间来判断。在chrome inspector里面获取网页的DOM“原始数据”(!=静态文本文件)用一句粗话描述最形象 --- 脱了裤子放屁。

而楼主要获取的东西用JAVASCRIPT实现非常简单 --- 一句body.innerHTML而已。里面最关键的问题是什么?执行body.innerHTML的时间,或者说用什么“信号”触发body.innerHTML。最好的时机是网页上的DOM树构建完成后render进程发出的Idle Trigger.只要某个DOM元素在浏览器中存在,它的innerHTML必然是可被浏览器理解的HTML代码。

家园 我想把用chrome inspector或者

firebug编辑器中显示的html内容包括html tag和文字自动导出。

这些内容如果是动态产生的,目前靠读取html的page source是无法读出的。

家园 按你的意思是,无法用java程序来获得动态的网页内容?

我查了一下,似乎Watir可以做这件事。不知道有没有其他的、类似Java编程的工具可以获得动态的网页内容?

我想把动态网页的内容抓取下来。

全看树展主题 · 分页首页 上页
/ 2
下页 末页


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河