百度文库文章提取器(上)

用过百度文库的小伙伴大部分都会有这种烦恼,不知如何描述,上这张图你大概就明白了
百度文库
起初的解决方案是按F12然后选择元素、复制。即使这样也只能一句话一句话的复制内容,后来随着照相取字app的出现这一问题似乎出现转机,但基于app的操作、广告、识别精度等问题让我感觉玩不来玩不来。学了爬虫之后一直想做个只需要文章链接就能爬取整篇文章的爬虫程序,后来。。。我做出来了(本来想写自己如何如何努力,然后取得成功,不过想想自己的语文功底还是算了)
爬虫的成功少不了这位大佬的视频:https://www.bilibili.com/video/av62819906?from=search&seid=13649877673142418178
另外在GitHub找到一份代码应该是这位大佬写的:https://github.com/Jack-Cherish/python-spider/commit/3c5480d4a187265c0884f5e20019e854150ed306
由于是18年的教程,随着百度文库的更新现在爬取规则已经发生变化,在弄明白整个爬虫程序的开发流程后我决定重新写一个适用现在文库规则的爬虫。这篇文章主要讲百度文库的爬取思路,如果需要源码请移步:https://blog.csdn.net/qq_26024785/article/details/105075077

第一步:明确文章展示方式

经过大量的随机浏览文章,我发现百度文库的文章阅读页有两种版式,我们称之为新版旧版,神奇的事情是同一篇文章的版式是随机的,即你在不同的时间访问同一篇文章,文章阅读页可能是新版也可能是旧版,在这里讨论新版和旧版是因为爬取规则不同,文章内容不受影响。
旧版:旧版百度文库
这个版本的文章大佬的程序应该还是可以正常爬取的。
新版:新版百度文库
同时,新版和旧版中又分doc、txt、ppt等多个文章格式,而平时在百度文库复制文章时大概率是doc和txt格式,所以在写程序的第一个版本时先满足自己最基本的需求即可。
在弄明白百度文章的两个版本之后再确定文章内容的加载方式,最初认为文章内容的前几页在网页源码中,剩下几页的内容通过点击阅读全文后ajax请求再添加到网页源码中,后来发现文章所有页都是通过js代码后期请求再加载的(这样做理论上可以提升网页加载速度)。

第二步:找出文章内容请求链接

这一步算是整个程序最难的地方,也是爬虫程序开发中网页分析的核心。上面说到每一页的内容都是通过js代码后期请求的,那么网页源码中一定有请求的链接,不过源码中链接都是含有转义字符的无法在大量的源码中一眼识别出来。下面讲一下新版doc和txt文档的请求链接是如何找到的

新版doc文档

首先找到一篇doc格式文章,按F12进入开发者工具,点击network–>clear–>刷新网页。这时发现有几个文件名以0.json开头的文件数量与文章页数一直,选中后点击Preview发现body中就是文章内容
json
preview
这个时候点击Headers查看Request URLrequest
有些小伙伴可能有点懵找这个url干啥?前面说了文章的所有内容都是网页源码加载完成后再请求–>服务器返回数据–>将内容添加到网页代码中,而向服务器请求的url就是这个,所以说找到这个url之后就可以通过几个关键字去网页源码中搜所有的请求url(不同页内容的request url大同小异),比如搜索关键字wkbjcloudbos.bdimg.com
source
搜索结果只有6个,正对应文章有6页内容,有了这个就可以在程序中通过正则表达式提取所有的链接,然后我反手给他们request一下,将接收到的数据进行解析提取有效内容。

新版txt文档

找到一篇txt格式的文章,按F12进入开发者工具,点击network–>clear–>刷新网页。可以找到一个名字以文章ID开头的文件,而这个文件中的数据就是文章内容,而且包含所有页的内容。
txtId
找到这个文件的请求链接
request
将Request URL单独拿出来分析:
txturl
分析URL后我们可以知道只要在文章URL和源码中获取所需要的几个数据(id、md5sum、sign、rn、rsign)然后拼接成一个URL字符串进行访问,服务器便会response包含文章内容的文件。
这是新版txt文档的爬取过程,所需要的几个数据都可以在网页源码中获取到,而旧版的txt网页源代码中不能直接获取这几个数据,通过文章ID拼接处URL(https://wenku.baidu.com/api/doc/getdocinfo?callback=cb&doc_id=’ + ID),访问该URL,在response中提取需要的md5sum等数据,剩下的操作同上。这个版本还没有实现对旧版txt文档的爬取,以后有时间会补上。
其他格式(PPT、PDF、XLS)的文档爬取方式大同小异,在这里就不做赘述。

GUI设计

由于这篇文章主要讲百度文库的爬取思路,所以GUI设计这块一笔带过,用到的库是Tkinter,效果演示:
首页
内容页
后续有机会的话将会将此项目移植到我的个人博客网站中,以后只需要到我的网站上就能爬取文章。

做这个小工具的初心是为了提高写报告、论文的质量与速度,爬取思路及源代码仅供学习参考,如果需要下载整篇文章请支持正版。

原文链接: https://www.jhxblog.cn/article/?articleid=20

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
本程序用java编写,运行的时候需要JDK1.5或以上环境,无需安装。程序通过分析CSDN博客源码来生成一些必要的数据,可能在以后使用当中出现爬取不了的情况,可能是CSDN的源码结构修改了。程序只是用于学习之用,严禁用于非法目的而照成CSDN服务过载。 由于生成PDF的时候需要依赖字库,所以在打包程序的时候把一些必要的字库已经放到程序中去了。可能在生成一些PDF文件的时候出现乱码问题,那是因为里面缺少需要的字库,如遇到这个问题,请和本人联系wyphao.2007@163com #################################################### 程序功能: 1、支持输入CSDN博客用户名针对性下载 2、支持选择保存下载的文件 保存的结构目录为: 选择的保存路径\CSDN用户名\img 该用户的头像保存路径 选择的保存路径\CSDN用户名\pdf 生成的PDF文件保存路径 选择的保存路径\CSDN用户名\doc 生成的DOC文件保存路径 选择的保存路径\CSDN用户名\txt 生成的TXT文件保存路径 3、支持获取用户博客信息 4、支持显示用户所有的帖子列表 5、可以自己选择需要下载的帖子,有全选、反选、重置按钮 6、支持下载的文件保存为 pdf、doc、txt三种格式 7、生成的pdf、doc文件支持图片 8、支持进度显示 #################################################### 制作时间:2012年07月17日 - 2012年07月18日 制 作:w397090770 个人博客:http://blog.csdn.net/w397090770 Email :wyphao.2007@163.com 版权所有,翻版不究 ####################################################

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

举个锤子²³³³

有钱的捧个钱场,没钱的借去

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值