玩玩Hibernate(二)hibernate-spider爬虫~~
新建一个hSpider的工程,引入前面已经建立的lib
并为其建立一个hibernate.cfg.xml的映射文件
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!-- Database connection settings 数据库的配置 -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/hSpider</property>
<property name="connection.username">root</property>
<property name="connection.password"></property> <!-- JDBC connection pool (use the built-in) hibernate自带连接池,暂不使用 -->
<!-- <property name="connection.pool_size">1</property> --> <!-- SQL dialect 数据库方言,这里我们才爱用MySQL-->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property> <!-- Enable Hibernate's automatic session context management 新功能,暂不使用 -->
<!-- <property name="current_session_context_class">thread</property> --> <!-- Disable the second-level cache 二级缓存,放置不管 -->
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property> <!-- Echo all executed SQL to stdout 设置show_sql为true表示让hibernate将生成sql语句在控制台打印出来 -->
<property name="show_sql">true</property> <!-- Drop and re-create the database schema on startup 是否让hibernate自动为我们创建表 -->
<!-- <property name="hbm2ddl.auto">update</property> --> <mapping resource="hibernateSpider/edNews.hbm.xml"/> <!-- 这里是将需要mapping的文件进行再次声明 --> </session-factory> </hibernate-configuration>
新建`hSpider`包依次点击打开HibernateSpider->右键src->New->Package
新建`edNews`类依次点击打开HibernateSpider->src->hSpider->New->Class
public class edNews {
private int id;
private String ednews;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getNews(){
return ednews;
}
public void setNews(news ednews){
this.ednews = ednews.ednews;
}
}
edNews
并为其新建一个edNews.hbm.xml映射文件(必须跟edNEws在同一个包中)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping>
<class name="hibernateSpider.edNews" table="ednews">
<id name="id" type="int">
<column name="id" />
<generator class="increment" />
</id>
<property name="news" type="string">
<column name="news" length="255" />
</property> </class>
</hibernate-mapping>
新建一个news类(用于显示)
public class news {
public String ednews;
// 构造方法初始化数据
public news() {
ednews = "";
}
@Override
public String toString() {
return "公告:" + ednews + "\n";
}
}
News
新建一个Spider类,这个是爬虫代码的实现
package hibernateSpider; import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern; public class Spider {
public static String SendGet(String url) {
// 定义一个字符串用来存储网页内容
String result = "";
// 定义一个缓冲字符输入流
BufferedReader in = null; try {
// 将string转成url对象
URL realUrl = new URL(url);
// 初始化一个链接到那个url的连接
URLConnection connection = realUrl.openConnection();
// 开始实际的连接
connection.connect();
// 初始化 BufferedReader输入流来读取URL的响应
in = new BufferedReader(new InputStreamReader(
connection.getInputStream(), "UTF-8"));
// 用来临时存储抓取到的每一行的数据
String line;
while ((line = in.readLine()) != null) {
// 遍历抓取到的每一行并将其存储到result里面
result += line;
}
} catch (Exception e) {
System.out.println("发送GET请求出现异常!" + e);
e.printStackTrace();
}
// 使用finally来关闭输入流
finally {
try {
if (in != null) {
in.close();
}
} catch (Exception e2) {
e2.printStackTrace();
}
}
return result; } public static ArrayList<news> GetNews(String content) {
// 预定义一个ArrayList来存储结果
ArrayList<news> results = new ArrayList<news>();
// 用来匹配标题
Pattern questionPattern = Pattern.compile("ggtz/\\d{4}.shtml.+?>(.+?)<");
Matcher questionMatcher = questionPattern.matcher(content);
// 用来匹配url,也就是问题的链接
Pattern urlPattern = Pattern.compile("ggtz/\\d{4}.shtml.+?>(.+?)<");
Matcher urlMatcher = urlPattern.matcher(content); // 问题和链接要均能匹配到
boolean isFind = questionMatcher.find() && urlMatcher.find(); while (isFind) {
// 定义一个news对象(公告对象)来存储抓取到的信息
news newsTemp = new news();
newsTemp.ednews= questionMatcher.group(1); // 添加成功匹配的结果
results.add(newsTemp);
// 继续查找下一个匹配对象
isFind = questionMatcher.find() && urlMatcher.find();
}
return results;
} }
Spider
最后,测试一下结果
public class MainTest {
public static void main(String[] args) {
// 定义即将访问的链接
String url = "http://jwc.gdut.edu.cn/";
// 访问链接并获取页面内容
String content = Spider.SendGet(url);
// 获取该页面的所有的命题对象
ArrayList<news> myNews = Spider. GetNews(content);
// 打印结果
for(int i = 0; i < myNews.size(); i++){
System.out.println(myNews.get(i));
edNews aNew = new edNews() ;//新建我们需要存储的类对象,并且设置其对象的一些属性
aNew.setId(i);
aNew.setNews(myNews.get(i));
{
//Configuration主要用以读取配置文件
Configuration cfg = new Configuration();
SessionFactory sf = cfg.configure().buildSessionFactory();
//buildSessionFactory();得到一个创建Session的工场
Session ss = sf.openSession();
ss.beginTransaction();//OK,将操作放入事务中
ss.save(aNew);//保存你的对象
ss.getTransaction().commit();//得到事务并提交
ss.close();//Session关闭
sf.close();//工厂关闭
}
}
}
}
MainTest


