`
jgsj
  • 浏览: 1028258 次
文章分类
社区版块
存档分类
最新评论

网页信息抓取进阶 Jsoup的不足之处

 
阅读更多

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/23866427

今天又遇到一个网页数据抓取的任务,给大家分享下。

说道网页信息抓取,相信Jsoup基本是首选的工具,完全的类JQuery操作,让人感觉很舒服。但是,今天我们就要说一说Jsoup的不足。

1、首先我们新建一个页面

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
	<head>
		<title>main.html</title>

		<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
		<meta http-equiv="description" content="this is my page">
		<meta http-equiv="content-type" content="text/html; charset=UTF-8">
	<style type="text/css">
		a {
			line-height: 30px;
			margin: 20px;
		}
	
	</style>
		<!--<link rel="stylesheet" type="text/css" href="./styles.css">-->
		<script type="text/javascript">

var datas = [ {
	href : "http://news.qq.com/a/20140416/017800.htm",
	title : "高校一保安长相酷似作家莫言"
}, {
	href : "http://news.qq.com/a/20140416/015167.htm",
	title : "男子单臂托举悬空女半小时"
}, {
	href : "http://news.qq.com/a/20140416/013808.htm",
	title : "女子上门讨房租遭拍裸照"
}, {
	href : "http://news.qq.com/a/20140416/016805.htm",
	title : "澳洲骆驼爱喝冰镇啤酒解暑"
} ];

window.onload = function() {
	var infos = document.getElementById("infos");
	for( var i = 0 ; i < datas.length ; i++)
		{
			var a = document.createElement("a");
			a.href = datas[i].href ;
			a.innerText = datas[i].title;
			infos.appendChild(a);	
			infos.appendChild(document.createElement("br"))
		}
}
</script>
	</head>

	<body>
		Hello Main HttpUnit!
		<br>

		<div id="infos"
			style="width: 60%; border: 1px solid green; border-radius: 10px; margin: 0 auto;">
		</div>

	</body>
</html>
页面上观察是这样显示的:


我们审查元素:


如果你看到这样的页面,你会觉得拿Jsoup来抓取,简直就是呵呵,小菜一叠,于是我们写了这样的代码:

        @Test
	public void testUserJsoup() {
		try {
			Document doc = Jsoup.connect(
					"http://localhost:8080/strurts2fileupload/main.html")
					.timeout(5000).get();
			Elements links = doc.body().getElementsByTag("a");
			for (Element link : links) {
				System.out.println(link.text() + " " + link.attr("href"));
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
你会觉得就这几行代码,轻轻松松搞定,快快乐乐下班。于是运行发现,其实什么的抓取不到。

于是我们再回到页面,打开页面源代码,也就是上面的HTML代码,你恍然大悟,我靠,body里面根本没有数据,难怪抓不到。这就是Jsoup的不足,如果Jsoup去抓取的页面的数据,全都是页面加载完成后,ajax获取形成的,是抓取不到的。

下面给大家推荐另一个开源项目:HttpUnit,看名字是用于测试的,但是用来抓取数据也不错

我们开始编写类似Jsoup的代码:

       @Test
	public void testUserHttpUnit() throws FailingHttpStatusCodeException,
			MalformedURLException, IOException {

		/** HtmlUnit请求web页面 */
		WebClient wc = new WebClient(BrowserVersion.CHROME);
		wc.getOptions().setUseInsecureSSL(true);
		wc.getOptions().setJavaScriptEnabled(true); // 启用JS解释器,默认为true
		wc.getOptions().setCssEnabled(false); // 禁用css支持
		wc.getOptions().setThrowExceptionOnScriptError(false); // js运行错误时,是否抛出异常
		wc.getOptions().setTimeout(100000); // 设置连接超时时间 ,这里是10S。如果为0,则无限期等待
		wc.getOptions().setDoNotTrackEnabled(false);
		HtmlPage page = wc
				.getPage("http://localhost:8080/strurts2fileupload/main.html");

		DomNodeList<DomElement> links = page.getElementsByTagName("a");

		for (DomElement link : links) {
			System.out
					.println(link.asText() + "  " + link.getAttribute("href"));
		}
	}
再看一下运行结果:


完美解决,HttpUnit其实就相当于一个没有UI的浏览器,它可以让页面上的js执行完成后,再抓取信息,具体的介绍,google一下就行。主要给大家介绍一种方案!


如果你觉得这篇文章对你有用,就顶一个~



分享到:
评论

相关推荐

    网页抓取教程.zip

    网页抓取,也被称为网络爬虫或数据抓取,是一种自动化技术,用于从互联网上收集大量信息。在Java EE和Android开发中,网页抓取是一个重要技能,可以帮助开发者获取网站上的结构化数据,如新闻、产品信息、评论等,...

    Jsoup-网络爬虫项目

    - 利用Jsoup进行网页抓取,可以实现新闻标题的收集、商品信息的获取、评论内容的抓取等多种任务。 - 学习这个项目,你可以了解到如何从网页中抓取特定数据,如链接、标题、内容等,并将这些数据保存到文件或数据库...

    基于jsoup的java爬虫项目

    1. **新闻爬虫**:利用Jsoup抓取新闻网站的标题、摘要、作者等信息,存储到数据库或文件中。 2. **商品信息抓取**:抓取电商网站的商品详情,包括价格、评价等,进行数据分析。 3. **社交网络分析**:抓取社交媒体的...

    java简单抓取网页内容

    在Java编程语言中,抓取网页内容是一项常见的任务,尤其对于数据分析、信息提取以及网络爬虫等应用场景。本文将深入探讨如何使用Java实现简单的网页内容抓取,适合初学者入门学习。 首先,我们需要理解网页抓取的...

    jsp网页抓取天气预报源代码

    "jsp网页抓取天气预报源代码" 这个标题表明这是一个与Java Server Pages(JSP)相关的项目,目标是实现从网页上抓取天气预报信息的功能。JSP是一种动态网页技术,允许开发者在HTML页面中嵌入Java代码来处理服务器端...

    基于Jsoup的 Android 网络爬虫,抓取海投网上的高校宣讲会信息详细文档+资料齐全.zip

    基于Jsoup的 Android 网络爬虫,抓取海投网上的高校宣讲会信息详细文档+资料齐全.zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,...

    高级爬虫进阶:HtmlUnit+多线线程+消息队列快速抓取大量信息数据

    高效的java爬虫,内附代码 sql数据表 ,main方法启动。...避免了jsoup无法抓取js代码生成的数据内容的弊端。避免了client无法一次性获取大量信息的弊端。有能获取静态页面形成之前的对方数据内容的高手 欢迎借阅指导

    超级课程表 课程格子 教务系统抓取 SQLite Android Studio HttpWatch Jsoup解析网页.zip

    包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。 包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python...

    企查查信息爬取代码.zip

    【标题】"企查查信息爬取代码.zip"所涉及的知识点主要集中在网络爬虫技术和Java编程语言上,尤其在如何使用Java实现对企查查网站数据的抓取和处理。企查查是一个提供企业信息查询的平台,包含了企业的基本信息、股东...

    matlab爬虫,matlab爬虫获取网页信息,matlab源码.zip

    在IT领域,爬虫是一种广泛使用的工具,用于自动地抓取网络上的信息。在这个主题中,我们将深入探讨如何使用MATLAB构建爬虫来获取网页信息。MATLAB虽然以数值计算和科学计算见长,但通过扩展功能,也可以实现网页数据...

    java实现的网页爬虫1.5版本聚焦爬虫抽取网页html

    Java实现的网页爬虫是一种自动化工具,用于从互联网上抓取HTML内容,进而提取有用的信息。在本项目中,我们讨论的是一个特定的版本——"网页爬虫1.5版本",它是一个聚焦爬虫,专门针对网页HTML的抽取。 1. **聚焦...

    Java爬虫进阶:高效爬取CSDN技术文章.zip

    在本压缩包“Java爬虫进阶:高效爬取CSDN技术文章.zip”中,包含了一套关于使用Java编写高效网络爬虫的教程,特别针对CSDN(China Software Developer Network)技术文章的抓取。这个项目不仅提供了源代码,还有说明...

    xiecheng_01.zip

    在 Java 爬虫项目中,Jsoup 是常用工具之一,能够简化网页数据提取的流程。 【文件列表详解】 1. `mvnw.cmd` 和 `mvnw`:这是 Maven 的 Windows 命令行工具,用于自动化构建 Java 项目,如编译源代码、运行测试和...

    java网页爬虫demo

    Java网页爬虫是一种用于自动化抓取互联网数据的技术,它通过模拟浏览器发送HTTP请求并解析返回的HTML内容来获取所需信息。在这个"java网页爬虫demo"中,我们重点关注的是使用Java语言实现的一个完整示例。主类是...

    CrawlerAndJsoup-master.zip

    9. **进阶话题**:可能包括使用Jsoup与其他Java库(如HttpClient、OkHttp)结合,以及如何处理更复杂的网页结构,如JavaScript渲染的页面。 10. **测试与调试**:介绍如何编写测试用例,验证爬虫的正确性,以及使用...

    java爬虫资料 pdf 文档 视频 源码 都有

    在源代码方面,"httpclient+jsoup.rar"提供了使用HTTPClient和Jsoup两个库进行网页抓取的示例。HTTPClient是Java中常用的HTTP客户端库,可以方便地发送各种HTTP请求;Jsoup则是一个强大的HTML解析库,能轻松处理网页...

    零基础写Java知乎爬虫之进阶篇

    在本篇"零基础写Java知乎爬虫之进阶篇"中,我们将深入学习如何使用Java进行更复杂的网络数据抓取,特别是在面对更高级的挑战时。首先,文章提到初级的Java爬虫可能只能处理一些基础的网页抓取任务,但当我们需要处理...

    搜索引擎-网络蜘蛛-源码

    搜索引擎是互联网上用于检索信息的重要工具,而网络蜘蛛(Web Crawler)是搜索引擎的重要组成部分,负责自动抓取网页内容并建立索引。本资源提供了一个简单的网络蜘蛛的Java源码实现,采用Applet技术,方便在网页中...

    网络爬虫的代码

    网络爬虫是互联网数据挖掘的重要工具,它能够自动地遍历网页、抓取信息,为数据分析、搜索引擎优化等提供大量有价值的数据。在这个压缩包中,包含五个逐步进阶的网络爬虫Java代码示例,旨在帮助学习者了解并掌握网络...

    java爬虫webCollection

    除了基本的网页抓取,WebCollector还可以用于复杂的数据采集任务,如动态页面的抓取、JavaScript渲染、登录验证、API接口调用等。通过扩展其核心组件,开发者可以实现更高级的功能,例如分布式爬虫、反反爬虫策略等...

Global site tag (gtag.js) - Google Analytics