webmagic之爬取数据存储为TXT

Posted 发酸的丶米饭

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了webmagic之爬取数据存储为TXT相关的知识,希望对你有一定的参考价值。

1.获取标题建立文件TXT
  • 创建以标题命名的TXT

public static void create(String title) throws IOException {
    Configuration config = new Configuration();
    config.set("fs.default.name", "hdfs://192.168.146.110:9000");
    DistributedFileSystem fs = (DistributedFileSystem) DistributedFileSystem.get(config);
    String pathString = "/report/Zbgg/"+title+".txt";
    FSDataOutputStream output = fs.create(new Path(pathString));
    output.close();
}
  • 写入网址和内容

public static void write(String txt , String str)  {
        Configuration config = new Configuration();
        config.set("fs.default.name", "hdfs://192.168.146.110:9000");
        config.set("dfs.support.append", "true");
        config.set("dfs.client.block.write.replace-datanode-on-failure.policy", "NEVER");
        config.set("dfs.client.block.write.replace-datanode-on-failure.enable", "true");

        try {
            DistributedFileSystem fs = (DistributedFileSystem) DistributedFileSystem.get(config);
            //文件必须存在
            String pathString = "/report/Zbgg/"+txt+".txt";
            FSDataOutputStream outpustream = fs.append(new Path(pathString));

            //System.getProperty("line.separator")换行

            outpustream.writeBytes(str);
            outpustream.writeBytes(System.getProperty("line.separator"));
            outpustream.close();
            fs.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
 

写入TXT的内容为乱码

HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();
urlConn.connect();
DataOutputStream out = new DataOutputStream(urlConn.getOutputStream());
String content = "传递中文的问题";
out.writeBytes(content);
out.flush();
out.close();
urlConn.disconnect();
依照上面的方式传递中文,服务器得到的一定是一堆乱码,原因:out.writeBytes(content);该语句在转中文时候,已经变成乱码
public final void writeBytes(String s) throws IOException {
int len = s.length();
for (int i = 0 ; i < len ; i++) {
out.write((byte)s.charAt(i));
}
incCount(len);
因为java里的char类型是16位的,一个char可以存储一个中文字符,在将其转换为 byte后高8位会丢失,这样就无法将中文字符完整的输出到输出流中。所以在可能有中文字符输出的地方最好先将其转换为字节数组,然后再通过write写入流,目前尝试过这种方法:把上面链接代码中的out.writeBytes(content);替换为out.write(content.getBytes());先把数据转成BYTE在写入流,执行成功,服务器接收正确的中文内容

以上是关于webmagic之爬取数据存储为TXT的主要内容,如果未能解决你的问题,请参考以下文章

webmagic自定义存储(mysqlredis存储)

scrapy初探之爬取武sir首页博客

python爬虫实例详细介绍之爬取大众点评的数据

初学scrapy之爬取wooyun.org网站

抓取百万知乎用户数据之爬取思路

webmagic爬取渲染网站