简单java采集程序一
【目标任务】通过该网站采集全国的手机号码段至数据库表中
【完成过程】
1、初涉正则表达式,学会写简单的正则表达式
2、获取单个网页内容,学会java中基本的IO流
3、将获取数据插入mysql数据库表中,掌握基本的JDBC编程。
5、通过url拼接获取每一个城市的完整url
6、采集整个网站的号码段,并使用批处理+预编译批量插入数据库表中
7、使用StringBuilder进行优化提速
【数据库表】注意如果是在cmd命令下建表的话,字段名称不需要加引号
- create table number_segment (
- `id` bigint not null auto_increment unique,
- `segment` char(7) not null primary key,
- `province` varchar(255) not null,
- `city` varchar(255) not null
- ) default charset=utf8;
【初涉正则表达式】
1、学习简单的表达式:正则表达式30分入门。
2、在线测试自己写的表达式:在线测试正则表达式1
3、使用java的Pattern类 和 Matcher类
- import java.util.regex.Matcher;
- import java.util.regex.Pattern;
- public class test_ZhengZe{
- public static void main(String[] args)
- {
- Pattern p = Pattern.compile("(13\\d{5}[^<])");
- String s ="/mobile/guangzhou_1300040.>1300040</a></li><li><a href=\"../../mobile/guangzhou_1300041.html\">1300041</a></li><li><a ";
- Matcher m = p.matcher(s);
- while(m.find())
- {
- System.out.println("打印出的号码段落:"+m.group(0));
- }
- System.out.print("捕获的数据有:"+m.groupCount());
- }
- }
【获取网页内容】
这里主要用到 InputStream BufferReader两个IO流处理类。更多的方法讲解见【java获得采集网页内容的方法小结】
- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import java.net.URL;
- import java.util.regex.Matcher;
- import java.util.regex.Pattern;
- public class getHtml {
- public static void main(String[] args) throws Exception {
- long start= System.currentTimeMillis();
- String str_url="http://www.hiphop8.com/city/guangdong/guangzhou.php";
- //匹配号码段
- Pattern p = Pattern.compile(">(13\\d{5}|15\\d{5}|18\\d{5}|147\\d{4})<");
- String html = get_Html(str_url);
- Matcher m = p.matcher(html);
- int num = 0;
- while(m.find())
- {
- System.out.println("打印出的号码段落:"+m.group(1)+" 编号"+(++num));
- }
- System.out.println(num);
- long end = System.currentTimeMillis();
- System.out.println("花费的时间"+(end-start)+"毫秒");
- }
- public static String get_Html(String str_url) throws IOException{
- URL url = new URL(str_url);
- String content="";
- StringBuffer page = new StringBuffer();
- try {
- BufferedReader in = new BufferedReader(new InputStreamReader(url
- .openStream()));
- while((content = in.readLine()) != null){
- page.append(content);
- }
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- return page.toString();
- }
- }
【将采集内容插入数据库】
java连接mysql数据库的大概操作是:
加载mysql驱动---》创意一个数据库连接---》创建一个sql语句执行对象statement---》定义String类型的SQL语句,statment调用SQL语句的执行方法---》关闭statment对象和数据库。
- import java.sql.DriverManager;
- import java.sql.SQLException;
- import java.sql.Statement;
- public class database {
- public static String driver ="com.mysql.jdbc.Driver";
- public static String url ="jdbc:mysql://127.0.0.1:3306/tele_dat?autoReconnect=true&characterEncoding=UTF-8";
- public static String user ="root";
- public static String password = "123456";
- public static Statement statement = null;
- public static java.sql.Connection conn = null;
- public static int i=0;
- //创建一个插入数据的方法
- public static void datatoMySql(String sql) throws SQLException {
- try {
- Class.forName(driver);
- } catch (ClassNotFoundException e) {
- System.out.println("加载驱动失败");
- e.printStackTrace();
- }
- conn = DriverManager.getConnection(url, user, password); //创建一个连接
- statement = conn.createStatement(); //创建一个Statemnet对象来传送SQL语句
- statement.executeUpdate(sql);
- }
- public static void close() throws SQLException{
- statement.close(); //关闭数据库操作对象
- conn.close(); //关闭数据库连接
- }
- //测试连接数据库例子
- public static void main(String args[])
- {
- String sql = "insert into number_segment(segment,province,city) " +
- "values (123458,'广东1','广州') ";
- try {
- datatoMySql(sql);
- System.out.println("插入成功");
- } catch (SQLException e) {
- System.out.println("插入失败");
- e.printStackTrace();
- }
- try {
- close();
- System.out.print("关闭数据库");
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- }
我用的是wampsever中集成的mysql数据库,并在cmd下进行操作,常用命令见:mysql常用的命令见,如果对jdbc编程不熟,可以参考这篇博文。
【获取整个网站中所以城市的URL】
通过查看网站首页的源代码,发现可以从这里获取每一个省份的URL,然后观察一个省份的页面,可以获取该省城市url的部分后缀,由此可以拼接就得到一个完整城市的url.
- mport java.io.BufferedReader;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import java.net.URL;
- import java.util.ArrayList;
- import java.util.regex.Matcher;
- import java.util.regex.Pattern;
- public class get_all_city_url {
- public static void main(String[] args) throws Exception {
- String home_url = "http://www.hiphop8.com";
- String pattern_pro ="\\w{3}\\.\\w{7}\\.\\w{3}\\/\\w{4}\\/\\w+"; //匹配省份的URL
- String pattern_city_hz="<LI><A href=\"(.*?)\" target=_blank>"; //城市后缀
- Matcher mat_home = get(home_url,pattern_pro);
- int i = 0;
- //可以用ArrayList保存所有url,另外可以用StringBuilder对字符串进行相加,不过测试耗时差不多
- long start = System.currentTimeMillis();
- while(mat_home.find())
- {
- String city_url_qz = "http://"+mat_home.group()+"/";
- Matcher mat_city_hz = get(city_url_qz,pattern_city_hz);
- while(mat_city_hz.find())
- {
- i++;
- String city_url = city_url_qz + mat_city_hz.group(1);
- System.out.println(i+" "+city_url);
- }
- }
- long end = System.currentTimeMillis();
- long time =end - start;
- System.out.println("总共用时"+time);
- }
- public static Matcher get(String str, String pa) throws Exception {
- String urlsource =get_Html(str);
- Pattern p = Pattern.compile(pa);
- Matcher m = p.matcher(urlsource);
- return m;
- }
- public static String get_Html(String str_url) throws IOException{
- URL url = new URL(str_url);
- String content="";
- StringBuffer page = new StringBuffer();
- try {
- BufferedReader in = new BufferedReader(new InputStreamReader(url
- .openStream()));
- while((content = in.readLine()) != null){
- page.append(content);
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- return page.toString();
- }
- }
有了上面的基础,就可以做整个网站的号码段采集了,不过后面因为插入数据表中的数据是20多万,所以更多的是要考虑效率问题了,后面的部分见简单的java采集程序二。
另外网上有不少的java采集教程,有些写的很棒,自己深知java打的太少了,写这篇博文一是为了总结,留个纪念,二是希望能给和我一个的初学者一些帮助,和大家一起交流探讨,当然如果文章有写的不对的地方,还希望大神指出。
简单java采集程序一的更多相关文章
- 简单的java采集程序二
继[简单的java采集程序],这里将完成对整个网站的号码段的采集任务. [使用预编译+批处理采集网页内容至数据库表中] 在之前我们用statement类来创建sql语句的执行对象,以 ...
- 输出多行字符的一个简单JAVA小程序
public class JAVA { public static void main(String[] args) { System.out.println("-------------- ...
- 第一章 开发简单Java应用程序
1. 什么是程序? 程序一词来自生活,通常指完成某些事务的一种既定方式和过程(一组有序指令的集合). 2. Java的三个领域? Java SE:java技术核心(指桌面应用程序)如:QQ.百 ...
- 大数据学习——JAVA采集程序
1 需求 从外部购买数据,数据提供方会实时将数据推送到6台FTP服务器上,我方部署6台接口采集机来对接采集数据,并上传到HDFS中 提供商在FTP上生成数据的规则是以小时为单位建立文件夹(2016-0 ...
- 在 NetBeans IDE 6.0 中分析 Java 应用程序性能
NetBeans IDE 6.0 包含一个强大的性能分析工具,可提供与应用程序运行时行为有关的重要信息.通过 NetBeans 性能分析工具,我们可以方便地在 IDE 中监控应用程序的线程状态.CPU ...
- 简单java在线测评程序
简单java程序在线测评程序 一.前言 大家过年好!今年的第一篇博客啊!家里没有网,到处蹭无线!日子过得真纠结!因为毕设的需求,简单写了一个java程序在线测评程序,当然也可以在本地测试. 二.思路 ...
- 《java小应用程序(Applet)和java应用程序(Application)分别编写的简单计算器》
Application和Java Applet的区别.Java语言是一种半编译半解释的语言.Java的用户程序分为两类:Java Application和Java Applet.这两类程序在组成结构和 ...
- 3.1 一个简单的Java应用程序
如下一个最简单的应用程序,它将只发送一条消息到控制台窗口中: package myjavapp; public class FirstSample { public stati ...
- Java 实现《编译原理》简单词法分析功能 - 程序解析
Java 实现<编译原理>简单词法分析功能 - 程序解析 简易词法分析功能 要求及功能 (1)读取一个 txt 程序文件(最后的 # 作为结束标志,不可省去) { int a, b; a ...
随机推荐
- 课时70.id选择器和类选择器(理解)
1.id和class的区别? id相当于人的身份证不可以重复 class相当于人的名称可以重复 1.2 一个HTML标签只能绑定一个id名称 一个HTML标签可以绑定多个class名称 2.id选择器 ...
- Spring Boot应用的测试——Mockito
Spring Boot应用的测试——Mockito Spring Boot可以和大部分流行的测试框架协同工作:通过Spring JUnit创建单元测试:生成测试数据初始化数据库用于测试:Spring ...
- 两台电脑在不同情况下ping的情况
两台计算机(交叉连接) 同一网段 ,可以ping通.不同网段,不可以 两台计算机通过一台交换机连接 同一网段 ,可以ping通.不同网段,不可以.同一网段,同一Vlan,不可以. 综上:跨网段通信,必 ...
- toad安装错误—Failed to Download products and updates
近日,在公司云电脑上安装Toad for oracle,安装到中途总会出现如下错误,个人认为是Toad安装时需要下载/更新一些组件,公司网络对下载有所限制,导致报错,无法进行后续安装. 图1.Toad ...
- iOS之UIKeyboardType 11种键盘图片展示
UIKeyboardTypeDefault UIKeyboardTypeASCIICapable == UIKeyboardTypeAlphabet UIKeyboardTyp ...
- Vue组件:组件的动态添加与删除
一.实现效果 二.实现代码 HelloWorld.vue <template> <div class="hello"> <child-page v-f ...
- 浅谈localStorage的用法
今天接到一个任务,说是让自动调节textarea标记的输入高度,而且还要记录下来,下次登录的时候还是调节后的高度,我第一时间就想到了localStorage的用法,直接代码献上: <html l ...
- django环境搭建和学习
由于服务器down了好几天,前几天做的django的project全都在上面,无法继续开展工作,所以决定在本地重新部署一套virtualenv 之前没有好好整理过部署过程(其实也不难),所以决定写个随 ...
- mysql数据库的基本使用命令总结
mysql数据库是一个常用的关系型数据库 关系型数据库核心元素有哪些? 主键:特殊字段,用来唯一标识记录的唯一性 字段:数据列 记录:数据行 数据表:数据行的集合 数据库:数据表的集合 安装.启动.停 ...
- Solr简单总结
Solr 运行Solr服务 方式一:Jetty服务器启动Solr 进入solr-4.10.2/example目录 打开命令行,执行java –jar start.jar命令,即可启动Solr服务 打开 ...