如何用爬虫攻克令人讨厌的百度文库?(菜鸟向)
天下苦百度文库久矣!

不知从何时起,想从百度文库下载一份文档都成了非常困难的事情。每当我看到需要的文本而灵感大发,兴奋地Ctrl+C、V时,却发现,诶嘿!!啥也妹有😅。。。
我气地抓耳挠腮,想上B站找有什么免费下载器,铺天盖地而来的却是一大堆垃圾宣传,什么“公众号”“回复”之类的。所以迫于无奈只好自己写了一点点小东西。
重要的事情说三遍:
下载链接在文章末尾!
下载链接在文章末尾!!
下载链接在文章末尾!!!

攻克经历
1.寻找数据
随便找一篇百度文库的文档。这里就以《2022立秋节气的风俗及养生知识》(文档ID:041145275b1b6bd97f192279168884868662b87b)为例,打开F12,在元素界面搜索文档内容,就会发现:啥也搜不到捏😊

这是因为百度文库中的文档都是JavaScript动态加载的,在浏览器(Edge)中关闭JavaScript后回来看就会发现:

顺便提一嘴,很多一复制就弹窗要会员、登录的网站只要把JS关了就能随便复制了。
翻一翻网络选项卡,在搜索中搜索文档内容,就能在文档选项下找到一份文档:

这个文档应该对应了页面中加载的文本,所以只有前几页已加载的内容中的文本.到这一步,已经能够拿到一部分数据了,但是 , 做事就要做绝!
鉴于本人为新手,就开始了为30分钟的无强度学习。东拼西凑的知识,最后ChatGPT告诉我:
异步加载: 很多现代网站使用异步加载技术,如 AJAX(Asynchronous JavaScript and XML)来实现页面的动态更新。通过异步加载,网页可以在不刷新整个页面的情况下,只更新部分内容,从而提升用户体验和页面加载速度。--------ChatGPT
然后,我尝试点击 "展开全文" 按钮,然后,很快啊,一个新的可疑的请求引起了我的注意:

分析响应的内容,就能发现,这是一个json格式的响应,其中的pageIndex代表了页码,pageLoadUrl则代表了每一页的文本加载的URL,随便点开一个URL,就能发现一大堆Unidoce编码的汉字:
{"c":"\u65b9\u5f0f\u5728\u79cb\u5b63\u683d\u79cd\u7684\u841d\u535c\u662f\u6700\u597d\u5403\u7684\uff0c\u7279\u522b\u662f\u971c\u6253\u4ee5\u540e\u3002\u800c\u4ece\u516b\u6708\u4efd\u4e0b",
用在线工具解码后就可以发现:

成功!

理论存在,实践开始!!

程序部分(python)
经典

实验后发现,上面请求的URL可以简化为只有文档id一个参数的地址,pn为页数,但是一般免费的文档都不会超过100页:
这里直接用json库解析数据了,把每一页的URL存入一个列表:
请求每一页的文本,并进行一点文本处理:
使用BeautifulSoup库处理主页,取得文档的标题:
ppt类文档可获取图片:
文件的存储路径:
外加一大堆的bug处理...😅

重要问题1

然后,
我的程序(屎山),
终于,
初现雏形了!

成果展示
文本

PPT


下载链接
源代码(推荐):https://github.com/TinkerAC/Baiduwenku-downlload.git
蓝奏云:https://wwpn.lanzouw.com/iGRFv15e56re
密码:hj75
(如果你想直接运行的话)

免责声明
1. 本脚本仅用于学习交流使用。作者不对脚本的任何误用或滥用承担任何责任。
2. 本脚本可能存在错误和缺陷,作者不对其准确性、完整性或适用性做出任何保证。
3. 本脚本的使用风险由用户自行承担。作者不对因使用本脚本而导致的任何损失、损害或问题负责。
4. 用户在使用本脚本时,应遵守所有适用的法律法规和道德标准。任何非法或滥用行为均与作者无关。
5. 本脚本可能会涉及第三方库、工具或资源,这些资源受到其各自的许可协议约束。用户需遵守相关许可协议。
请注意,本免责声明可能会根据需要进行调整和修改。作者保留在任何时候修改免责声明的权利。继续使用本脚本将被视为您已经同意了任何修改后的免责声明。
最后,作者对您使用本程序的结果不承担任何责任。感谢您的理解和合作。

结尾
小声BB:作者第一次写文章,做的不好还请见谅,好用的话别忘了支持一下哦!
大佬们看一乐就好了,作者的编程水平还有待提升👉🤣
欢迎小伙伴们在地下评论留言哦!
(●'◡'●)