`

根据URL抓取网页内容

 
阅读更多
  1. 准备工作

    需要下载jar包:commons-httpclient   

   下载地址:http://hc.apache.org/downloads.cgi 4.1.2 

   2.   获取网页内容

 

package cn.edu.xmu.utils;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;

public class WebPageGetter {
	public static String getWebPage(String url) throws Exception {

		// 初始化,与3.1中不同
		HttpClient httpclient = new DefaultHttpClient();

		// HttpHost targetHost = new HttpHost("http://www.kinkbomb.com/p/9699");
		// HttpGet httpget = new HttpGet("http://www.apache.org/");
		HttpGet httpget = new HttpGet(url);

		// 查看默认request头部信息
		System.out.println("Accept-Charset:"
				+ httpget.getFirstHeader("Accept-Charset"));
		// 以下这条如果不加会发现无论你设置Accept-Charset为gbk还是utf-8,他都会默认返回gb2312(本例针对google.cn来说)
		httpget.setHeader("User-Agent",
				"Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1.2)");
		// 用逗号分隔显示可以同时接受多种编码
		httpget.setHeader("Accept-Language", "zh-cn,zh;q=0.5");
		httpget.setHeader("Accept-Charset", "GB2312,utf-8;q=0.7,*;q=0.7");
		// 验证头部信息设置生效
		System.out.println("Accept-Charset:"
				+ httpget.getFirstHeader("Accept-Charset").getValue());

		// Execute HTTP request
		System.out.println("executing request " + httpget.getURI());
		// HttpResponse response = httpclient.execute(targetHost, httpget);
		HttpResponse response = httpclient.execute(httpget);

		// HttpResponse response = httpclient.execute(httpget);

		System.out.println("----------------------------------------");
		System.out.println("Location: " + response.getLastHeader("Location"));
		System.out.println(response.getStatusLine().getStatusCode());
		System.out.println(response.getLastHeader("Content-Type"));
		System.out.println(response.getLastHeader("Content-Length"));

		System.out.println("----------------------------------------");

		// 判断页面返回状态判断是否进行转向抓取新链接
		int statusCode = response.getStatusLine().getStatusCode();
		if ((statusCode == HttpStatus.SC_MOVED_PERMANENTLY)
				|| (statusCode == HttpStatus.SC_MOVED_TEMPORARILY)
				|| (statusCode == HttpStatus.SC_SEE_OTHER)
				|| (statusCode == HttpStatus.SC_TEMPORARY_REDIRECT)) {
			// 此处重定向处理 此处还未验证
			String newUri = response.getLastHeader("Location").getValue();
			httpclient = new DefaultHttpClient();
			httpget = new HttpGet(newUri);
			response = httpclient.execute(httpget);
		}

		// Get hold of the response entity
		HttpEntity entity = response.getEntity();

		// 查看所有返回头部信息
		Header headers[] = response.getAllHeaders();
		int ii = 0;
		while (ii < headers.length) {
			System.out.println(headers[ii].getName() + ": "
					+ headers[ii].getValue());
			++ii;
		}

		// If the response does not enclose an entity, there is no need
		// to bother about connection release

		byte[] bytes = null;
		if (entity != null) {
			// 将源码流保存在一个byte数组当中,因为可能需要两次用到该流,
			bytes = EntityUtils.toByteArray(entity);
			String charSet = "";

			// 如果头部Content-Type中包含了编码信息,那么我们可以直接在此处获取
			charSet = EntityUtils.getContentCharSet(entity);

			System.out.println("In header: " + charSet);
			// 如果头部中没有,那么我们需要 查看页面源码,这个方法虽然不能说完全正确,因为有些粗糙的网页编码者没有在页面中写头部编码信息
			if (charSet == "") {
				String regEx = "(?=<meta).*?(?<=charset=[\\'|\\\"]?)([[a-z]|[A-Z]|[0-9]|-]*)";
				Pattern p = Pattern.compile(regEx, Pattern.CASE_INSENSITIVE);
				Matcher m = p.matcher(new String(bytes)); // 默认编码转成字符串,因为我们的匹配中无中文,所以串中可能的乱码对我们没有影响
				Boolean result = m.find();
				if (m.groupCount() == 1) {
					charSet = m.group(1);
				} else {
					charSet = "";
				}
			}
			System.out.println("Last get: " + charSet);
			// 至此,我们可以将原byte数组按照正常编码专成字符串输出(如果找到了编码的话)
			// System.out.println("Encoding string is: " + new String(bytes,
			// charSet));
		}

		httpclient.getConnectionManager().shutdown();

		return new String(bytes);
	}
}

   

 

分享到:
评论

相关推荐

    JAVA通过url获取网页内容

    "JAVA 通过 URL 获取网页内容" JAVA 通过 URL 获取网页内容是 Java 编程语言中的一种常见操作。通过使用 URL 类和 URLConnection 类,Java 程序可以连接到远程服务器,获取指定 URL 的内容。本文将详细介绍如何使用...

    c_根据url获取网站内容

    "根据URL获取网站内容" 本篇文章主要介绍了如何使用C#语言根据URL获取网站的HTML内容和XML数据。该方法可以应用于各种场景,例如爬虫、数据采集、网页解析等。 首先,让我们来看一下获取网站HTML内容的方法。该...

    JAVA线程根据给定URL生成网页快照

    以下将详细介绍如何根据给定的URL利用Java实现线程来生成网页快照。 首先,我们需要了解基本的网络请求。在Java中,可以使用`java.net.URL`和`java.net.HttpURLConnection`类来发起HTTP请求。例如,我们可以创建一...

    Java源代码根据URL获取因特网网页源文件.rar

    这个RAR文件包含的"说明.txt"可能是详细的操作指南,而"根据URL获取因特网网页源文件"可能是一个Java源代码示例,用于演示如何实现这一功能。以下是对这个主题的详细讲解: 1. **网络编程基础**: 在Java中,进行...

    抓取网站内容,获取网站内容,读取网站所有内容,抓取网页内容

    在IT领域,网络爬虫(Web Crawler)是一种常见的技术,用于自动地抓取网站内容。这个小例子可能是一个简单的Python爬虫程序,用于演示如何从网页中提取数据。下面,我们将深入探讨这些标签所涉及的关键知识点: 1. ...

    java利用URL获取网页内容

    java利用URL获取网页内容,

    根据url来获取页面的截图

    2. **打开连接并获取页面内容**:使用`openStream()`方法打开与URL的连接,并获取网页的HTML内容。这一步通常涉及到HTTP请求,但在这里我们假设已经完成了这个步骤,因为描述中提到的是直接修改URL。 3. **使用...

    bat获取网页信息

    命令行下调用curl获取网页信息,例如在Java servlet中使用response.getWriter().print("success") curl就可以获取到"success",并保存到check.txt中,再从check.txt中读取数据,并做判断

    通过URL地址获取网页生成jpg图片

    Apache HttpClient是一个广泛使用的HTTP客户端库,它可以让我们方便地从URL获取网页内容。引入该库后,我们可以通过以下代码片段发送GET请求获取网页HTML: ```java CloseableHttpClient httpClient = HttpClients....

    根据url获取网页Option到本地

    在IT行业中,尤其是在Web开发领域,经常需要从网站上抓取数据或模拟用户交互行为,例如根据URL获取网页上的特定信息。在这个场景中,我们关注的是如何从用户输入的URL获取下拉框(Dropdown List)的数据,并将其保存...

    Java抓取网页内容三种方式

    本文将介绍使用 Java 语言抓取网页内容的三种方式:使用 URL 连接、使用 HttpURLConnection 和使用 Apache HttpClient。 第一种方式:使用 URL 连接 使用 URL 连接是最简单的抓取网页内容的方式。它使用 java.net....

    c#多线程抓取网页内容

    ### C#多线程网页内容抓取技术解析 #### 概述 在现代互联网应用开发中,网页抓取是一项常见的需求,特别是在数据挖掘、搜索引擎等领域。传统的单线程抓取方式往往因效率低下而不适用于大规模的数据采集场景。本文...

    android获取网页内容

    在Android平台上,获取网页内容是常见的任务,常用于网络数据的抓取、解析或展示。这一过程涉及到多个关键知识点,包括网络请求库的使用、HTML解析以及数据处理。以下将详细讲解这些步骤。 首先,我们需要一个网络...

    linux下C++通过网页url获取网页内容的源码,直接用g++终端编译即可

    linux下C++通过网页url获取网页内容的源码,直接用g++终端编译即可,童叟无欺,只需要url即可获取到网页内容

    PHP 批量根据URL获取IP

    - 数据抓取:在爬虫程序中,获取目标网站的IP有助于识别和处理CDN或负载均衡情况。 - 安全分析:分析恶意URL的IP分布,帮助识别潜在威胁。 - IP地址库更新:用于维护一个IP到域名的数据库,以便快速查找或过滤。 在...

    java根据url获取html源文件

    此外,对于更复杂的网页抓取,可能需要使用库如Jsoup,它可以解析HTML,提取和操作数据,支持CSS选择器等功能,让处理网页内容变得更加容易。不过,基础的URL访问和输入流读取是所有网络编程的基础,理解这些概念...

    java URL转PDF文件(完美支持中文)

    在Java编程环境中,将URL内容转换为PDF文件是一项常见的需求,尤其在数据抓取、文档保存或自动化报告生成等场景中。"java URL转PDF文件(完美支持中文)"的主题着重于如何利用Java库来实现这一功能,并且确保中文字符...

    java web网站常用抓取其他网站内容

    Java Web网站抓取其他网站内容是一项常见的技术需求,主要用于数据挖掘、信息聚合或者自动化测试等场景。本篇文章将深入探讨如何使用Java在Web环境中抓取其他网站的数据。 首先,我们需要了解的是网页抓取的基本...

    \java通过url在线预览Word、excel、ppt、pdf、txt文档中的内容

    "Java 通过 URL 在线预览 Word、Excel、PPT、PDF、TXT 文档中的内容" Java 语言可以通过 URL 在线预览 Word、Excel、PPT、PDF、TXT 文档中的内容。下面将详细介绍如何实现这一功能。 Word 文档预览 在 servlet ...

    java简单抓取网页内容

    确保在尝试获取网页内容时加入适当的异常处理代码。 4. **异步与多线程**: 对于大量网页抓取,考虑使用异步或多线程以提高效率。Java的`CompletableFuture`或`ExecutorService`可以帮助实现这一点。 5. **尊重...

Global site tag (gtag.js) - Google Analytics