西西河

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

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

    看上去没有多少中文呢?

    难道是转码?

    好奇一下。

    • 家园 AJAX页面,文字都是临时从服务器取下来的

      页面只是个框架,具体的内容是从远端的服务器里面用js代码加载的。

      好处是加载速度快,可以做更多页面布局的控制,坏处是如果不静态化或者伪静态化,对搜索引擎不友好。

    • 家园 那这个页面分析一下

      先加载了"/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的内容?

                  • 家园 你的思路基本是本末倒置,而且根本就不懂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代码。

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

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

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

                      • 家园 俺是JAVA的小白

                        你还是找JAVA的“解决方案”吧,俺对JAVA统统无视 --- 俺是JAVA的小白。

                        但是,俺在浏览器上还是很有点自负的,俺可以99%告诉你,你要的“动态网页的内容”在浏览器中的表述是什么 --- 网页DOM TREE的HTML内容。既然是DOM TREE的内容,你就可以用JS code读取,一如老铁用JS code修改。JS直接与浏览器的内部引擎打交道就可以了,无需再与chrome inspector或者firebug打交道 --- 你要吃的是米饭,不是别人嚼过的米饭。

                        如果不喜欢用JS,可以考虑用C++。用IE有IE的code,用chrome 直接改chromium的代码就成了。

                        写到这里俺突然想起来了。ANDROID的浏览器的“浏览器”层就是JAVA写的,用JAVA访问网页DOM TREE的的方法里面一定有!

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

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

                    • 家园 我想把用chrome inspector或者

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

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

    • 家园 小秘密

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

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


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

Copyright © cchere 西西河