接触Nutch,版本从1.x换到2.x,各种坑,可能用的人少.要命.
各种排错的时间远远大于学习Nutch时间.伤心
首先是 编译阶段,各种坑 ,一不小心就报错,各种配置文件改改改
http://blog.csdn.net/a897180673/article/details/78392087
好不容易可以使用了,在爬取一个网页后之后,登陆数据库一看,尼玛,乱码
还有一个headers的字段,直接显示BLOB
这个是数据是二进制存储的,复制出来,粘贴 到文本文档看看
又是乱码,坑爹!
看上去 好像只有 中文乱码 ,其他的还是好的.
但是我们在初期配置的时候 ,各种utf-8 了啊
可惜还是没有用,突然想起来之前做java web 的时候遇到乱码的情况
就是在jdbc连接数据库的时候在后面加utf8
回到Nutch ,修改下/conf/gora.properties文件中的url即可
gora.sqlstore.jdbc.driver=com.mysql.jdbc.Driver
gora.sqlstore.jdbc.url=jdbc:mysql://192.168.100.20:3306/nutch?createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=utf8
gora.sqlstore.jdbc.user=root
gora.sqlstore.jdbc.password=cbas.123
好了,再次编译下
切换到bin目录
再爬取看看
./nutch crawl urls -depth 3 -topN 5
终于中文了.
把BLOB的内容复制到文本文档 看下
fuck,还是乱码
突然意思到 BLOB为二进制字符串,所以可能汉字没有办法存储,要不JDBC读取出来看看?
上代码:
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.sql.*;
public class Jdbc {
public static void main(String[] args) {
try {
Class.forName("com.mysql.jdbc.Driver");
Connection con= DriverManager.getConnection("jdbc:mysql://192.168.100.20:3306/nutch", "root", "123");
java.sql.PreparedStatement ps= con.prepareStatement("select content from webpage");
ResultSet rs=ps.executeQuery();
if(rs.next()) {
Blob bb = rs.getBlob(1);
byte[] b = bb.getBytes(1, (int) bb.length());
String result = new String(b,"utf-8");
System.out.println(result);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
跑起来,看看,ok中文显示了!