`
wbj0110
  • 浏览: 1602521 次
  • 性别: 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
测试成功。
分享到:
评论

相关推荐

    Java爬虫Jsoup+httpclient获取动态生成的数据

    要获取动态生成的数据,爬虫开发者需要寻找并分析JavaScript代码中所使用的数据接口。这些接口通常会向服务器发送Ajax请求,获取动态内容后更新到页面上。通过分析这些请求,开发者可以找到数据接口,并使用...

    基于javaScript从高德地图爬虫获取建筑轮廓,生成geojson文件,mapbox定制自定义地图,echarts-gl生成

    基于javaScript从高德地图爬虫获取建筑轮廓,生成geojson文件,mapbox定制自定义地图,echarts-gl生成,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md...

    网络爬虫.论文答辩PPT

    网络爬虫是一种自动获取网页信息的技术,它模拟人类浏览网页的行为,通过编程方式遍历互联网上的页面,收集所需数据。在网络爬虫的论文答辩PPT中,主要涉及以下几个知识点: 1. **网络爬虫的基本原理**:网络爬虫...

    基于JavaScript切片的AJAX框架网络爬虫技术研究

    为了使网络爬虫能够正确地执行网页上的JavaScript代码并获取动态生成的内容,研究者还需要解决脚本执行引擎与切片模块之间的互操作问题。通常情况下,网络爬虫需要模拟浏览器环境来执行JavaScript代码。这就涉及到...

    爬虫爬到的内容_JS生成的数据基于JQuery

    在互联网世界中,数据无处不在,而网页中的动态数据往往是通过JavaScript生成的,特别是基于JQuery库的数据处理。本文将深入探讨如何处理和解析这些由JS生成的、对爬虫来说具有挑战性的数据。 首先,我们需要理解...

    java网络爬虫demo

    - **处理动态内容**:现代网页常使用JavaScript生成内容,可能需要使用如Selenium等工具处理。 - **异常处理**:考虑到网络波动、服务器错误等情况,应编写健壮的异常处理机制。 6. **法律与道德** 在进行网络...

    自己动手写网络爬虫光盘文件10章

    7. **第七章:动态网页与JavaScript**:面对越来越多的动态加载内容,讲解如何处理JavaScript生成的页面,如使用Selenium库。 8. **第八章:爬虫框架Scrapy**:介绍Scrapy框架,它是Python中强大的爬虫开发工具,...

    用Python写网络爬虫 pdf

    本章讲解了如何处理JavaScript渲染的页面,包括使用Selenium模拟浏览器行为和分析JavaScript生成的网络请求。 第6章 表单交互:很多网站通过表单提交信息,本章介绍了如何使用Python模拟用户填写和提交表单,包括...

    基于Python的网络爬虫-开题报告.pdf

    动态网页的抓取需要处理JavaScript、AJAX等技术生成的内容,这通常需要利用像Selenium这样的库来模拟浏览器行为。聚焦爬虫则更注重于特定主题的深度挖掘,它能够在海量信息中筛选出与特定主题相关的内容,以提高搜索...

    扒js处理过的HTML代码.反爬手段之一就是用javascript数据渲染到页面上.所以如果你想写个反反爬虫来扒这样的网站页面,就按我这办法来扒.

    对于爬虫来说,它需要模拟浏览器的行为,执行JavaScript代码来获取这些动态生成的内容。 1. **使用Headless Browser**:一种常见的方法是利用Headless Browser,如无头Chrome或Firefox。它们是完整的浏览器,但没有...

    网络爬虫资料,全套Java写的

    网络爬虫是互联网数据获取的重要工具,主要用于自动化地抓取网页信息。本套资料专注于Java语言实现的网络爬虫技术,旨在帮助用户掌握如何利用Java进行高效、稳定的网页抓取。下面将详细介绍Java网络爬虫的相关知识点...

    自己动手写网络爬虫.PDF_彩影版附全书源码.

    总之,《自己动手写网络爬虫》这本书将带你走进网络爬虫的世界,通过学习,你可以掌握Java环境下爬虫开发的全过程,从基础知识到高级技巧,从理论到实践,全方位提升自己的编程和数据获取能力。

    深层网络爬虫研究综述

    与传统爬虫相比,深层网络爬虫面临着更多挑战,如需要处理复杂的动态网页生成机制、应对数据库查询和表单提交等。 **4. 研究目标** 深层网络爬虫的研究目标主要包括以下几个方面: - **提升搜索效率与准确性**:...

    动态网络爬虫——linux下C

    动态网络爬虫与静态爬虫不同,它能处理JavaScript生成的内容,更接近用户的实际浏览体验。 一、网络爬虫基础 1. 网络爬虫的原理:通过模拟浏览器发送HTTP请求到服务器,获取响应的HTML或其他格式的网页内容,然后...

    精通Python网络爬虫源码

    在IT领域,网络爬虫是数据获取的重要工具,特别是在大数据分析和信息挖掘中。Python作为一门强大且易学的语言,因其丰富的库支持而成为编写网络爬虫的首选。本资源"精通Python网络爬虫源码"聚焦于使用Python进行网络...

    网络爬虫Python实现

    Selenium可以模拟浏览器行为,加载完整的网页内容,包括那些由JavaScript生成的部分。通过WebDriver接口,我们可以控制浏览器执行特定的操作,如点击链接、填写表单,进而爬取到动态内容。 为了防止爬虫过于频繁地...

    网络爬虫源码网络爬虫源码

    了解并掌握网络爬虫的原理和技术,不仅可以提升数据获取的效率,还能为数据分析、业务决策提供强有力的支持。不过,使用网络爬虫时务必遵守法律法规,尊重网站的Robots协议,避免对目标服务器造成过大的负担。

    爬虫jsp获取网页源码

    【爬虫jsp获取网页源码】这一主题主要涉及网络爬虫技术在Java Server Pages (JSP)中的应用,以及如何通过前端交互获取网页源码。爬虫是互联网数据挖掘的重要工具,它能够自动地遍历网页,抓取所需信息。在JSP环境下...

    网络游戏-网络爬虫调度方法及应用其的网络爬虫系统.zip

    1. **动态内容**:许多网络游戏的信息是动态生成的,例如实时的玩家状态、排行榜等,这要求爬虫具备处理JavaScript的能力,如使用Selenium、Puppeteer等工具。 2. **反爬机制**:游戏公司可能会设置反爬策略,如...

    Python-Python3爬虫实战JS加解密逆向教程

    本教程"Python-Python3爬虫实战JS加解密逆向教程"聚焦于如何处理JavaScript加密和混淆的数据,以便在爬虫过程中获取有效信息。这通常涉及到对前端JavaScript代码的理解、逆向工程以及加解密算法的应用。下面,我们将...

Global site tag (gtag.js) - Google Analytics