百度文库下载需要券,或者vip才能下载

Vip价格高,偶尔下载一次不划算。

不下载复制?不好意思复制也需要vip否则只能一次复制两行。

如何才能以最低成本获取到百度文库里的文档内容呢?

当然是用Python啦!

接下来教大家如何使用Python免费下载百度文档。

由于百度文库的内容是通过网页展示的,那我们猜他是通过后台加载进来的。可以先通过Ctrl+u查看HTML源码,看源码里面是否有文档数据。很遗憾HTML源码里面并没有文档内容。

确定不是通过HTML加载的之后,我们就可以大胆的猜测他是通过json异步加载。所以通过F12打开开发者管理工具network抓包,查看页面加载过程请求的URL。这里会有大量的请求,但是我们仔细观察会发现有一个0.json的URL返回的数据就是文档的文本数据。

拿到请求文档数据的URL后需要确定URL参数。通过查看headers确定请求方式为GET请求。请求参数里x-bce-range和token是变动的,其他都是固定不变。

token这个东西很多时候都会写入到HTML页面里去,用途是防csrf攻击。但是百度文档里面的token有什么用我们不用关心,重要的是这个token那里来。去HTML源代码里查看这两个变量能不能获取到。

果然,在HTML源码里有一段js代码,其中就包含了所有请求文档的URL。看起来有点像,但还是不一样啊!其实这里是包含了转移符 \ ,还有一个比较奇怪的 \x22 其实是一个双引号。把这段不规范的json数据提取出来替换掉 \ 和 \x22就是一个标准的json格式数据。

提取文档数据URL代码实现

def get_document():

# 文库url

url = "https://wenku.baidu.com/view/eefef92fa1116c175f0e7cd184254b35eefd1a97.html?from=search"

sess = requests.Session()

html = sess.get(url).content.decode("gbk")

# 抓取到文档标题

title = re.search('id="doc-tittle-0">(.*?)</span>', html).group(1)

# 使用正则提取 文档内容的url

res = re.search("WkInfo.htmlUrls = '(.*)'", html).group(1)

# \\x22是linux中的引号,替换成Python中的引号

res = res.replace("\\x22", "\"")

# 转成字典

data = json.loads(res)

拿到URL之后继续发送请求获取文档数据,文档数据是分段保存到json里面的,json里面的数据如下图所示。

字段解释:

c: 数据

p: 位置

r: 暂时不确定作用

s: 字体样式

t: 数据格式(word文本,pic图片)

ps: 样式,_enter:1  表示换行,同一段的文本ps值为空

由于图片加载比较特殊,有时候可能通过一个请求加载两张图片,不好确定图片的位置,所以这里暂且不考虑图片,我们只抓取文本。

def get_document():

# ....省略前面代码

# 新建一个文档

document = Document()

string = ""

for i in data["json"]:

url = i["pageLoadUrl"]  # 获取到url

url = url.replace("\\", "")  # url中有转义符\去掉

# 请求文档内容

data = requests.get(url).content.decode("utf-8")

# 提取文本数据

res = re.search("wenku_\d*\((.*)\)", data, re.S).group(1)

# 将json对象数据转成Python对象

data = json.loads(res)

for i in data['body']:

# 判断数据是什么类型

if i["t"] == "word":

# 获取到文本

string += str(i["c"])

# ps中不为空并且_enter==1的时候是换行也就是一段内容

if i["ps"] and i["ps"].get("_enter") == 1:

document.add_paragraph(string)  # 将一段内容写入到word

string = ""  # 重新复制 "" 表示新的一段文本

# 保存word

document.save(title + ".docx")

到这里就已经可以把一个百度文档的文本内容完整下载下来。

网上随机选一篇文档来测试效果,纯文本的文档效果贼好。缺点就是不能同时下载图片插入到word里面去。

