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

  • 背景
  • 思路
  • 预览效果
  • 代码
  • 代码解析
  • 改进方向
  • 参考资料
  • 免责申明

背景

我想很多人会有与我一样的经历,想复制百度文库的内容却发现要开会员,天下苦百度文库久矣,本是广大网友存放文档的地方,结果各种下载券,会员不胜其烦,那么能不能用技术手段避开这一结界呢? 简化到只需要输入文档地址,然后文档就乖乖的保存到自己电脑上呢?想想就很巴适,利用python爬虫技术确实可以做到这一点。

想要破解百度的门禁在实际操作层面也是一件比较麻烦的事情,但好在天无绝人之路,哪里有加密哪里就有解密,先说一说博主的需求,博主主要是写数学讲义的时候,想收集一些经典习题,然后自己讲解并编辑排版,感兴趣的朋友可以关注微信公众号“三行科创”,而网上很大一部分素材都集中在百度文库,博主希望技术能够做到,当输入文档的地址后,能够把文档里面的文字内容原封不动的复制出来,并且文档里面的配图素材也能一并弄下来,这样就相当于素材收集齐全。

Created with Raphaël 2.2.0请输入文档地址获取文档摘要(docid, title, doctype)text & image结束yes

思路

  • downloadWenku实现文档下载;
  • 调用fetch_text函数解析文档里文字内容,将文字内容统一格式写入word;
  • 调用 fetch_image函数获取文档里插图素材,将图片内容保存到同名文件夹下;

预览效果


说明:其中downloadwenku.py文件为主程序,readme.md是这篇博客的原稿,doc文件夹下面存放同文档名的word文档,image存放同文档的图片素材文件夹;

代码

import os
import re
import json
import requests
header = {'User-agent': 'Googlebot'} #构造请求头def fetch_text(doc_id, title, doc_type): #获取文档的文字内容abstract_url = 'https://wenku.baidu.com/api/doc/getdocinfo?callback=cb&doc_id=' + doc_id #构造摘要地址abstract = requests.get(abstract_url, headers =header, timeout =30) #获取文档摘要信息,包括md5码,总页数,rsign等md5 = re.findall(r'"md5sum":"(.*?)"', abstract.text)[0] #md5pn = re.findall(r'"totalPageNum":"(.*?)"', abstract.text)[0] #页码rsign = re.findall(r'"rsign":"(.*?)"', abstract.text)[0] #rsigncontent_url = 'https://wkretype.bdimg.com/retype/text/' + doc_id + '?rn=' + pn + '&type=txt' + md5 + '&rsign=' + rsign #构造文档内容的地址content = requests.get(content_url, headers = header, timeout =30) #对文档内容请求page_contents = json.loads(content.text) #所有页的内容形成一个listdoc_path = r"D:\项目\百度文库下载与文本解析\doc"+ os.sep + title + ".doc" #选择要保存的本地doc文件名with open(doc_path, mode = 'w+', encoding ='utf-8') as file:  #打开文件for page_content in page_contents: #每一页循环lines = page_content['parags'][0]["c"].replace('\r','').replace('\\n','') #每一页的文字内容是一个整体file.write(lines) #写入doc文档file.close() #关闭docprint("文本素材保存完毕")def fetch_image(url, doc_id, title, doc_type):#获同篇文档里面的图片素材image_path = r"D:\项目\百度文库下载与文本解析\image"+os.sep+title #保存图片的路径if not os.path.exists(image_path): #创建同名文件夹保存图片os.mkdir(image_path)resource = requests.get(url).content.decode('utf-8', 'ignore')image_urls = re.findall(r'(https:\\\\/\\\\/wkbjcloudbos.bdimg.com.+?0.png.+?\\")', resource) #正则图片素材地址#print(len(image_urls))for idx, image_url in enumerate(image_urls):image_url = image_url.replace("\\", "").replace('\"', "")if len(image_url)< 650:img = requests.get(image_url, headers = header, timeout =30).contentwith open(image_path+os.sep+str(idx)+".png", "wb") as f:f.write(img)f.close()print("图片素材保存完毕")def downloadWenku(url): #进入文档地址获取文档基础信息,包括文档id,文档标题,文档类型html = requests.get(url, headers = header, timeout = 30)html.raise_for_status()html.encoding = 'gbk'doc_id = re.findall(r"docId.*?:.*?\'(.*?)\'\,", html.text)[0] #docidtitle = re.findall(r"title.*?\:.*?\'(.*?)\'\,", html.text)[0] #文档标题doc_type = re.findall(r"docType.*?\:.*?\'(.*?)\'\,", html.text)[0] #文档类型#print(doc_id, title, doc_type, doc_type)fetch_text(doc_id, title, doc_type) #调用下载文字函数fetch_image(url, doc_id, title, doc_type) #调用下载图片函数if __name__ =="__main__":url = input("\n请输入文档的地址, 回车键确认:")downloadWenku(url)

