网络编程之如何通过URL获取网页代码

java.net
类 URL

java.lang.Object
  继承者 java.net.URL
所有已实现的接口:
Serializable

public final class URL
   
   
    
    extends 
    
    Object
   
   
   
   
    
    implements 
    
    Serializable
   
   
 

URL 代表一个统一资源定位符,它是指向互联网“资源”的指针。资源可以是简单的文件或目录,也可以是对更为复杂的对象的引用,例如对数据库或搜索引擎的查询。有关 URL 的类型和格式的更多信息,可从以下位置找到:

http://www.socs.uts.edu.au/MosaicDocs-old/url-primer.html

通常,URL 可分成几个部分。上面的 URL 示例指示使用的协议为 http (超文本传输协议)并且该信息驻留在一台名为 www.socs.uts.edu.au 的主机上。主机上的信息名称为 /MosaicDocs-old/url-primer.html。主机上此名称的准确含义取决于协议和主机。该信息一般存储在文件中,但可以随时生成。该 URL 的这一部分称为路径 部分。

URL 可选择指定一个“端口”,它是用于建立到远程主机 TCP 连接的端口号。如果未指定该端口号,则使用协议默认的端口。例如,http 协议的默认端口为 80。还可以指定一个备用端口,如下所示:

     http://www.socs.uts.edu.au:80/MosaicDocs-old/url-primer.html
 

URL 的语法由此文档定义:RFC 2396:Uniform Resource Identifiers (URI):Generic Syntax;在此文件中对其内容又进行了修正:RFC 2732:Format for Literal IPv6 Addresses in URLs。字面值 IPv6 地址格式还支持 scope_id。scope_id 的语法和用法在此处进行了描述。

URL 后面可能还跟有一个“片段”,也称为“引用”。该片段由井字符 "#" 指示,后面跟有更多的字符。例如,

     http://java.sun.com/index.html#chapter1
 

从技术角度来讲,URL 并不需要包含此片段。但是,使用此片段的目的在于表明,在获取到指定的资源后,应用程序需要使用文档中附加有 chapter1 标记的部分。标记的含义特定于资源。

应用程序也可以指定一个“相对 URL”,它只包含到达相对于另一个 URL 的资源的足够信息。HTML 页面中经常使用相对 URL。例如,假设 URL 的内容是:

     http://java.sun.com/index.html
 
其中包含的相对 URL:
     FAQ.html
 
为以下形式的缩写:
     http://java.sun.com/FAQ.html
 

相对 URL 不需要指定 URL 的所有组成部分。如果缺少协议、主机名称或端口号,这些值将从完整指定的 URL 中继承。但是,必须指定文件部分。可选的片段部分不继承。

URL 类自身并不根据 RFC2396 中定义的转义机制编码或解码任何 URL 部分。由调用方对任何需要在调用 URL 前进行转义的字段进行编码,并对从 URL 返回的任何经过转义的字段进行解码。进一步而言,由于 URL 不懂 URL 转义,所以它不会识别同一 URL 的对等编码和解码形式。例如,对于这两个 URL:

    http://foo.com/hello world/ 和 http://foo.com/hello%20world
将被视为互不相等。

注意,URI 类在某些特定情况下对其组成字段执行转义。建议使用 URI 管理 URL 的编码和解码,并使用 toURI() URI.toURL() 实现这两个类之间的转换。

也可以使用 URLEncoderURLDecoder 类,但是只适用于 HTML 形式的编码,它与 RFC2396 中定义的编码机制不同。


构造方法摘要
URL(String spec)
          根据 String 表示形式创建 URL 对象。
URL(String protocol, String host, int port, String file)
          根据指定 protocolhostport 号和 file 创建 URL 对象。
URL(String protocol, String host, int port, String file, URLStreamHandler handler)
          根据指定的 protocolhostport 号、filehandler 创建 URL 对象。
URL(String protocol, String host, String file)
          根据指定的 protocol 名称、host 名称和 file 名称创建 URL。
URL(URL context, String spec)
          通过在指定的上下文中对给定的 spec 进行解析创建 URL。
URL(URL context, String spec, URLStreamHandler handler)
          通过在指定的上下文中用指定的处理程序对给定的 spec 进行解析来创建 URL。
爬出网站中的html代码:

package netCode;

import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
//http://localhost:8080/wps/wechat/page/wechat.html
//http://v.huya.com/play/28409933.html?hyaction=recordedvideo&vid=28409933&cid=001
//http://study.163.com/course/courseLearn.htm?courseId=1003108028#/learn/video?lessonId=1003531336&courseId=1003108028
public class URLDemoClient {
	public static void main(String[] args) throws IOException {
		//1、获取URL对象
		URL url = new URL("http", "v.huya.com", 80,
				"/course/courseLearn.htm?courseId=1003108028#/learn/video?lessonId=1003531336&courseId=1003108028");
		//2、建立连接,获取连接对象
		URLConnection connection = url.openConnection();
		//3、通过连接对象获取输入流对象
		InputStream in = connection.getInputStream();
		//4、获取扫描器对象
		Scanner sc = new Scanner(in);
		System.out.println("-----------start----------------");
		//5、输出内容
		while (sc.hasNext()) {
			String str = sc.nextLine();
			List<CharSequence> list = new ArrayList<>();
			CharSequence s = ".png";
			CharSequence s1 = ".img";
			CharSequence s2 = ".jpg";
			CharSequence s3 = ".mp4";
			CharSequence s4 = ".avi";
			CharSequence s5 = ".gif";
			list.add(s);
			list.add(s1);
			list.add(s2);
			list.add(s3);
			list.add(s4);
			list.add(s5);
			list.add(".wmv");
			list.add(".mpeg");
			list.add(".mov");
			list.add(".wmv");
			list.add(".mkv");
			list.add(".wmv");
			list.add(".flv");
			list.add(".wmv");
			list.add(".f4v");
			list.add(".m4v");
			list.add(".rm");
			list.add(".rmvb");
			list.add(".3gp");
			list.add(".dat");
			list.add(".ts");
			list.add(".mts");
			list.add(".vob");
			list.add(".php");
			list.add("video");
			list.add("&");
			for (CharSequence charSequence : list) {
				if (str.contains(charSequence)) {
					String line = new String(str.getBytes(), "UTF-8");
					System.out.println(line);
				}
			}
		}
		System.out.println("-------------end--------------");
		in.close();
	}
}




  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值