百度文档,用Python一键免费下载的更多相关文章

  1. ThinkPHP5.0、5.1和6.0教程文档合集(免费下载)

    我们都知道ThinkPHP是一个免费开源的,快速.简单的面向对象的轻量级PHP开发框架. ThinkPHP6主要更新了什么呢? 1. 支持PHP最新的强类型 2. PSR开发规范得了更广泛的应用 3. ...

  2. 如何实现SP文档库类似百度文档库的效果 (副标题:如何在SP2013文档库的SWF文件用FlexPager显示)

    1. 编辑文档库列表显示页面,如下图: 2. 添加内容编辑器,如下图: 3. 添加如下在[内容编辑器中]-[编辑源],添加如下JS代码,如下图: ​ 代码如下: <scrip type=&quo ...

  3. Java模拟实现百度文档在线浏览

    Java模拟实现百度文档在线浏览 这个思路是我参考网上而来,代码是我实现. 采用Apache下面的OpenOffice将资源文件转化为pdf文件,然后将pdf文件转化为swf文件,用FlexPaper ...

  4. java文档打包成压缩包并且下载

    需求,根据产品ID查询产品详情,产品详情会返回产品的一些文案,以及图片的url.需要做成,将文案信息记录在一个txt文档中,然后图片下载到文件夹,最后下载到本地,下载后自动删除刚才生成的文件夹以及文件 ...

  5. 百度地图点集文档使用python的re模块处理成json的相关写法

    这个实在不好起名字.写这个还不是因为被渣度坑的不要不要的.为什么说他坑呢.参考一下这两个截图的txt文档: 文档资源下载地址:  http://lbsyun.baidu.com/index.php?t ...

  6. Python实现读取Excel文档中的配置并下载软件包

    问题:现在遇到这样一个问题,服务器存储了很多软件包,这些包输入不同的产品,每个产品都有自己的配置,互相交叉,那么到底某一产品所有配置的软件包下载后,占用多大空间呢? 分析:从这个问题入手,了解到:软件 ...

  7. [同步到 MaixPy3 文档] 使用 Python 编程入门开源硬件项目

    本文是给有一点 Python 基础但还想进一步深入的同学,有经验的开发者建议跳过. 前言 在写这篇案例系列的时候 junhuanchen 期望能够引导用户如何成为专业的开发者,不是只会调用代码就好,所 ...

  8. ActiveX、OLE和COM的关系(转自百度文档)

    比较流行的组件模型有COM(Component Object Model,对象组件模型)/DCOM(Distributed COM,分布式对象组件模型)和CORBA(Common Object Req ...

  9. word文档的python解析

    主要两块,第一个是文件类型的转换,第二个是用docx包去对word文档中的table进行parse 1. 文件格式装换 因为很多各种各样的原因,至今还有一些word文档是doc的格式存的,对于这种,如 ...

随机推荐

  1. Azure IoT 技术研究系列4

    上两篇博文中,我们介绍了将设备注册到Azure IoT Hub,设备到云.云到设备之间的通信: Azure IoT 技术研究系列2-设备注册到Azure IoT Hub Azure IoT 技术研究系 ...

  2. 初学oracle第三天

    体系结构 Oracle 采取的是 Client/Server 架构. 3.1 Client   3.1.1 Sqlplus 这是一个轻量级的功能强大的客户端, 是 dba 必须掌握的工具. 我们可以配 ...

  3. java IO操作分类

  4. css盒子模型中的border属性

        认识border属性 我们可以通过boder属性来为元素设置边框:元素的边框 (border) 是围绕元素内容和内边距的一条或多条线.CSS border 属性允许你规定元素边框的样式.宽度和 ...

  5. 7,HashMap

    一,HashMap简介 1,HashMap 是一个散列表,它存储的内容是键值对(key-value)映射. 2,HashMap 继承于AbstractMap,实现了Map.Cloneable.java ...

  6. 阿里云服务器不能使用apt-get

    因为阿里云使用的是自己的源.所以在/etc/apt/sources.list中加上: deb cdrom:[Ubuntu 16.04.3 LTS _Xenial Xerus_ - Release am ...

  7. 在 centos7.5 使用 DockerFile 构建镜像时报错 "Error parsing reference:"microsoft/dotnet:2.2-aspnetcore-runtime AS base"is not a valid repository/tag: invalid reference format"

    运行 dockerfile 时报出的错误 FROM microsoft/dotnet:2.2-aspnetcore-runtime AS base Error parsing reference: & ...

  8. 洛谷 P4571 BZOJ 2257 [JSOI2009]瓶子和燃料

    bzoj题目链接 上面hint那里是选择第2个瓶子和第3个瓶子 Time limit 10000 ms Memory limit 131072 kB OS Linux Source Jsoi2009 ...

  9. Vue中v-for配合使用Swiper插件问题

    问题描述: 在一个页面中需要一个用swiper的轮播图,数据大概有40条,每一屏幕的swiper只显示其中的n条数据. 代码描述: <div id="app"> < ...

  10. Java 有关类字段的初始化

    实例代码 package text; public class MethodOverload { /** * @param args */ public static void main(String ...