百度文库资源文件分析

本文介绍了如何通过分析百度文库的JavaScript代码来提取文档信息,包括获取文档的JSON数据、资源文件链接及SWF文件,并进一步将SWF文件转换为JPG图片和PDF文档的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

百度文库分析第一节

 

1.         分析百度文库的javascript

var DOC_INFO={       //文件信息

         doc_id:"6b70ecc65fbfc77da269b19a"      //文件编号

         ,cid:"64"                                                   //分类编号

         ,price:"0"                                                  //价格

         ,value_average:"6"                                    //不清楚

         ,doc_size:"66.0KB"                                  //文件大小

         ,doc_name:"销售谈判培训"                    //文件名

         ,doc_type:"doc"                                        //文件类型

         ,url:http://wenku.baidu.com                      //站点名称

         ,wealth:parseInt("")                                  //不清楚

         ,level:parseInt("")                                     //不清楚

         ,isOrgDoc:"0"                                          //不清楚

};

 

B=DOC_INFO.doc_type;                                 //文件类型

 

var A=B=="txt"?"txtreader.swf":"reader.swf";  //通过文件类型确定阅读器

var I=B=="txt"?50:5;   //通过文件类型确定每次加载页数

//通过文件类型确定数据文件所在域名地址

var C=B=="txt"?"http://wenku.baidu.com/play":"http://ai.wenku.baidu.com/play";

 

通过上面的信息,基本可以把握文库的数据文件信息,那么我们怎么获取这段JSON

第一步:抓取页面源文件。

第二步:正则替换源文件,用分组一替换整个文件,下面是正则表达式

BAIDU_DOC_INFO = @"^[/s/S]*DOC_INFO=(/{.*?})[/s/S]*$";

 

2.         获取资源文件

要获取资源文件,就必须先找到资源文件链接地址,百度的资源文件链接地址格式是怎么样子的呢,请继续下看

 

域名地址 + / +文件编号 + ?pn=x&rn= + 每次加载页数

例如:

http://ai.wenku.baidu.com/play/6b70ecc65fbfc77da269b19a?pn=1&rn=5

 

链接地址格式的所有参数可以在上面的文件信息JSON获取到

 

其中Pn=x  表示加载的第几页   x1开始,每次递增数为RN每次加载页数

 

现在知道文库资源文件的链接格式,可以下载所有的资源文件

 

 

3.         分析资源文件

下载下来的资源文件,是一个个SWF格式的数据文件,数据文件是有自己特定格式的。下面看数据文件格式

 

{"totalPage":"3","fromPage":"1","toPage":"3"}    CWS  xxxxx  CWS xxx   CWS xxx

 

从上面数据文件格式,我们可以发现规律 每个数据文件都是一个JSON开头 CWS表示swf文件的开始,下一个CWS表示上一个swf结束,下一个swf开始。每个数据文件有多少个CWS就表示有多少页

totalPage   总页数

fromPage   开始页数

toPage        本资源文件到达的页数

 

这三个参数有什么用呢,用处很大,在上面获取资源文件的时候是不知道总页数的,那么就定位不了pn的最大值,所以必须当PN=1(默认最小值)的时候得到最大值

这样通过总页数,和RN每次加载页数)可以定位PN,接着循环下载数据

上面的方法可行,不过我不赞成用这种方法写,因为这个总要计算

我们可以用递归

定义一个方法

GetSWF(int fromPage){

         ……………………………….

         If(toPage< totalPage)

                   GetSWF(toPage+1)

}

 

这样下载数据更简洁

 

那么我们怎么获取资源文件里面的JSON

试用下面的正则,获取第一分组(开始的一对大括号),我不支持用字符串长度去截取,虽然可行,看网上别人介绍的是最小多长,最大多长,这样不够灵活

BAIDU_DATA_HEADER = @"^(/{[/s/S]+?/})([/s/S]+)$"

 

得到了资源JSON 那么再怎么分离SWF文件呢

BAIDU_DATA_SWF = @"(CWS|FWS)/t[/s/S]*?(?=(CWS|FWS)/t|$)"

用上面的正则 百度文库的FLASH文件有两种分隔 CWS FWS,切记不能只用这两种分隔符去切割文件,因为文件里面可能还会存在CWS这样子的字符串,网上最流行的易读,就是字符串切割,所以下载文件的时候会出现白页,就是切割错误页面用16进制查看资源文件每一个CWSFWS后面会跟一个09,也就ASCII表对应的制表符,在正则里面用 /t  表示制表符,所以用正则表达式匹配更完善

         分离出每一个SWF 存储成 .swf临时文件

 

 

 

 

4.         Swf文件生成JPG文件

SWFToImage 这个ACTIVE组件非常简单,具体操作自己查相关资料

还可以用FFMPEG.exe 文件截图,这个是很早以前做视频转换时候用到的

自己抉择

SWFToImage 需要自己注册DLL,有时候中文路径还注册不上,对一下电脑盲如果要试用你给的程序,简直就是。。。。

FFMPEG虽然不需要注册,但是比较大,一下子就拉大了你程序的体积

 

5.         JPG生成PDF

iTextSharp,不过这个家伙也是个肥仔,有3M,我找了好久PDF文件格式,如果能自己拼字符串就好了,那样就可以控制自己程序在几百k大小了。如果有朋友知道介绍给看看

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值