这里详细讲一下将解析好的所有房源数据存入云端数据库的表中:
1、首先是获得数据库连接,Java提供了数据库链接的接口,但实现是由各个数据库提供者自己实现的,这里需要mysql提供的第三方包:mysql-connector-java-8.0.13.jar
、、新建一个类用于封装数据库处理的方法:

//封装数据库相关操作
public class OperationOfMySQL {//只创建一次链接Connection con;Statement state;public OperationOfMySQL() {super();this.con = connectionToDatabase();try {//state用于传入sql语句对数据库进行操作this.state = con.createStatement();} catch (Exception e) {System.out.println("链接失败!");}}

如上面的代码,创建对象时就创建连接:
connectionToDatabase()方法返回获得的数据库链接:

//返回数据库链接的方法private static Connection connectionToDatabase() {Connection con = null;//创建驱动对象try {Driver driver = new Driver();String url = cloud;Properties info = new Properties();//准备数据库链接信息info.put("user", "rds_repl");info.put("password", "123456");//获取数据库链接con = driver.connect(url, info);}catch (SQLException e) {System.out.println("链接数据库失败!");return null;}System.out.println(con+"\n链接创建成功!");return con;}//cloud是加载云端驱动的数据库,格式为://String cloud = "jdbc:mysql://服务器地址:端口号/数据库名?severTimzone=UTC";

、、关于云端数据库的地址和端口号这里就不贴出来了(云端和本地的数据库链接其实方法一样),值得注意的是,如果用的是数据库连接池有必要设置一下链接超时,虽然我并没有这样做。。。

PS:还有就是8.0版本加载驱动的类是 com.mysql.cj.jdbc.Driver;多了个“cj”,所以必须设置时区:severTimezone=UTC,5.0版本的不用,不然运行时会报错。(在此只是提醒一下,具体原因就不细说了);

Java是通过state对象传递sql字符串给数据库。由于数据库事先存在,所以需要的是建一张表来存储房屋信息,键表语句为:

//如果数据库中不存在表house1就创建一张
static private String SQLCreateTaleStr = "CREATE TABLE IF NOT EXISTS house1" + "("+ "title varchar(255) ,"+ "area double ,"+ "price varchar(64) ,"+ "unit_price double ,"+ "direction varchar(64),"+ "decoration varchar(64),"+ "houseStyle varchar(64) ,"+ "floor varchar(64),"+ "buildTime int(11) ,"+ "community varchar(64),"+ "location varchar(64) ,"+ "gdpperperson double"+ ")ENGINE = InnoDB DEFAULT CHARSET = utf8;";

然后写一个方法将房屋信息转换成sql插入表的语句:

//用于生成插入语句的方法,传入一个房子和表的名字public String insertStr(SecondHouse house) {String insert = "insert into house1"+ " values('" +house.getElemName()+    "','"+house.getArea()+        "','"+house.getPrice()+       "','"+house.getUnit_price()+  "','"+house.getDirection()+   "','"+house.getDecoration()+  "','"+house.getHouseStyle()+  "','"+house.getFloor()+       "','"+house.getBuildTime()+   "','"+house.getCommunity()+   "','"+house.getLocation()+    "','"+0+                      "');";return insert ;}

PS;注意拼接字符串时的空格和标点,确保sql语句能够执行
然后是执行这写语句的方法:

//传入链接,进行对数据库的操作,传入二手房,写进数据库public void operationOnDtabase(String insertStr) {try {//获取执行sql语句动态创建表,即如果表不存在就创建一个state.execute(SQLCreateTaleStr);//执行插入语句state.executeUpdate(insertStr);
//      System.out.println(insertStr);}catch (SQLException e) {System.out.println("SQL语句执行失败!");}System.out.println("执行语句成功!");}

工具方法都准备好了,需要将其整合:

//传入房屋数组,写入云端数据库,这里的houses数组就是先前存储所有房屋对象的vector集合转换的public static void writeIntoDtabase(SecondHouse[] houses) {OperationOfMySQL op = new OperationOfMySQL();for (int i = 0; i < houses.length; i++) {try {
//              SecondHouse.printHouseInfo(houses[i]);op.operationOnDtabase(op.insertStr(houses[i]));} catch (Exception e) {continue;}}}

最后是main方法里面执行网页解析,多线程调用和写入数据库的所有实现;

//---------------------------main方法代替执行--------------------------------------------------------------------public static void operateMain() {houseSet = new Vector<>();//多线程集合Vector<Thread> threads = new Vector<>();for (int i = 1; i <= 50; i++) {Thread1 td1 = new Thread1(i, houseSet);threads.add(td1);td1.start();}for (int j = 51; j <=100; j++) {Thread2 td2 = new Thread2(j,houseSet);threads.add(td2);td2.start();}//等待所有子线程结束join方法for (Thread thread : threads) {try {thread.join();} catch (InterruptedException e) {System.out.println("执行失败!");}}//去除重复数据Vector<SecondHouse> houses = noneSameVector(houseSet);//写入数据库writeIntoDtabase(houses.toArray(new SecondHouse[houses.size()]));}

额,上面这个方法并不是main方法对吧,因为个爬虫要到导成jar包在一个小服务器上定时运行,所以我在main方法里面调用了这个方法,然后main里面实现定时运行了,这里就不贴出来了。

哦,还有那个去除重复的方法我没贴出来,实际上这个爬虫我解析了多个网站,难免会有相同的房屋信息,所以在这里就除重了,当然,传入sql语句在数据库里面除重更好。

讲一下写这个爬虫的收获:
、、确实感受到了Java语言的魅力所在,虽然并没有写出具有这种魅力的代码,Java无愧为第一语言(不要提PHP)。编程要有耐心,还要有持续学习和不断尝新的思想,开始写这个爬虫之前,对以上写的这些代码我一无所知,觉得都是些很高级的东西。然后,就结合学过的知识和网上了解到的处理方法来一步步实现,写完发现,其实也就那样,自己接触的这些不过是皮毛而已(可能连毛都不算),还需要再接再厉。

PS:这个爬虫有相当多的缺点和需要优化的地方,我没有细查了,不过基本功能可以正常实现,嗯。

Java爬虫:大量抓取二手房信息并存入云端数据库过程详解(三)相关推荐

