我在Java中创建了一种web抓取工具,可以下载html代码并将其写入记录器。
数据挖掘器的代码如下:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.logging.FileHandler;
import java.util.logging.Level;
import java.util.logging.Logger;
public class Scraping {
private static final Logger LOGGER = Logger.getLogger(Logger.GLOBAL_LOGGER_NAME);
public static void getData(String address, int val) throws IOException {
// Make a URL to the web page
URL url = new URL(address);
// Get the input stream through URL Connection
URLConnection con = url.openConnection();
InputStream is =con.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String line = null;
FileHandler fh;
fh = new FileHandler(Integer.toString(val)+".txt");
LOGGER.addHandler(fh);
//SimpleFormatter formatter = new SimpleFormatter();
fh.setFormatter(new MyFormatter());
LOGGER.setUseParentHandlers(false);
LOGGER.setLevel(Level.FINE);
while ((line = br.readLine()) != null) {
toTable(line);
}
}
/*arrange data in table*/
private static void toTable(String line){
if(line.startsWith("<tr ><th scope=\"row\" class=\"left \" data-append-csv=") && !line.contains("ts_pct")){
LOGGER.log(Level.FINE, line);
}
}
}
当我运行代码一次它给我正确的输出,但我需要在for循环中多次运行它(发送另一个地址并将索引i作为val,为每次迭代赋予Logger不同的名称),以及何时我这样做,Logger文件从应该在不同文件中的文件中追加新数据。
因此,索引0获取val 0,1和2的数据,而不是只有val 0数据。
文件处理程序boolean append似乎对我的程序输出没有任何影响。
答案 0 :(得分:0)
首先,网络抓取不是数据挖掘。没有涉及高级统计数据。
其次,不要滥用记录器进行IO。
日志记录是为了确保在程序失败时以可配置的方式获取一些调试信息(所以不要使用GLOBAL_LOGGER
,但每个类应该有不同的记录器),你可以看到什么正在发生。
要编写输出文件,请使用编程语言的标准OutputStream等。不要尝试通过记录完全重新路由您的输出。