java網絡爬蟲----------簡單抓取慕課網首頁數據

© 版權聲明:本文爲博主原創文章,轉載請註明出處前端

1、分析java

  1.目標:抓取慕課網首頁推薦課程的名稱和描述信息python

  2.分析:瀏覽器F12分析獲得,推薦課程的名稱都放在class="course-card-name"的h3標籤裏,描述信息都放在h3標籤下面的p標籤中。所以只須要獲取到這兩個標籤中的內容便可程序員

 2、實例web

1. 項目結構面試

2.pom.xml正則表達式

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 
	<modelVersion>4.0.0</modelVersion>

	<groupId>org.swing</groupId>
	<artifactId>Spider01</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	</properties>

	<dependencies>
		<!-- junit -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.12</version>
			<scope>test</scope>
		</dependency>
	</dependencies>
	
</project>

3.Spider_Imooc.javasql

package org.spider.demo;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 網絡爬蟲獲取慕課網相關信息
 *
 */
public class Spider_Imooc {
	
	/**
	 * 鏈接到慕課網
	 * 
	 * @param url
	 * 				慕課網url
	 * @return
	 */
	private String connect(String address) {
		
		HttpURLConnection conn = null;
		URL url = null;
		InputStream is = null;
		InputStreamReader isr = null;
		BufferedReader br = null;
		StringBuffer sb = null;
		
		try {
			url = new URL(address);// 將字符串轉換爲url
			conn = (HttpURLConnection) url.openConnection();// 打開鏈接
			conn.setConnectTimeout(5000);// 設置鏈接主機的超時時間:5s
			conn.setReadTimeout(5000);// 設置從主機讀取數據的超時時間:5s
			conn.setDoInput(true);// 設置是否向HttpURLConnection讀入,默認是true
			conn.connect();// 鏈接
			is = conn.getInputStream();// 獲取服務器返回的輸入流
			// 將輸入流解析爲字符串並返回
			isr = new InputStreamReader(is);
			br = new BufferedReader(isr);
			sb = new StringBuffer();
			String line = null;
			while((line = br.readLine()) != null) {
				sb.append(line);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				if (br != null) {
					br.close();
				}
				if (isr != null) {
					isr.close();
				}
				if (is != null) {
					is.close();
				}
				if (conn != null) {
					conn.disconnect();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return sb.toString();
		
	}
	
	/**
	 * 解析數據,獲取課程名及描述
	 * 
	 * @param data
	 * 				慕課網首先數據
	 * @return
	 */
	private Map<String, String> analyData(String data) {
		
		Map<String, String> map = new HashMap<String, String>();
		Pattern courseRule = Pattern.compile("<h3 class='course-card-name'>(.+?)</p>");// 建立正則表達式
		Matcher courseMatch = courseRule.matcher(data);// 匹配正則表達式
		while (courseMatch.find()) {// 循環匹配結果
			String courseInfo = courseMatch.group();
			String title = "";
			String desc = "";
			
			Pattern courseNameRule = Pattern.compile(">(.+?)<");
			Matcher courseNameMatch = courseNameRule.matcher(courseInfo);
			if (courseNameMatch.find()) {
				title = courseNameMatch.group();
				title = title.substring(1, title.length() - 1);
			}
		    
			Pattern courseDescRule = Pattern.compile("title='(.+?)'");
			Matcher courseDescMatch = courseDescRule.matcher(courseInfo);
			if (courseDescMatch.find()) {
				desc = courseDescMatch.group();
				desc = desc.substring(7, desc.length() - 1);
			}
			
			map.put(title, desc);
		}
		return map;
		
	}
	
	public static void main(String[] args) {
		
		Spider_Imooc si = new Spider_Imooc();
		String code = si.connect("http://www.imooc.com");
		Map<String, String> map = si.analyData(code);
		
		for(String key: map.keySet()) {
			System.out.println(key + " : " + map.get(key));
		}
		
	}
	
}

4.效果預覽shell

Android網絡框架-OkHttp使用 : 本視頻教程主要講解Android SDK 6.0以後網絡請求框架,趕快學起來吧
python-web.py開發入門 : web.py開發入門入門教程,講解一個你最快能學會的web開發的框架
PHP中的HTTP協議 : PHP視頻教程從PHP的角度深度解析HTTP協議知識,例如post、和get請求
Linux Bind負載均衡 : DNS轉發、主從模式及傳輸限制,經過本課瞭解更多DNS知識
Linux系統掃描技術及安全防範 : Linux系統下系統掃描及安全防範,規避一些安全的隱患
大型PHP電商網站商品秒殺功能實現思路分析 : 本課程屬於PHP高級教程,聚集前沿技術,實現商品秒殺,小白慎入		
經常使用的網頁加載進度條 : 經過課程,讓你學習到網頁中常見的進度加載的實現方式.
JAVA生成二維碼 : 二維碼無處不在,本身動手用Java生成二維碼,三種生成方式任你選
ReactNative基礎與入門 : 敲開React Native的大門,掌握將來趨勢新技術
Python分佈式爬蟲打造搜索引擎 Scrapy精講 : 完全掌握Scrapy原理,Django+Elasticsearch搭建搜索引擎
輕鬆愉快之玩轉SpringData : 利用Spring Data提升開發效率,提高程序員的幸福指數
Laravel 5.4 快速開發簡書 : Laravel最新特性結合Mysql異步消息隊列、ElasticSearch搜索引擎、Debugbar調試利器開發簡書
Shell典型應用之應用日誌分析 : 如何應用shell腳本分析系統日誌,這門視頻教程會給你答案
Java Spring技術棧構建完整先後臺團購網站  : 完整的先後臺團購網站,提高實戰技能與高效編程技巧
微信小程序商城構建全棧應用 : 先後端分離+RESTFul API標準接口+微信支付,手把手帶你打通全棧!
iOS基礎之UIImageView知識拓展(上) : 掌握iOS圖像處理之UIImage展現,瞭解UIImageView更多的用途
Android經常使用異常集及解決方案 : 介紹Android經常使用異常集及經常使用的幾種解決方案
Angular2一小時快速入門 : Angular2一小時快速入門教程,幫助你們快速上手Angular2開發
Python開發簡單爬蟲 : 本教程帶您解開python爬蟲這門神奇技術的面紗
帶你實現別樣的Android側滑菜單 : 學會熟練使用側滑菜單之DrawerL,介紹經常使用菜單開源庫SlidingMenu
BAT大咖助力 全面升級Android面試 : 2017最全面的Android面試課程,贏取趁心offer的不二之選
iOS架構初探 : iOS視頻教程教你輕鬆搞定各類架構設計模式的學習,如MVC、MVVM等
基礎線性和剪影化icon的製做方法 : 剛接觸UI的小夥伴們從哪裏做爲切入點?UI設計icon製做必備技能
PHP消息隊列實現及應用 : 消息隊列是個什麼玩意兒,使用隊列解決秒殺等實際問題概念和使用方法
自動化測試之selenium工具使用 : web自動化測試selenium從0基礎開始。
去哪兒前端沙龍分享第三期 : 本課程爲去哪兒網前端交互沙龍第三期,精彩分享不容錯過噢
django入門與實踐 : 手把手帶你進入Django開發的大門,充分領略Django的魅力
Java SSM開發大衆點評後端 : SSM全面梳理,先後端分離,zTree和複雜SQL打造權限系統,解惑MyBatis和RESTful
不同的自定義實現輪播圖效果 : Android開發自定義實現輪播圖效果案例實現,從無到有讓你會懂會用
從零開始打造本身的PHP框架 : 和我一塊兒開發一套屬於本身的PHP框架,本身開發的纔是最好用的
Web安全-XSS : 從Web安全XSS的定義開始講起,從原理到實戰全方位理解XSS安全
Linux軟件安裝管理 : 經過本課程瞭解Linux中的軟件如何進行安裝、卸載、升級等管理
Java模板引擎之Freemarker : 學習Java模板引擎中Freemarker技術,web開發人員必要掌握的技術之一
jQuery基礎(四)—動畫篇 : jQuery基礎教程動畫篇,講解jQuery基礎開啓動畫修煉
PHP+AJAX實現表格實時編輯 : PHP和AJAX實現表格動態實時編輯案例,輕鬆實現最好的用戶體驗
玩兒轉Swift 2.0(第四季) : Swift泛型、擴展、面向協議編程等,你們真正玩兒轉swift
iOS快速構建IM功能 : 本視頻教程將告訴你們在iOS開發中如何快速構建一個IM功能
淺談搜索引擎_SEO : 如何使用SEO讓你們能更好的搜索到你的網站。
前端JavaScript面試技巧 : 百度高級前端工程師親授,結合真實面試題,提升面試成功概率
相關文章
相關標籤/搜索