抽取文本数据(抽取web数据)

主要功能描述(实现的内容):

抽取web数据主要是获取网页上的数据。在Kettle新建转换添加控件,通过URL找到数据并通过User-Agent来掩饰为浏览器访问,并通过Java代码来提取需要的数据并连接数据库并把数据存储到数据库中。实现抽取HTTP网页的web数据功能。

1.数据准备与查看数据

2.在Kettle新建转换,添加“自定义常量数据”控件、“HTTP client”查询控件和“Java代码”控件以及Hop跳连线

 

 3.配置“自定义常量数据”控件

  1. .双击“自定义常量数据”控件,进入“自定义常量数据”界面

 

(2).在“元数据”选项卡中定义字段常量filename和User-Agent并指定数据类型为String

2. 豆角网:https://m.doujiaoww.com/

 

 

 (3).在浏览器中进入豆角网,复制开发者工具下的网络中的www.doujiao1.com中的User-Agent

(4).点击“数据”选项卡,在filename添加HTML数据所在的URL地址,在User-Agent添加用户代理并点击确定完成“自定义常量数据”控件配置

 

4.配置“HTTP client”控件

(1).点击“HTTP client”控件,进入HTTP web service控件界面

(2).勾选“从字段中获取URL?”复选框,在“URL字段名”后的下拉列表中选择URL字段名filename,在结果字段名处指定结果字段名称,这里选择默认的结果字段result

 

  1. (3)点击Fields选项卡,在“field”中添加“User-Agent”,”Header”中添加“User-Agent”

 

(4).点击确定完成“HTTP client”控件

 

5.配置“Java代码”控件

  1. .双击进入“Java代码”控件,进入“Java代码”控件界面

 

  1. .在Code Snippits下的Common use下的Main,添加Java代码的主方法,及程序人口

 

 

  1. .复制代码框编写抽取HTML网页数据的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 = "123456";
			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;

}

 

  1. .点击“字段”选项卡,用于添加新生成的字段,点击“参数”选项卡,用于传入参数

 

 

  1. 点击“字段”选项卡界面添加新生成的字段contents 并指定数据类型为 String,在“参数”选项卡界面传入参数result 并指定值为result

 

 

  1. 点击“确定”按钮完成“Java代码”控件配置。

 

  1. 运行转换

 

5.查看extract数据库中的数据

 

经验小结:

1.User-Agent的查找:在浏览器进入豆角网,在开发者工具下的网络中的www.doujiao1.com中的User-Agent并复制。没有User-Agent可能运行成功但是数据库中没有数据。

2.Java代码中连接数据库时要指定数据库名以及注意端口号密码等,可能运行成功但是数据库中的数据是乱码,所以还要在Java代码中指定编码规则等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

殊迟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值