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在写入流,执行成功,服务器接收正确的中文内容

原文地址:https://www.cnblogs.com/wf1647790534/p/9802985.html

时间: 2024-10-23 22:00:24

webmagic之爬取数据存储为TXT的相关文章

(完整)爬取数据存储之TXT、JSON、CSV存储

一.文件存储 1. TXT文本存储 例:知乎发现页面,获得数据存成TXT文本 import requests from pyquery import PyQuery as pq url="https://www.zhihu.com/explore" headers={'User-Agent':'ozilla/5.0 (iPhone; CPU iPhone OS 11_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mo

webmagic 增量爬取

webmagic  是一个很好并且很简单的爬虫框架,其教程网址:http://my.oschina.net/flashsword/blog/180623 webmagic参考了scrapy的模块划分,分为Spider(整个爬虫的调度框架).Downloader(页面下载).PageProcessor(链接提取和页面分析).Scheduler(URL管理).Pipeline(离线分析和持久化)几部分.只不过scrapy通过middleware实现扩展,而webmagic则通过定义这几个接口,并将其

Python自定义豆瓣电影种类,排行,点评的爬取与存储(进阶)

Python 2.7 IDE Pycharm 5.0.3 具体Selenium及PhantomJS请看Python+Selenium+PIL+Tesseract真正自动识别验证码进行一键登录 一些自动化应用实例请看Selenium+PhantomJS自动续借图书馆书籍 至于GUI的入门使用请看Python基于Tkinter的二输入规则器(乞丐版) 比较综合的GUI例子请看基于Python的参考文献生成器1.0 想了想,还是稍微人性化一点,做个成品GUI出来 起因 没办法,在知乎预告了要做个GUI

spark学习进度6-Python爬取数据的四个简单实例

今天本来想把昨天安装的intellij配置好,但是一直显示没有网络,网上查了相关资料也没有查出来解决办法. 然后暂停了intellij的配置,开始做了几个Python爬取简单数据的实例,先做了几个最简单的,以后再加大难度(用idle编码): (1)京东商品页面爬取: 链接:https://item.jd.com/2967929.html 代码解析: 首先r是一个response对象: r.status_code返回一个值,如果是200的话则正常,如果时候503的话,则抛出异常,调用该方法的目的是

【个人】爬虫实践,利用xpath方式爬取数据之爬取虾米音乐排行榜

实验网站:虾米音乐排行榜 网站地址:http://www.xiami.com/chart 难度系数:★☆☆☆☆ 依赖库:request.lxml的etree (安装lxml:pip install lxml) IDEA开发工具:PyCharm_2017.3 Python版本:Python3 期望结果:爬取出排行版歌名以及对应歌手 运行效果图: 音乐排行榜: 爬取数据结果图: 像这种简单的爬取就没必要使用Scrapy框架进行处理,是在有点大材小用,不过如果你刚开始学Scrapy的话,拿这些简单的练

借助Chrome和插件爬取数据

工具 Chrome浏览器 TamperMonkey ReRes Chrome浏览器 chrome浏览器是目前最受欢迎的浏览器,没有之一,它兼容大部分的w3c标准和ecma标准,对于前端工程师在开发过程中提供了devtools和插件等工具,非常方便使用.在爬取数据的过程中,最常用的应该是开发工具中的Element.Source和Network功能,分别查看DOM结构,源码和网络请求.同时,有很多基于Chrome浏览器的插件又给我们赋予了浏览器级别的能力,来处理数据. TamperMonkey Ta

web scraper——简单的爬取数据【二】

web scraper——安装[一] 在上文中我们已经安装好了web scraper现在我们来进行简单的爬取,就来爬取百度的实时热点吧. http://top.baidu.com/buzz?b=1&fr=20811 文本太长,大部分是图片,所以上下操作视频吧,视频爬取的是昵称不是百度热点数据 链接:https://pan.baidu.com/s/1W-8kGDznZZjoQIk1e6ikfQ提取码:3dj7 爬取步骤 创建站点 打开百度热点,ctrl+shit+i进入检测工具,打开web scr

使用HttpClient+Json解析器爬取数据并存入数据库

一.题目要求 说明:这里我只展示爬取数据的代码,将可视化结果与统计数据结合,实时显示当前最新数据只需将这篇博客代码和我那篇使用Echarts可视化数据库数据结合即可 二.思路 同学思路:我的大部分同学思路是使用HttpClient+Jsoup获取并解析目标页面的数据,然后调用Dao层中的方法将数据筛选并存入数据库中 我的思路:我直接使用了一个网上的一个最新疫情数据Json的目标网页,然后使用HttpClient获取该Json格式数据,然后使用Json解析器将 数据分离,然后调用Dao层中的方法将

基于selenium实现自动化爬取数据

基于selenium实现自动化爬取数据 如果想具体查看selenium自动化模块的更多功能请看我的博客测试分类中有介绍 selenium 概念:基于浏览器自动化的模块 自动化:可以通过代码指定一系列的行为动作,然后将其作用到浏览器中. pip install selenium selenium和爬虫之间的关联 1.便捷的捕获到任意形式动态加载的数据(可见即可得) 2.实现模拟登录 谷歌驱动下载:http://chromedriver.storage.googleapis.com/index.ht