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);
//<!DOCTYPE html>
//<!--STATUS OK--><html> <head><meta http-equiv=content-type content=text/html;charset=utf-8>。。。。这里就全部复制了
}
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
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();
//分析数据
//清洗数据
//存储数据
//这里只谈爬虫基本原理,所以暂时不涉及后续内容
}
}
这一就成功骗过去了,爬取成功!