`
wbj0110
  • 浏览: 1550976 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

网络爬虫读取js生成的页面

阅读更多

还有js逻辑的页面,对网络爬虫的信息抓取工作造成了很大障碍。DOM树,只有执行了js的逻辑才可以完整的呈现。而有的时候,有要对js修改后的 dom树进行解析。在搜寻了大量资料后,发现了一个开源的项目cobra。cobra支持JavaScript引擎,其内置的JavaScript引擎是 mozilla下的 rhino,利用rhino的API,实现了对嵌入在html的JavaScript的解释执行。测试用例:

js.html
 
 
  1. <html>   
  2. <title>test javascript</title>   
  3. <script language="javascript">   
  4. var go = function(){   
  5. document.getElementById("gg").innerHTML="google";   
  6. }   
  7. </script>   
  8. <body onLoad="javascript:go();">   
  9. <a id = "gg" onClick="javascript:go();" href="#">baidu</a>   
  10. </body>   
  11. </html>   
 
Test.java
 
 
  1. package net.cooleagle.test.cobra;  
  2. import java.io.InputStream;  
  3. import java.io.InputStreamReader;  
  4. import java.io.Reader;  
  5. import java.net.URL;  
  6.   
  7.   
  8. import org.lobobrowser.html.UserAgentContext;  
  9. import org.lobobrowser.html.domimpl.HTMLDocumentImpl;  
  10. import org.lobobrowser.html.parser.DocumentBuilderImpl;  
  11. import org.lobobrowser.html.parser.InputSourceImpl;  
  12. import org.lobobrowser.html.test.SimpleUserAgentContext;  
  13. import org.w3c.dom.Document;  
  14. import org.w3c.dom.Element;  
  15.   
  16.   
  17. public class Test{  
  18.     private static final String TEST_URI = "http://localhost/js.html";  
  19.       
  20.     public static void main(String[] args) throws Exception {  
  21.         UserAgentContext uacontext = new SimpleUserAgentContext();  
  22.         DocumentBuilderImpl builder = new DocumentBuilderImpl(uacontext);  
  23.         URL url = new URL(TEST_URI);  
  24.         InputStream in = url.openConnection().getInputStream();  
  25.         try {  
  26.             Reader reader = new InputStreamReader(in, "ISO-8859-1");  
  27.             InputSourceImpl inputSource = new InputSourceImpl(reader, TEST_URI);  
  28.             Document d = builder.parse(inputSource);  
  29.             HTMLDocumentImpl document = (HTMLDocumentImpl) d;  
  30.             Element ele = document.getElementById("gg");  
  31.             System.out.println(ele.getTextContent());  
  32.               
  33.         } finally {  
  34.             in.close();  
  35.         }  
  36.     }  
  37. }  
 
执行结果:
google
测试成功。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics