© 版权声明:本文为博主原创文章,转载请注明出处前端
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面试技巧 : 百度高级前端工程师亲授,结合真实面试题,提升面试成功概率