HTTP协议

HTTP:

目前使用最广泛的Web应用程序使用的基础协议。
  通过HTTP协议(超文本传输协议,是基于TCP协议之上的一种请求-响应协议)实现的。

当浏览器希望访问某个网站的时候,浏览器和网站服务器之间首先建立TCP连接。 然后,浏览器向服务器发送一个HTTP请求,服务器收到后,返回一个HTTP响应,并且在响应中包含了一个HTML的网页内容。这样,浏览器解析HTML后就可以给用户显示网页。一个完整的HTTP请求-响应如下:

java 分词 爬虫 java爬虫解析_爬虫

**对图中的说明:**
   第一行:请求方法    路径    HTTP版本
   Host:表示请求的域名
   User-Agent:表示客户端自身表示信息,服务器通过User-Agent判断客户端类型是IE还是Chrome、Firefox、还是一个Python爬虫。
   Accept:表示客户端能处理HTTP响应格式。*/*任意格式
   Accept-Language:表示客户端接受的语言。

HTTP请求的格式是固定的,它由HTTP Header和HTTP Body两部分构成。GET / HTTP /1.1 表示使用GET请求,路径是/ ,版本是HTTP/1.1.后续的每一行都是固定的Header:value格式,我们称为HTTP Header, 服务器通过某些特定的Header来识别客户端的请求。

GET请求: 表示HTTP请求只有HTTP Header,没有HTTP Body。
POST请求:都有。(通常是要设置Content-Type表示Body的类型,Content-Length表示Body的长度,这样服务器就可以根据请求的Header和Body做出正确地响应。)

代码实现:

以在网页端下载所有照片为例:
//获取地址(统一资源定位符)
			URL douban = new URL("https://www.douban.com/");
			
//			//打开连接
			HttpURLConnection connection = (HttpURLConnection)douban.openConnection();
			
			//设置请求方式
			connection.setRequestMethod("GET");
			
			//请求设置Header属性
			connection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36 SLBrowser/7.0.0.12151 SLBChan/8");
			
			//
			try {
				BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(),StandardCharsets.UTF_8));
				String line = null;
				while((line = reader.readLine())!=null) {
					//去除空格
					line = line.trim();
					
					//判断当前行是否包含路径
					if(line.startsWith("<img")&&line.contains("https://img")&& line.contains(".jpg")) {
						System.out.println(line);
						
						//使用jsoup解析html
						//JSOUP类的作用进行原始解析
						//Document类:网页文档(包含解析到的所有标签)
						//Element类:若干元素Element形成的集合(继承自ArrayList)
						//Element类:某一个html元素
						
						//提取图片的路径src 电影名称alt
						String src = "" ,alt ="";
						
						//解析生成Document对象
						Document doc= Jsoup.parse(line);
						//从Document中获取名称为img的所有标签元素(Elements)
						//从所有代表img的Elements元素集合中获取第一个
						Element imgElement = doc.getElementsByTag("img").first();
						
						//虎丘img标签元素src属性和alt属性
						src = imgElement.attr("src");
						alt = imgElement.attr("alt");
						//读取图片
//						URL image = new URL(src);
//						HttpURLConnection connection = (HttpURLConnection)douban.openConnection();
						BufferedInputStream bis = new BufferedInputStream(connection.getInputStream());
						BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("E:\\img\\,,"+alt+".jpg"));
						
						byte[] buff = new byte[1024];
						int len = -1;
						while((len = bis.read(buff))!=-1) {
							bos.write(buff, 0, len);
						}
					}
							
				}