今天要在百度文库下一个文档,由于之前测试,清掉了cookies,所以下载文档时突然提示登陆(之前一直都是自动登陆,记不住密码啊……),试了半天才想起来密码,就打算在分析下。

要说自己对百度文库也算缘分不浅,当年大二的时候我们工作室接到一个项目,就是采集互联网的各类电子文档,以供某公司建立文库。当时百度虽说还上线不到一年,但是却已经很有名气,因此也是我们的重点关注对象。下边开始分析(只看下载分析直接看(二)就行了): 

一、文档在线展示的实现方式和采集策略

在线文库普遍采用的技术有两大类:一是将文档转为swf文件,然后页面用flash展示;二是按照文档原有结构,生成html结构展示。就我们用户而言,多数时候更喜欢第二种,给人感觉更直观一点,但是就实现难度而言,第二种也比较麻烦,原因不多说,想想就知道。
    当时在线文库主要采用的都是flash方式,这种方式既实现方便,又能够有效的防止文档被恶意抓取,虽说生成的swf文件很容易拿到,但是对于采集者而言,想得到的往往是文档内容。那么就真的没办法了吗?其实不然,我们了解下这种方式的实现原理就会发现,绝大多数swf展示文档都是将文档每页生成图片,然后再生成swf的,那么我们只要通过工具将swf中图片提取出来(这个自己查资料吧),再通过ocr将文字识别出来就行了。
    好吧,我想你看到ocr就没啥心情在看下去了,这玩意目前免费的还没几个靠谱的,那么我们来看下第二种方法。第二种就比较简单了,因为文档内容直接嵌入网页,我们直接提取出来就行了呗,小娃娃都会呢。可是我要说这连第一种都不如,因为有两个关键问题:一是采用这一方式的不多,就百度文库来说只有一部分文档是这么实现的,杜宇PPT这一类富文本元素较多的,还是flash实现;二是你即使内容提取出来了,想要按原样式生成文档,也很难的。
    这也不行,那也不行,那咋着行呢?其实上边都是废话,想要文档,直接下载不就行了。

二、百度文库文档下载分析

1、准备好装备

需要准备好以下装备:

  • 百度账号
  • chrome/firefox
  • fiddler2(不是必备,但是用过你就爱不释手)
  • 新建一个txt文件方便记录信息

2、找到文档下载链接

我们先找个账号登录,随便打开一个不要财富值的文档(最好大一点,1M以上),F12打调试工具,然后下载文档,可以看到Network出现很多请求,那么哪个请求时下 载链接呢?直接将请求按照Siz e大小排序,你会发现最大的那个请求返回内容特别大,这个就是下载链接,请求详情如下:

请求链接:
http://bs.baidu.com/wenku41/%2F1a34b536b85dec92517f7ef702e577b4?sign=MBOT:y1jXjmMD4FchJHFHIGN4z:wL%2Bt8HZ%2B9z7YjU2vGwjLZAJH868%3D&time=1393158775&response-content-disposition=attachment;%20filename=%22%B4%BA%CD%ED%B2%BB%CD%EA%C8%AB%BD%DA%C4%BF%B5%A5.doc%22&response-content-type=application%2foctet-stream

多下载几个就会发下这三部分是变化的,第一部分搜索文档页源码就能找到,filename后的一眼就能看出来是文件名的url编码,而第两部分在原页面却找不到,可以想到应该是从服务器返回的,那么我们再来看看其他请求。可以很容易发现有个叫download的请求,这名字很明显了,我们看下这个请求:

response部分:

激动人心的时刻来了,在response中,Location就是文档下载链接。那么这个请求有事怎么发起的呢?首先看下请求参数,除了doc_id,其他几项都找不到,在看下referer,链接就是之前的文档页,我们在这个页面搜一下“ downloadToken ”,会惊喜的发现下边这个表单:

<form name="downloadForm" action="/user/submit/download" method="post" target="runDown"><input name="ct" value="20008" type="hidden" /><input name="doc_id" value="b732f1ee240c844769eaee90" type="hidden" /><input name="retType" value="newResponse" type="hidden" /><input name="sns_type" type="hidden" /> <input type="hidden" name="storage" value="0" /><input type="hidden" name="useTicket" value="0" /> <input type="hidden" name="downloadToken" value="e1de787724d82b8c18c1be98438782eb" /> <input type="hidden" name="sz" value="15872"></form>

到此真相大白:在文档也点击下载后,首先用词表单向download页发起请求,服务器则会返回文档的下载地址并跳转,然后返回文档流。

3、模拟请求

到这里就用到fiddler2了,我们如下构造请求(这里特地找了一个未下载过需要财富值的,):

执行......然后发现返回code:200,response中没有Location。那么哪里出问题了呢?我们模拟求情和浏览器操作哪一点不一样呢?登 录!模拟请求中我们没有登 录,直接把浏览器中已登录的cookies贴过来,然后在执行......:

成功!请求download也需要登陆信息,那么如何登陆呢?请参见 模拟百度登录
    此次分析到此结束,代码就不贴了,照着贴吧登陆改了一个最后请求cookies总是空的,不知道是不是因为跨域需要手动设置cookies,但是按照以上的分析肯定能实现下载的。

转载于:https://www.cnblogs.com/good-temper/p/3563699.html

百度文库文档下载分析相关推荐

  1. 文秀才文档管理系统文档管理,CAD, 图纸管理, 百度文库, 文档在线预览

    原文来自 http://www.fanganwang.com/Product-detail-item-1440.html,欢迎转载. 关键字:文档管理,CAD, 图纸管理, 百度文库, 文档在线预览 ...

  2. 百度文库文档(文字和图片)

    百度文库文档(文字和图片) 背景 思路 预览效果 代码 代码解析 改进方向 参考资料 免责申明 背景 我想很多人会有与我一样的经历,想复制百度文库的内容却发现要开会员,天下苦百度文库久矣,本是广大网友 ...

  3. SpringBoot实现百度文库文档上传,通俗易懂适合萌新

    介绍 最近项目需要将word文档上传到百度文库,所以去百度智能云上看了下API,发现居然没有,而且百度文库的文章在网上居然没多少人发教程.所以这个文章是发下如何将word上传到百度文库上,因为我经常去 ...

  4. python爬虫实战:selenium下载百度文库文档

    利用selenium进行页面操作 草草地写了一下,文字是爬下来了,但是还有格式等问题,遇到复杂的文档可能不通用,有点蛋疼. 用安卓模拟登陆,让页面简单一点,电脑网页有点复杂. 之后有空再来改进 fro ...

  5. 【PC工具】更新免费文库文档下载器,免费下载文库文档

        之前分享的大圣文库开始收费了(WC),今天更新一个更简单的方法,不用下载安装软件,直接在豆丁文库域名后增加365即可,百度文库不行,百度文库域名加vvv的方法我今天(191218)测试已经不好 ...

  6. 【PC工具】更新免费文库文档下载器,破解文库下载器,免费下载文库文档

    上次分享的大圣文库1.26版本的用不了了,运行就弹窗让更新(有时间再研究一下怎么废掉弹窗),更新后要钱....总结就是这个软件不是什么破解版,要钱了,我又被坑了(讲道理我也能理解,道理我都懂,但是.. ...

  7. 【PC工具】免费文库文档下载器,破解文库下载器,免费下载文库文档,文库下载器...

    软件功能: 功能就不细说了,免费下载文档,大家都懂.据说可以下载这些网站: 能用多久不知道,至少今天能用,免费的别客气. 使用方法: 在文档地址中填入需要下载的文档链接,点击下载提取,下载位置可以指定 ...

  8. 爬虫生活实录之---百度文库文档破解

    帮同学找考试相关资料的时候瞄上了百度文库(百度文库找期末考的试卷确实特别方便),不想出钱又不想下冰点,复制粘贴还嫌累,灵机一动想用爬虫来解决这个问题.2333我凭本事爬的文档为什么要给钱 目标:搞定百 ...

  9. 【PC工具】更新免费文库文档下载器,免费下载文库文档,冰点下载器

        节省大家时间先发总结: 今天更新的是亲测能用的冰点下载器     大圣文库就不用试了,收费的,目测事前能用是推广 域名加365或vvv的方法好像不好用了 总结:用今天更新的冰点文库 版本:v3 ...

  10. Java实现仿百度文库文档在线阅读

    为了实现这个功能,我们需要用到如下软件,Java+FlexPaper+SwfTool+OpenOffice这四大件. 1.思路 我们将doc.ppt等文档格式通过openoffice转换成pdf的格式 ...

最新文章

  1. R语言boxplot绘制箱线图
  2. mysql+enable+sql+log_CentOS7下利用rsyslog+loganalyzer配置日志服务器及Linux和windows客户端配置...
  3. matplotlib 画多条折线图且x轴下标非数值
  4. mysql5.6.24怎么打开_mysql 5.6.24 安装配置方法图文教程
  5. 进栈顺序为abcd则出栈顺序为_进栈顺序为a、b、c、d,则出栈顺序可以为?
  6. 拼接Sql语句的写法
  7. 11月22日云栖精选夜读:双11享Go了吗?2017阿里双11在线峰会续写科技盛宴!
  8. 串-第4章-《数据结构题集》答案解析-严蔚敏吴伟民版
  9. 查看显卡显存_选购显卡必须知道的五大参数及分类推荐购买显卡
  10. 树莓派搭建文件服务器
  11. 高中数学如何考120以上高中数学如何快速提高
  12. Python实现繁体字和简体字的相互转换
  13. 许知远:嗨!Julia
  14. android studio Statistic插件不显示
  15. PHP截取固定长度字符串函数
  16. MySQL这一章就够了(一)
  17. 【C/C++】超大遥感影像读取和存储 GDAL
  18. c++输入10个数/输入n个数,求其平均值
  19. redis设计与实现-数据库篇
  20. 数模每日小练习——数据处理——插值

热门文章

  1. 谁是小米真正的友商——小米中国受让专利来源分析
  2. python实现sip协议_SIP协议的常见命令 - HouWeiGui的个人空间 - OSCHINA - 中文开源技术交流社区...
  3. rdkit 计算环、芳香环数
  4. php做推送服务端实现ios消息推送
  5. 算法——排序——冒泡排序图解动画
  6. ZigBee协议栈点播
  7. 图论及其应用 2019年 期末考试答案总结
  8. 黑客X档案 2002~2007 NPM、PYPI、DockerHub 备份
  9. 必须收藏!Jboss下载(全版本秒下载!)
  10. gitbook 插件 图片查看