Java网络编程(二):基本概念

Java网络编程(二):基本概念

@author:超爱学习的可琛同学
对于本章博客你将学习:

  • 补充Java网络编程(一)的剩余内容

1.补充Java网络编程(一)的剩余内容
1.1 URI 、URL 、URN

  • URI:有两种形式,一种是URL,一种是URN
  • URI:Universal Resource Identifier 统一资源标志符,用来标识抽象或物理资源的一个紧凑字符串
  • URL:Universal Resource Locator 统一资源定位符,一种特定资源的主要访问机制的字符串,一个标准的URL必须包括:protocol、host、port、parameter、anchor。
  • URN:Universal Resource Name 统一资源名称,通过特定命令空间中唯一名称或ID来表示资源。

例如:http://www.baidu.com:80/index.html?uname=kc&age=20#a
这就是一个典型的URL:

protocol(协议) http协议
host(主机) 80
port(端口) www
parameter(资源文件) index.html
anchor(锚) arg1=1&arg2=abc

网络三大基石:HTML、HTTP、URL

package edu.hue.jk;

import java.net.InetSocketAddress;
/**
 * 1.端口:区分软件
 * 2.同一协议端口不能冲突
 * 3.定义端口越大越好
 * @author 超爱学习的可琛同学
 *
 */
public class PortTest {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根

		InetSocketAddress socketAddress = new InetSocketAddress("127.0.0.1", 8888);
		InetSocketAddress socketAddress2 = new InetSocketAddress("localhost", 9999);
		System.out.println(socketAddress.getHostName());//127.0.0.1
		System.out.println(socketAddress2.getHostName());//localhost
		System.out.println(socketAddress.getAddress());//127.0.0.1/127.0.0.1
		System.out.println(socketAddress2.getAddress());//localhost/127.0.0.1
		System.out.println(socketAddress.getPort());
		System.out.println(socketAddress2.getPort());
	}

}

1.2网络爬虫: 了解原理

网络爬虫基本过程:
    1.得到URL
    2.下载资源
    3.分析资源(正则表达式)
    4.数据抽取、数据清洗、数据存储

API :方法 功能
InetAddress 封装计算机的IP地址和DNS(没有端口信息),常用方法:getLocalHost()、getByname()、getAllByname()、getAddress()、getHostName
InetSocketAddress 包含IP和端口信息,常用于Socket通信。此类实现IP套接字地址(IP地址+端口号),不依赖任何协议。常用方法:getHostName()、getAddress()
URL 类URL代表一个统一资源定位符,他是指向互联网"资源"的指针。资源可以是简单的文件或目录,也可以是对更为复杂的对象的引用,一如对数据库或搜索 引擎的查询。常用方法:getDefaultPort()、getFile()、getHost()、getPath()、getPort()、getProtocol()、getQuery()、getRef()
package edu.hue.jk;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
/**
 *  有权直接获取URL的网站,可以这么直接下载其中内容
 *  注意:不是所有网站都能够这样:例如http://www.dianping.com就不可以:返回异常Server returned HTTP response code: 403 for URL: http://www.dianping.com
 *后面一个demo将实现无权访问的网页如何爬
 * @author 超爱学习的可琛同学. QQ1126140903
 *
 */
public class SpiderTest02 {

	public static void main(String[] args) throws Exception {
		//获取URL
		URL url = new URL("http://www.baidu.com");
		//下载URL
		InputStream is = url.openStream();
		BufferedReader br = new BufferedReader(new InputStreamReader(is,"UTF-8"));
		String mString = null;
		while(null!=(mString = br.readLine())) {
			System.out.println(mString);
			//
			// 。。。。这里就全部复制了
		}
		br.close();
		//分析数据
		//清洗数据
		//存储数据
		//这里只谈爬虫基本原理,所以暂时不涉及后续内容
		
	}

}

需要爬像点评网这样有权限的,我们只需要骗过其服务器,把我们当浏览器即可获取
    首先你需要如图通过浏览器进入URL,快捷键F12:复制箭头所指:
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/17.17134
Java网络编程(二):基本概念_第1张图片

package edu.hue.jk;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
/**
 * 不是所有网站都能像淘宝那样直接抓取,比如点评网就不可以返回403错误
 * 原则上只要是能够通过url访问的网站,都是能够下载下来的,只不过需要一点小小的转换:把自己当一台浏览器来骗过服务器
 * 首先需要通过浏览器进入url获取user-agent
 * @author 超爱学习的可琛同学 .QQ1126140903
 *
 */
public class SpiderTest01 {

	public static void main(String[] args) throws Exception {
		//获取URL
		URL url = new URL("https://www.dianping.com");
		//下载URL
		HttpURLConnection conn = (HttpURLConnection)url.openConnection();
		conn.setRequestMethod("GET");
		//这里就是我们通过浏览器复制的内容
		conn.setRequestProperty("User-Agent"," Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/17.17134");
		BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(),"UTF-8"));
		String mString = null;
		while(null!=(mString = br.readLine())) {
			System.out.println(mString);
		}
		br.close();
		//分析数据
		//清洗数据
		//存储数据
		//这里只谈爬虫基本原理,所以暂时不涉及后续内容
		
	}

}

这一就成功骗过去了,爬取成功!
Java网络编程(二):基本概念_第2张图片

你可能感兴趣的:(个人QQ1126140903)