【网络爬虫】数据采集——将html的数据分析保存到数据库
来源:互联网 发布:江恩晚年一贫如洗 知乎 编辑:程序博客网 时间:2024/05/01 00:27
上篇文章,介绍了Heritrix爬取土木在线网的一些html数据,今天介绍如何将这些数据导入数据库。
首先建立一个web工程,写好domain,这是javaweb的基础,不在过多介绍。
package cn.hpu.edu.heritrix.domain;public class Extractor_TuMu {private String id;private String title;private String nowdate;private String related;//分类private String rate ;//评分private int price;//金额public String getId() {return id;}public void setId(String id) {this.id = id;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public String getNowdate() {return nowdate;}public void setNowdate(String nowdate) {this.nowdate = nowdate;}public String getRelated() {return related;}public void setRelated(String related) {this.related = related;}public String getRate() {return rate;}public void setRate(String rate) {this.rate = rate;}public int getPrice() {return price;}public void setPrice(int price) {this.price = price;}}建立实体类后,配置数据库的相关信息,这里用的是c3p0连接池,不太懂的同学,可以按照自己的方法,链接数据库。接下来我也会陆陆续续,将javaweb的知识写下来,与大家共享。想使用c3p0的同学,可以参考我后续的博客,这里省略。
直接看Dao的操作类:
package cn.hpu.edu.heritrix.dao;import java.sql.SQLException;import org.apache.commons.dbutils.QueryRunner;import cn.hpu.edu.heritrix.domain.Extractor_TuMu;import cn.itcast.commons.CommonUtils;import cn.itcast.jdbc.TxQueryRunner;public class TuMuDao {private QueryRunner qr = new TxQueryRunner();/** * 向数据库添加数据 * @param e * @throws SQLException */public void add(Extractor_TuMu e) throws SQLException{String sql = "insert into t_tumu values(?,?,?,?,?,?)";Object[] params = {e.getId(),e.getTitle(),e.getNowdate(),e.getRelated(),e.getRate(),e.getPrice()};qr.update(sql,params);}}这些准备工作完毕后,就是对网页数据的爬取了,现将代码粘出来,略作解释:
package cn.hpu.edu.heritrix.extractor;import java.io.File;import java.sql.SQLException;import org.htmlparser.Node;import org.htmlparser.Parser;import org.htmlparser.filters.AndFilter;import org.htmlparser.filters.HasAttributeFilter;import org.htmlparser.filters.NodeClassFilter;import org.htmlparser.nodes.TextNode;import org.htmlparser.tags.Div;import org.htmlparser.tags.LinkTag;import org.htmlparser.tags.ParagraphTag;import org.htmlparser.tags.Span;import org.htmlparser.util.NodeList;import org.htmlparser.util.ParserException;import cn.hpu.edu.heritrix.dao.TuMuDao;import cn.hpu.edu.heritrix.domain.Extractor_TuMu;import cn.itcast.commons.CommonUtils;public class Extractor {private TuMuDao tu = new TuMuDao();/** *为<P>标签重新建立解析器 * @param url * @return * @throws ParserException */private static NodeList mothed(String url) throws ParserException{Parser parser = new Parser(url);AndFilter andFilter = new AndFilter(new NodeClassFilter(ParagraphTag.class),new HasAttributeFilter("class","about clearfix"));NodeList nodeList = parser.parse(andFilter);//System.out.println(nodeList.elementAt(0));return nodeList;}/** * 解析DIV并保存到数据库 * @param url * @throws ParserException * @throws SQLException */public void extractor_TuMu(String url) throws ParserException, SQLException{Parser parser = new Parser(url);AndFilter andFilter = new AndFilter(new NodeClassFilter(Div.class),new HasAttributeFilter("class","li_con fl"));NodeList nodeList = parser.parse(andFilter);NodeList nodeListone = mothed(url);int size = nodeList.size();for(int i=0; i<size; i++){Extractor_TuMu e = new Extractor_TuMu();Node node = nodeList.elementAt(i);//得到第一个DIV元素Div div = (Div) node.getChildren().elementAt(1);//DIV下第一个title标签LinkTag titleNode = (LinkTag) div.getChild(1);e.setTitle(titleNode.getAttribute("title"));//DIV下第二个日期Span nowDateNode = (Span) div.getChild(3);e.setNowdate(nowDateNode.getStringText());//得到第二个P标签ParagraphTag p = (ParagraphTag) node.getChildren().elementAt(3);//P标签下第三个分类标签LinkTag relatedNode = (LinkTag) p.getChild(1);e.setRelated(relatedNode.getStringText());//从<P>标签中获取nodeNode nodeone = nodeListone.elementAt(i);//<p>标签中第一个元素,SpanSpan span = (Span) nodeone.getChildren().elementAt(0);//从Span中得到评分TextNode rateNode = (TextNode) span.getChild(2);e.setRate(rateNode.getText());//<p>标签中第二个元素,SpanSpan spantwo = (Span) nodeone.getChildren().elementAt(1);TextNode priceNode = (TextNode) spantwo.getChild(2);e.setPrice(Integer.parseInt(priceNode.getText()));//向数据库添加数据e.setId(CommonUtils.uuid());tu.add(e);}}public static void main(String[] args) {//拿到文件目录File files = new File("H:\\Space\\myHeriterix\\jobs\\Tumu-20151202023408932\\mirror\\ziliao.co188.com\\drawing9258\\");File[] list = files.listFiles();//遍历文件夹for(File file : list){Extractor e = new Extractor();try {e.extractor_TuMu("H:\\Space\\myHeriterix\\jobs\\Tumu-20151202023408932\\mirror\\ziliao.co188.com\\drawing9258\\"+file.getName());} catch (ParserException e1) {e1.printStackTrace();} catch (SQLException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}}}}从main方法说起:首先要将保存目录获取到,之后对该目录进行遍历,得到所有的文件名。
这里是结合HttpParser对数据进行过滤。而Parser可以根据本地的目录对网页解析,亦可以跟据一个网页的URL对其进行解析。实例化Parser之后,建立一个AndFilter对标签进行解析。由于这里需要的数据不再同一个标签内,所以需要两个AndFilter解析,但是一个Parser只能解析一个AndFilter,故又写了一个方法,重新构建了一个Parser对象,对两一个标签解析。
解析出来之后,将结果放到一个NodeList中。再遍历该集合,就可以得到集合里面的节点,以及节点下面的子字节,子节点的文本信息以及各项信息。
LinkTag:<li>、<a>
ParagraphTag: <p>
Div: <div>
Span :<span>
<span style="white-space:pre"></span>TextNode :<em>
0 0
- 【网络爬虫】数据采集——将html的数据分析保存到数据库
- 爬虫--网络数据采集
- 【网络爬虫】数据的采集——爬取土木在线网的数据
- 网络爬虫采集数据几个问题
- 使用WebMagic爬虫框架及javaEE SSH框架将数据保存到数据库(一)
- WebMagic爬虫框架及javaEE SSH框架将数据保存到数据库(二)
- scrapy框架爬虫将数据保存到MySQL数据库(20170214)
- 【网络爬虫】数据的采集——Heritrix1.x的配置过程
- Python 将数据库数据保存到txt
- 如何将String[]类型的数据保存到数据库里
- 将数据库中表的数据保存到XML文件中
- 将数据库里的数据保存到本地Excel
- 保存数据到MySql数据库——我用scrapy写爬虫(二)
- 从网络请求数据保存到数据库。
- scrapy爬虫框架将数据保存Mysql数据库中
- 关于数据库应用编程——将更新的数据保存到数据库中的一种奇怪现象
- 将html数据传递到数据库
- crawler4j 爬虫网页数据并保存到数据库中
- 找出字符串中字母不重复的最长的子字符串
- Cornerstone(SVN客户端) 创建分支 合并分支
- 通知监听
- MVC探索之路(1、MVC的基础概念)
- 当前穷人子弟还可以进阶到中产的方法
- 【网络爬虫】数据采集——将html的数据分析保存到数据库
- 介绍一篇关于session的好文章
- DELL R820安装
- 三、三维模型添加
- ORA-02021解决方法--dblink操作ddl
- 自己对继承非常浅显的理解(供自己)
- Android 框架
- (NO.00004)iOS实现打砖块游戏(十四):3球道具的实现
- C#异步委托