案例介绍:
我们以抽取“豆瓣电影排行榜”网页的超链接数据为例进行抽取数据,豆瓣电影排行榜页面的部分内容如图所示。
-
通过步骤设置组件
-
设定自定义常量数据
-
HTTP client控件中选定“从字段中获取URL”然后在URL字段名中选择之前设置的字段名
4.在Java代码界面双击“Code Snippits”→ “Common use”→ “Main”,添加Java脚本代码的主方法,即程序入口。
在“Java代码”控件中的代码框编写抽取HTML网页数据的Java脚本代码
单击“Java代码”控件中的“字段”选项卡,用于添加新生成的字段;单击“参数”选项卡,用于传入参数。
代码:
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.PreparedStatement;
private String result;
private String contents;
private Connection connection = null;
public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException,SQLException{
if (first) {
result=getParameter("result");
first = false;
}
Object[] r = getRow();
if (r == null) {
setOutputDone();
return false;
}
Object[] outputRow = createOutputRow(r, data.outputRowMeta.size());
String foobar = get(Fields.In, result).getString(r);
String pattern ="<a[^>]*href(\\\"([^\\\"]*)\\\"|\\'([^\\']*)\\'|([^\\\\s>]*))[^>]*>(.*?)</a>";
Pattern patterns = Pattern.compile(pattern);
Matcher m = patterns.matcher(foobar);
while(m.find()){
get(Fields.Out, "contents").setValue(outputRow, m.group().replaceAll("<[^>]*>",""));
String url = "jdbc:mysql://localhost:3306/extract";
String userName = "root";
String userPwd = "140234";
try{
// 加载驱动程序
Class.forName("com.mysql.jdbc.Driver");
// 获取连接对象
connection= (Connection) DriverManager.getConnection(url, userName, userPwd);
} catch (Exception e) {
e.printStackTrace();
}
//要执行的SQL语句
String sql="insert into html (contents) values (?);";
PreparedStatement stat = (PreparedStatement) connection.prepareStatement(sql);
contents=m.group().replaceAll("<[^>]*>","");
stat.setString(1, contents);
//3.ResultSet类,用来存放获取的结果集!!
stat.executeUpdate();
putRow(data.outputRowMeta, outputRow);
}
return true;
}
结果:
案例介绍:
通过使用Kettle工具,创建一个转换转换xml_extract,并添加“Get data from XML”控件、“表输出”控件以及Hop跳连接线,具体如图所示。
结果:
案例介绍:
通过Kettle工具抽取JSON文件json_extract.json中的数据并保存至数据库extract中的数据表json中。
从一个字段
结果: