[原创]自己动手写CSDN博客提取器,提取文件保存支持PDF、doc、txt三种格式

下载地址http://download.csdn.net/detail/w397090770/4438566(不需要积分)

下面有网友说爬取到的博文没有任何博主的信息,今天我更新了一下代码, 在每一篇爬取到的博文中添加了作者博客名字以及这篇博文的地址,详细见下图。

用了好久的CSDN博客,发现里面有很多的很不错的文章,但是一篇一篇的复制、粘贴总觉得很麻烦,于是,花了1天半的时间做了一个CSDN博客提取器,可以爬取CSDN博客指定用户所有的文章列表,可以选择相关的文章进行下载,下载保存支持PDF、doc、txt三种格式。保存的pdf、doc文件支持图片,txt文件是纯文本格式的文件。软件运行的时候需要jdk1.5或者以上环境。


    本程序用java编写,运行的时候需要JDK1.5或以上环境,无需安装。程序通过分析CSDN博
客源码来生成一些必要的数据,可能在以后使用当中出现爬取不了的情况,可能是CSDN的源码
结构修改了。程序只是用于学习之用,严禁用于非法目的而照成CSDN服务器过载。
    由于生成PDF的时候需要依赖字库,所以在打包程序的时候把一些必要的字库已经放到程序中
去了。可能在生成一些PDF文件的时候出现乱码问题,那是因为里面缺少需要的字库,如遇到这
个问题,请和本人联系:wyphao.2007@163com


fonts文件夹是生成pdf文件依赖的字体库,如果生成的pdf文件是乱码,说明缺少相关的字体。


####################################################
程序功能:
    1、支持输入CSDN博客用户名针对性下载
    2、支持选择保存下载的文件
                保存的结构目录为:
                        选择的保存路径\CSDN用户名\img                 该用户的头像保存路径
                        选择的保存路径\CSDN用户名\pdf                  生成的PDF文件保存路径
                        选择的保存路径\CSDN用户名\doc                  生成的DOC文件保存路径
                        选择的保存路径\CSDN用户名\txt                   生成的TXT文件保存路径
    3、支持获取用户博客信息
    4、支持显示用户所有的帖子列表
    5、可以自己选择需要下载的帖子,有全选、反选、重置按钮
    6、支持下载的文件保存为 pdf、doc、txt三种格式
    7、生成的pdf、doc文件支持图片
    8、支持进度显示
    
####################################################
    
    制作时间:2012年07月17日 - 2012年07月18日
    制     作:w397090770
    个人博客:http://blog.csdn.net/w397090770
    Email   :wyphao.2007@163.com
    版权所有,翻版不究
####################################################

 

已经贴出了本程序的一部分源代码(其他的我会慢慢添加)

自己动手写CSDN博客提取器源码分析之一:处理网页保存为txt文件http://blog.csdn.net/w397090770/article/details/7767531

自己动手写CSDN博客提取器源码分析之二:处理网页保存为doc文件http://blog.csdn.net/w397090770/article/details/7768089

自己动手写CSDN博客提取器源码分析之三:处理网页保存为pdf文件http://blog.csdn.net/w397090770/article/details/7768129

 


 


下面是我爬取这篇文章的结果

文本的肯定没图片哇。嘿嘿

过往记忆 CSDN认证博客专家 过往记忆大数据 大数据 iteblog
已标记关键词 清除标记
编程脚本解包打包工具数据 这个数据文件格式为.zpk 一共有多个zpk文件 用十六进制软件打开其中一个后 拉到最底部可以发现其中包含图片和音频,如下图: ![图片说明](https://img-ask.csdn.net/upload/201704/07/1491572017_798934.png) 观察多个zpk文件发现 1、每个zpk最多有5个文件,包含1个mp3 1个aac 1个jpg 1个png 1个json(每个zpk必有json,部分zpk没有mp3但有2个aac),这5个文件的顺序跟上图结尾的顺序保持一致,旦每个zpk中5个文件的顺序不定,有时mp3在前有时jpg在前等等。 2、 里面的 jpg的文件头尾固定,分别为FF D8,FF D9 png的文件头尾固定,分别是89 50 4E 47,AE 42 60 82 AAC的文件头固定为FF F1 5C 40,但无固定文件尾。 mp3的文件头固定为FF E3 20 C4,但无固定文件尾。 json的文件头固定位7B 22 74 6F,但无固定文件尾。 3、zpk里的文件是紧挨着的,比如说mp3的文件尾紧接着jpg的文件头。 下图是各文件头尾相接部分的图片供大家了解: ![图片说明](https://img-ask.csdn.net/upload/201704/07/1491572047_822105.png) ![图片说明](https://img-ask.csdn.net/upload/201704/07/1491572059_929240.png) ![图片说明](https://img-ask.csdn.net/upload/201704/07/1491572069_859905.png) ![图片说明](https://img-ask.csdn.net/upload/201704/07/1491572082_59569.png) ![图片说明](https://img-ask.csdn.net/upload/201704/07/1491572091_75876.png) ![图片说明](https://img-ask.csdn.net/upload/201704/07/1491572098_610223.png) 补充两点:其中mp3的尾部基本上就是如上图一样的重复的很多十六位进制数字。 那么问题来了,如何利用QuickBMS也好parser也好一个脚本批量解析提取zpk其中的音频图片,并且将这些音频和图片以所在zpk中的json中的"word":"XXX"里的XXX来命名?如XXX1.mp3 XXX2.aac XXX3.png XXX4.jpg 本人没有接触过编程IT,属于零基础小白,上面是我自己东拼西凑琢磨出的,除了这些其他的概念估计也听不太懂,所以希望大神能够通过我上面的细节帮我大体脚本的大体框架或者思路,谢谢!!!
```Python新手,最近在学习DQN算法与RNN网络结合的DRQN。 python中如何将评估网络中的RNN网络参数传递到目标网络RNN中去? 附上莫凡的全联通网络的参数传递代码: # 替换 target net 的参数 t_params = tf.get_collection('target_net_params') # 提取 target_net 的参数 e_params = tf.get_collection('eval_net_params') # 提取 eval_net 的参数 self.replace_target_op = [tf.assign(t, e) for t, e in zip(t_params, e_params)] # 更新 target_net 参数 self.sess = tf.Session() self.sess.run(tf.global_variables_initializer()) self.cost_his = [] # 记录所有 cost 变化, 用于最后 plot 出来观看 def _build_net(self): # -------------- 创建 eval 神经网络, 及时提升参数 -------------- self.s = tf.placeholder(tf.float32, [None, self.n_features], name='s') # 态势s占位符,6维 self.q_target = tf.placeholder(tf.float32, [None, self.n_actions], name='Q_target') # q_target占位符,9维值函数 with tf.variable_scope('eval_net'): # c_names(collections_names) 是在更新 target_net 参数时会用到 c_names, n_l1, w_initializer, b_initializer = \ ['eval_net_params', tf.GraphKeys.GLOBAL_VARIABLES], 10, \ tf.random_normal_initializer(0., 0.3), tf.constant_initializer(0.1) # 10个神经元,[6,10] # eval_net 的第一层. collections 是在更新 target_net 参数时会用到 with tf.variable_scope('l1'): w1 = tf.get_variable('w1', [self.n_features, n_l1], initializer=w_initializer, collections=c_names)#[6,10] b1 = tf.get_variable('b1', [1, n_l1], initializer=b_initializer, collections=c_names) l1 = tf.nn.relu(tf.matmul(self.s, w1) + b1) # eval_net 的输出层. collections 是在更新 target_net 参数时会用到 with tf.variable_scope('l2'): w2 = tf.get_variable('w2', [n_l1, self.n_actions], initializer=w_initializer, collections=c_names)#[10,9] b2 = tf.get_variable('b2', [1, self.n_actions], initializer=b_initializer, collections=c_names) self.q_eval = tf.matmul(l1, w2) + b2 with tf.variable_scope('loss'): # 求误差 self.loss = tf.reduce_mean(tf.squared_difference(self.q_target, self.q_eval)) with tf.variable_scope('train'): # 梯度下降 self._train_op = tf.train.RMSPropOptimizer(self.lr).minimize(self.loss) #self._train_op =tf.train.GradientDescentOptimizer(self.lr).minimize(self.loss) #self._train_op =tf.train.AdamOptimizer(self.lr).minimize(self.loss) # ---------------- 创建 target 神经网络, 提供 target Q --------------------- self.s_ = tf.placeholder(tf.float32, [None, self.n_features], name='s_') # 接收下个 observation (下一个输入) with tf.variable_scope('target_net'): # c_names(collections_names) 是在更新 target_net 参数时会用到 c_names = ['target_net_params', tf.GraphKeys.GLOBAL_VARIABLES] # target_net 的第一层. collections 是在更新 target_net 参数时会用到 with tf.variable_scope('l1'): w1 = tf.get_variable('w1', [self.n_features, n_l1], initializer=w_initializer, collections=c_names) b1 = tf.get_variable('b1', [1, n_l1], initializer=b_initializer, collections=c_names) l1 = tf.nn.relu(tf.matmul(self.s_, w1) + b1) # target_net 的第二层. collections 是在更新 target_net 参数时会用到 with tf.variable_scope('l2'): w2 = tf.get_variable('w2', [n_l1, self.n_actions], initializer=w_initializer, collections=c_names) b2 = tf.get_variable('b2', [1, self.n_actions], initializer=b_initializer, collections=c_names) self.q_next = tf.matmul(l1, w2) + b2 请大佬讲解RNN参数传递时也尽可能有代码演示谢谢!!!
©️2020 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页