zoukankan      html  css  js  c++  java
  • java网络爬虫----------简单抓取慕课网首页数据

    © 版权声明:本文为博主原创文章,转载请注明出处

    一、分析

      1.目标:抓取慕课网首页推荐课程的名称和描述信息

      2.分析:浏览器F12分析得到,推荐课程的名称都放在class="course-card-name"的h3标签里,描述信息都放在h3标签下面的p标签中。因此只需要获取到这两个标签中的内容即可

     二、实例

    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.java

    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.效果预览

    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面试技巧 : 百度高级前端工程师亲授,结合真实面试题,提高面试成功几率
    
  • 相关阅读:
    ETL的两种架构(ETL架构和ELT架构)
    SQL 优化通用方法
    数据建模
    Python Pandas Merge, join and concatenate
    Python Pandas -- Panel
    win-msys2安装使用配置
    BeyondCompare4过期解决办法
    Git本地仓库推送到别的仓库
    IDEA调试可执行JAR包
    Oracle常见问题排查
  • 原文地址:https://www.cnblogs.com/jinjiyese153/p/7146248.html
Copyright © 2011-2022 走看看