代码解析

代码几乎都标有中文注释,如果还有不懂的欢迎来“三行科创”微信公众号交流群。

改进方向

1,保存为1997-2003以后的docx格式;
如果保存为doc格式,用2007以后的word软件打开会出现让你选择文档可读编码utf-8,这个最好在保存的同时处理掉;

2,将文档里面的图片有一部分可以显示,有一部分似乎不支持文件格式;
3,对PPT似乎无效;

参考资料

1, https://my.oschina.net/u/4579171/blog/4344181

2, https://www.cnblogs.com/LQ6H/p/12940524.html

免责申明

爬虫技术仅供技术交流使用,不得作为商业用途。

百度文库文档(文字和图片)相关推荐

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

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

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

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

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

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

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

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

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

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

  6. 网上文库文档免费下载

    网上有各种文库集,比如百度文库,道客巴巴,csdn.net博客,答案网等各式文库. 现在简单介绍下几种下载文库的方法. 一:冰点文库         最适合百度文库文档下载,简单易用.         ...

  7. java word添加图片_Java 替换word文档文字并指定位置插入图片

    先说下 需要的依赖包 org.apache.poi poi-excelant 3.12 org.apache.poi poi-scratchpad 3.12 org.apache.poi poi-oo ...

  8. word默认文字环绕方式是什么_在Word 2010文档中设置图片文字环绕方式

    默认情况下,插入到Word 2010文档中的图片作为字符插入到Word 2010文档中,其位置随着其他字符的改变而改变,用户不能自由移动图片.而通过为图片设置文字环绕方式,则可以自由移动图片的位置,操 ...

  9. wps怎么将图片嵌入文字里_wps文档怎么把图片嵌入

    型号:华为电脑mate book 14 系统:windows10 软件版本:wpsoffice13.0.503.101 具体方法步骤: 1.打开WPS点击加号:2.点击新建文档 :3.点击空白: 4. ...

最新文章

  1. Python学习路程day18
  2. MemSQL初体验 - (3)性能测试
  3. php中对象的遍历输出,PHP中的对象遍历技巧
  4. MongoDB使用小结:一些不常见的经验分享
  5. java垃圾回收GC(学习笔记)
  6. 函数fun的功能是将s所指字符串_21 函数的简介
  7. paraview如何查看速度三维坐标_AutoCAD三维建模与AutoLISP地形展点检查隧道工程开挖效果...
  8. 从零开始学前端:初识函数,合法属性与自定义属性 --- 今天你学习了吗?(JS:Day2)
  9. 电脑清理代码_网络安全宣传周丨电脑中病毒,这样处置!
  10. delphi 中文转 ascii编码_【转】Python 中文编码
  11. Killer网卡驱动导致蓝屏修复方法
  12. 键盘常用ASCII码对照表
  13. Hybird app开发入门之Native和H5页面交互原理
  14. php 木马,PHP后门木马详解
  15. linux twiki 添加权限,Ubuntu上TWiki安装和使用心得
  16. 360众测靶场云文件服务器,360 政企安全官网_帮助应对高级威胁攻击
  17. 三端稳压管怎么接线及方法说明
  18. html5 css3时间特效,炫酷纯CSS3响应式垂直时间轴特效
  19. 抢红包算法之线段切割法的python简单实现
  20. Python漫画爬虫开源 66漫画 AJAX,包含数据库连接,图片下载处理

热门文章

  1. PHP Unicode编码与解码_Unicode转中文_中文转Unicode字符
  2. 在Echarts的barChart中,xAxis的axisLabel中,interval参数如何解释?
  3. linux系统安装tv软件下载,linux怎么安装teamviewer|TV
  4. SQL 入门,看这篇就够了 ---- 基础篇
  5. VerifyCodeUtil 验证码工具类的使用
  6. 自己做量化交易软件(43)小白量化实战16--利用小白量化金融模块在恒生PTrade交易系统(交易端)上仿大智慧指标回测及实战交易设计
  7. C语言----结构体及其应用
  8. 史上最详细的Windows10系统离线安装.NET Framework 3.5的方法(附离线安装包下载)
  9. m基于MATLAB-GUI的GPS数据经纬度高度解析与kalman分析软件设计
  10. [转]Java求实际利率之Excel函数RATE