  1. java爬虫 京东_教您使用java爬虫gecco抓取JD全部商品信息(一)

    #教您使用java爬虫gecco抓取JD全部商品信息(一) ##gecco爬虫 如果对gecco还没有了解可以参看一下gecco的github首页.gecco爬虫十分的简单易用,JD全部商品信息的抓取 ...

  2. 教您使用java爬虫gecco抓取JD全部商品信息(一)

    摘要: 如果对gecco还没有了解可以参看一下gecco的github首页,https://github.com/xtuhcy/gecco.gecco爬虫十分的简单易用,JD全部商品信息的抓取9个类就 ...

  3. Python+Selenium自动搜索基金业协会指定企业名单,抓取指定信息并保存到数据库...

    Python+Selenium自动搜索基金业协会指定企业名单,抓取指定信息并保存到数据库.网址https://gs.amac.org.cn/amac-infodisc/res/pof/manager/ ...

  4. 教您使用java爬虫gecco抓取JD全部商品信息

    转自:http://www.geccocrawler.com/demo-jd/ gecco爬虫 如果对gecco还没有了解可以参看一下gecco的github首页.gecco爬虫十分的简单易用,JD全 ...

  5. java判断或_Java判断用户名和密码是否符合要求过程详解

    这篇文章主要介绍了Java判断用户名和密码过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 假设在某仓库管理系统的登录界面中需要输入用户名和密 ...

  6. Java web 开发的概念、环境配置、创建项目过程详解(Eclipse)

    Java Web 开发 Java Web 开发概念 搭建过程 详解 在eclipse创建Dynamic Web Project 创建时选择Tomcat的版本 创建项目成功 eclipse环境下如何配置 ...

  7. java爬虫异步取数据_教您使用java爬虫gecco抓取JD全部商品信息(三)

    ##详情页抓取 商品的基本信息抓取完成后,就要针对每个商品的详情页进行抓取,可以看到详情页的地址格式一般如下:http://item.jd.com/1861098.html.我们建立商品详情页的Bea ...

  8. Python网络爬虫之抓取订餐信息

    本文以大众点评网为例,获取页面的餐馆信息,以达到练习使用python的目的. 1.抓取大众点评网中关村附近的餐馆有哪些 import urllib.request import redef fetch ...

  9. Scrapy实战案例--抓取股票数据并存入SQL数据库(JS逆向)

    目标网址:http://webapi.cninfo.com.cn/#/marketDataZhishu 之前在这篇文章里面对该网站的JS进行了一个逆向的解析:JS逆向解析案例 接下来我们来创建一个Sc ...

最新文章

  1. iOS 动画之CoreAnimation(CALayer)
  2. 序列处理工具|Seqkit
  3. Python的5种传参姿势,两分钟就能了解
  4. Vijos——T 1082 丛林探险
  5. apache mysql 登陆_Apache站点,注册登陆功能的实现
  6. 如何在Java中检查字符串是否为数字?
  7. Ubuntu设置开机启动
  8. 数据--dp,线段树优化
  9. Spring之IOC快速入门(一)
  10. /etc/resolv.conf
  11. Python实例练手项目源码 - 关不掉的窗口
  12. 一个比较好看的彩带飘飞和点击效果 canvas实现
  13. I2C分析及RX8025驱动编写
  14. kettle-java代码执行转换并获取步骤度量
  15. 工程经济有何难,思维导图来助阵
  16. 深大uooc学术道德与学术规范教育第二章
  17. UEditor .Net版本任意文件上传漏洞复现
  18. OVM-V1.3正式发布,新增三大功能 ,采用全新UI界面
  19. 机器学习所需要的高数知识
  20. paypal 主要的html 表格变量的含义

热门文章

  1. 在oracle官网 下载安装文件需要注册oracle账号
  2. 开学季,孩子们怎么学习?
  3. 数据库实验报告【太原理工大学】
  4. 各种选址、点、路线、网要求
  5. HTML5-网页标栏的下拉菜单
  6. 《设计工作室生存手册》目录—导读
  7. Wordpress使用CloudFlare的CDN来加速网站(页面规则缓存设置教程
  8. js如何获取jwt信息_如何获取有价值的信息
  9. ap计算机科学公式,ap的计算公式.ppt
  10. 小白学摄影:关于镜头焦段你知道多少?