玩玩Hibernate(二)hibernate-spider爬虫~~的更多相关文章
- Spring整合Hibernate 二 - 声明式的事务管理
Spring大战Hibernate之声明式的事务管理 Spring配置文件: 添加事务管理类的bean: <bean id="txManager" class="o ...
- Hibernate基础学习(二)—Hibernate相关API介绍
一.Hibernate的核心接口 所有的Hibernate应用中都会访问Hibernate的5个核心接口. (1)Configuration接口: 配置Hibernate,启动Hi ...
- Hibernate二次学习一----------Hibernate简单搭建
因为博客园自带的markdown不太好用,因此所有markdown笔记都使用cmd_markdown发布 Hibernate二次学习一----------Hibernate简单搭建: https:// ...
- 一起学习Hibernate: Hibernate01 —— Hibernate的概述与入门案例
一 Hibernate的介绍 1 让我们从JDBC与替代它的框架Hibernate进行一下对比. 1.1 JDBC的缺点 1) 代码结构繁琐.每次书写sql语句操作数据库都得需要很多步; 2) 是面向 ...
- spider 爬虫文件基本参数(3)
一 代码 # -*- coding: utf-8 -*- import scrapy class ZhihuSpider(scrapy.Spider): # 爬虫名字,名字唯一,允许自定义 name ...
- Hibernate之Hibernate环境搭建
Hibernate之Hibernate环境搭建 一.Hibernate环境搭建的步骤 1.添加Hibernate && SQLServer 的Jar antlr-2.7.7.jar d ...
- 问题Initial SessionFactory creation failed.org.hibernate.HibernateException: /hibernate.cfg.xml not found解决方法
问题Initial SessionFactory creation failed.org.hibernate.HibernateException: /hibernate.cfg.xml not fo ...
- Hibernate笔记——Hibernate介绍和初次环境配置
Hibernate简介 Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库. Hibernate ...
- org.hibernate.HibernateException: /hibernate.cfg.xml not found等三个问题
初次配置hibernate在myeclipse上: 出现三个问题,怎么都不好使,比对代码,没有问题,查看路径还是没有问题: 1.org.hibernate.HibernateException: /h ...
- 【hibernate】Hibernate中save, saveOrUpdate, persist, merge, update 区别
Hibernate Save hibernate save()方法能够保存实体到数据库,正如方法名称save这个单词所表明的意思.我们能够在事务之外调用这个方法,这也是我不喜欢使用这个方法保存数据的原 ...
随机推荐
- 基于NodeJs的网页爬虫的构建(二)
好久没写博客了,这段时间已经忙成狗,半年时间就这么没了,必须得做一下总结否则白忙.接下去可能会有一系列的总结,都是关于定向爬虫(干了好几个月后才知道这个名词)的构建方法,实现平台是Node.JS. 背 ...
- 4MLinux7.0 服务器配置详解 别名TheSSS
TheSSS download 特性:thttp,php5.5.1,mysql,vsftp,proxy,firewall,带rpm管理器.更新频繁. 官方帮助文件:View (新窗口打开) 发现国内4 ...
- mac下Apache + MySql + PHP网站开发
最近接了个小活,做一个使用PHP语言和MySql数据库的动态网站.之前做过类型的网站,是在windows系统下做的,开发环境使用的是 AppServ 的PHP开发套件.现在有了我的大MAC,所以找了M ...
- Vim粘贴代码时缩进混乱
Vim粘贴代码时缩进混乱 via 背景 在终端Vim中粘贴代码时,发现插入的代码会有多余的缩进,而且会逐行累加.原因是终端把粘贴的文本存入键盘缓存(Keyboard Buffer)中,Vim则把这些内 ...
- C++ 11 笔记 (三) : auto
我真的不是标题党... 虽然大一上学期学C语言基础时就学了auto关键字了,而且还是跟static和register两个关键字打包学的,但是.. 猜的没错,C++11这货又给auto加新功能了,在 C ...
- windows appfabric samples
http://www.microsoft.com/en-us/download/details.aspx?id=19603 http://msdn.microsoft.com/zh-cn/librar ...
- Java2_Java泛型
一. 泛型概念的提出(为什么需要泛型)? 首先,我们看下下面这段简短的代码: 1 public class GenericTest { 2 3 public static void main(Stri ...
- Unity给力插件之MegaFiers
这是一个关于网格变形的插件.其中有非常多的功能. 这是它的API地址:http://www.west-racing.com/mf/ 花了2天的时间实践并整理了其中绝大多数的功能,只有一些关于特殊格式的 ...
- 数据结构练习 02-线性结构3. Pop Sequence (25)
Given a stack which can keep M numbers at most. Push N numbers in the order of 1, 2, 3, ..., N and p ...
- uva 1308 - Viva Confetti
这个题目的方法是将圆盘分成一个个圆环,然后判断这些圆环是否被上面的圆覆盖: 如果这个圆的圆周上的圆弧都被上面的覆盖,暂时把它标记为不可见: 然后如果他的头上有个圆,他有个圆弧可见,那么他自己本身可见, ...