Python百度文库爬虫之txt文件
Python百度文库爬虫之txt文件
说明:
对于文件的所有类型,我都会用一篇文章进行说明,链接:
- Python百度文库爬虫之txt文件
- Python百度文库爬虫之doc文件
- Python百度文库爬虫之pdf文件
- Python百度文库爬虫之ppt文件
- [Python百度文库爬虫之xls文件
- Python百度文件爬虫终极版
一.网页分析
txt文件最容易爬取的文件,此文件类型不需要进行文件排版,直接爬取并保存
from IPython.display import Image
Image("./Images/txt_0.png",width="600px",height="400px")
此文件的链接(URL):https://wenku.baidu.com/view/147d495158eef8c75fbfc77da26925c52cc5913d.html?fr=search
二.URL分析
我们查看网页源代码发现没有我们需要的文件数据,我们只能查看其它相关的URL。发现有个链接存在我们需要的文件数据:
https://wkretype.bdimg.com/retype/text/147d495158eef8c75fbfc77da26925c52cc5913d?md5sum=aa717cd0960c7940d5f404b32b10d5e5&sign=72df814876&callback=cb&pn=1&rn=6&type=txt&rsign=p_6-r_0-s_f3056&_=1587947981910
Image("./Images/txt_1.png",width="600px",height="400px")
此链接所需的参数为:
- md5sum: aa717cd0960c7940d5f404b32b10d5e5
- sign: 72df814876
- callback: cb
- pn: 1
- rn: 6
- type: txt
- rsign: p_6-r_0-s_f3056
- _: 1587947981910
Image("./Images/txt_2.png",width="600px",height="400px")
说明一下:此链接还有一个doc_id的文件id的参数,只是我们输入下载文件链接时可以获取:
doc_id=re.findall(‘view/(.*?).html’,url)[0]
此url是下载文件的链接
对于上面所需的参数,我们需要按照时间线查找上面的链接,查看是否有数据传输接口包含我们需要的数据,通过查看我们找到了一个数据接口:
https://wenku.baidu.com/api/doc/getdocinfo?callback=cb&doc_id=147d495158eef8c75fbfc77da26925c52cc5913d&t=1587947982553&_=1587947981909
Image("./Images/txt_3.png",width="600px",height="400px")
上面链接包含我们部分我们需要的链接参数:
- md5sum: aa717cd0960c7940d5f404b32b10d5e5
- sign: 72df814876
- type: txt
- rsign: p_6-r_0-s_f3056
没有获取的链接参数有:
- callback: cb
- pn: 1
- rn: 6
- _: 1587947981910
参数callback为常数参数,pn与文件的页数(pageNum)相关,主要是_参数,我们猜到这个是类似时间戳的参数,对于这种前后关联的请求,处理时一般采用Requests的session
import requestsurl='https://www.baidu.com'
session=requests.session()
content=session.get(url).content.decode('utf-8')
添加说明一下,我们需要解析我们文件链接(URL)的网页源代码,由于我们需要的数据非格式数据,不能使用lxml,bs4等数据解析器,只能使用Re正则表达式,关于正则表达式的学习:链接
Image("./Images/txt_4.png",width="600px",height="400px")
三.程序调试
1.文件信息获取
import requests
import json
import re
import ossession=requests.session()url=input("请输入下载的文库URL地址:")content=session.get(url).content.decode('utf-8')
doc_id=re.findall('view/(.*?).html',url)[0]
types=re.findall(r"docType.*?:.*?'(.*?)'",content)[0]
title=re.findall(r"title.*?:.*?'(.*?)'",content)[0]
请输入下载的文库URL地址: https://wenku.baidu.com/view/8edb30e82dc58bd63186bceb19e8b8f67c1cef8e.html?fr=search
content_url='https://wenku.baidu.com/api/doc/getdocinfo?callback=cb&doc_id='+doc_idcontent=session.get(content_url).content.decode('gbk')
md5sum=re.findall('"md5sum":"(.*?)",',content)[0]
md5sum
'&md5sum=aa717cd0960c7940d5f404b32b10d5e5&sign=72df814876'
rsign=re.findall('"rsign":"(.*?)"',content)[0]
rsign
'p_6-r_0-s_f3056'
pn=re.findall('"totalPageNum":"(.*?)"',content)[0]
pn
'6'
content_url='https://wkretype.bdimg.com/retype/text/'+doc_id+'?rn='+pn+'&type='+types+md5sum+'&rsign='+rsign
content=json.loads(session.get(content_url).content.decode('gbk'))
result=''for item in content:for i in item['parags']:result+=i['c']
filename=title+'.txt'with open(filename,'w',encoding='utf-8') as f:f.write(result)f.close()
Image("./Images/txt_5.png",width="600px",height="400px")
四.函数编程
1.程序改进
当我请求这个文件内容时:https://wenku.baidu.com/view/8edb30e82dc58bd63186bceb19e8b8f67c1cef8e.html?fr=search。这个txt文件的加载过程与其他txt文件不同,它所需的参数都在这个网页中,不需要数据传输接口
Image("./Images/txt_6.png",width="600px",height="400px")
所需要的参数都在源网页中:
- md5sum: bb3ae60282c367a61adf49c6a72bdbab
- sign: 885b0be3b9
- callback: cb
- pn: 1
- rn: 3
- type: txt
- rsign: p_3-r_0-s_c8b7a
- _: 1587970284175
Image("./Images/txt_7.png",width="600px",height="400px")
参数获取方式与前面类似:
title=re.findall(r'<title>(.*?). ',content)[0]md5sum=re.findall('"md5sum":"(.*?)",',content)[0]
rsign=re.findall('"rsign":"(.*?)"',content)[0]
pn=re.findall('"show_page":"(.*?)"',content)[0]content_url='https://wkretype.bdimg.com/retype/text/'+doc_id+'?rn='+pn+'&type=txt'+md5sum+'&rsign='+rsign
content=json.loads(session.get(content_url).content.decode('utf-8'))
2.完整代码
import requests
import json
import re
import ossession=requests.session()path="F:\\桌面\\Files"if not os.path.exists(path):os.mkdir(path)def parse_txt1(code,doc_id):content_url='https://wenku.baidu.com/api/doc/getdocinfo?callback=cb&doc_id='+doc_idcontent=session.get(content_url).content.decode(code)md5sum=re.findall('"md5sum":"(.*?)",',content)[0]rsign=re.findall('"rsign":"(.*?)"',content)[0]pn=re.findall('"totalPageNum":"(.*?)"',content)[0]content_url='https://wkretype.bdimg.com/retype/text/'+doc_id+'?rn='+pn+'&type=txt'+md5sum+'&rsign='+rsigncontent=json.loads(session.get(content_url).content.decode('gbk'))result=''for item in content:for i in item['parags']:result+=i['c']return resultdef parse_txt2(content,code,doc_id):md5sum=re.findall('"md5sum":"(.*?)",',content)[0]rsign=re.findall('"rsign":"(.*?)"',content)[0]pn=re.findall('"show_page":"(.*?)"',content)[0]content_url='https://wkretype.bdimg.com/retype/text/'+doc_id+'?rn='+pn+'&type=txt'+md5sum+'&rsign='+rsigncontent=json.loads(session.get(content_url).content.decode('utf-8'))result=''for item in content:for i in item['parags']:result+=i['c']return resultdef save_file(title,filename,content):with open(filename,'w',encoding='utf-8') as f:f.write(content)print("文件"+title+"保存成功")f.close()def main():print("欢迎来到百度文库文件下载:")print("-----------------------\r\n")while True:try:print("1.doc \n 2.txt \n 3.ppt \n 4.xls\n 5.ppt\n")types=input("请输入需要下载文件的格式(0退出):")if types=="0":breakif types!='txt':print("抱歉功能尚未开发")continueurl=input("请输入下载的文库URL地址:")# 网页内容response=session.get(url)code=re.findall('charset=(.*?)"',response.text)[0]if code.lower()!='utf-8':code='gbk'content=response.content.decode(code)# 文件iddoc_id=re.findall('view/(.*?).html',url)[0]# 文件类型#types=re.findall(r"docType.*?:.*?'(.*?)'",content)[0]# 文件主题#title=re.findall(r"title.*?:.*?'(.*?)'",content)[0]if types=='txt':md5sum=re.findall('"md5sum":"(.*?)",',content)if md5sum!=[]:result=parse_txt2(content,code,doc_id)title=re.findall(r'<title>(.*?). ',content)[0]#filename=os.getcwd()+"\\Files\\"+title+'.txt'filename=path+"\\"+title+".txt"save_file(title,filename,result)else: result=parse_txt1(code,doc_id)title=re.findall(r"title.*?:.*?'(.*?)'",content)[0]#filename=os.getcwd()+"\\Files\\"+title+'.txt'filename=path+"\\"+title+".txt"save_file(title,filename,result)except Exception as e:print(e)if __name__=='__main__':main()
欢迎来到百度文库文件下载:
-----------------------1.doc 2.txt 3.ppt 4.xls5.ppt1.doc 2.txt 3.ppt 4.xls5.ppt请输入需要下载文件的格式(0退出):txt
请输入下载的文库URL地址: https://wenku.baidu.com/view/147d495158eef8c75fbfc77da26925c52cc5913d.html?fr=search文件最新IT书籍列表保存成功
1.doc 2.txt 3.ppt 4.xls5.ppt请输入需要下载文件的格式(0退出):txt
请输入下载的文库URL地址: https://wenku.baidu.com/view/9a41886f26d3240c844769eae009581b6bd9bd6e.html?fr=search文件一个循环网络爬虫保存成功
1.doc 2.txt 3.ppt 4.xls5.ppt请输入需要下载文件的格式(0退出):txt
请输入下载的文库URL地址: https://wenku.baidu.com/view/8edb30e82dc58bd63186bceb19e8b8f67c1cef8e.html?fr=search文件Twitter爬虫核心技术:全自动抓取世界上的热门主题以及转推,引用,回复的用户的最新微博保存成功
1.doc 2.txt 3.ppt 4.xls5.ppt请输入需要下载文件的格式(0退出):txt
请输入下载的文库URL地址: https://wenku.baidu.com/view/df7ffa19b7360b4c2e3f6495.html?fr=search文件爬虫技术介绍保存成功
1.doc 2.txt 3.ppt 4.xls5.ppt请输入需要下载文件的格式(0退出):0
Image("./Images/txt_8.png",width="600px",height="400px")
3.使用pyinstaller打包
pyinstaller parse_txt.py
from IPython.display import Image
Image("./Images/txt_9.png",width="600px",height="400px")
4.运行效果
文件存储路径:F:\桌面\Files
Image("./Images/parse_txt.gif",width="600px",height="400px")
Image("./Images/txt_10.png",width="600px",height="400px")
5.完整代码
Github链接:https://github.com/LQ6H/Python_spider
百度网盘链接:
链接:[https://pan.baidu.com/s/1kdtu0oVIJprocl5FwPatOw]
提取码:szxi
Python百度文库爬虫之txt文件相关推荐
- python爬取百度文库doc_Python百度文库爬虫之doc文件
Python百度文库爬虫之doc文件 说明:此文件是在爬取txt文件下的基础进行的,因此重复内容会一笔带过,不懂请看前面爬取txt文件链接 对于文件的所有类型,我都会用一篇文章进行说明,链接: 一.网 ...
- python 百度文库 签到_Python百度文库爬虫终极版
百度文库爬虫 我们在开始爬虫之前,首先要了解网页的信息和结构,然后获取请求的url和参数(payloads)来得到所要的数据并处理.接下来我们根据: 一.网页分析 二.爬虫编写 三.运行与结果 四.程 ...
- 如何用python和pip安装在txt文件中配置好版本的库包
如何用python和pip安装在txt文件中配置好版本的库包 文章目录: 一.建立库包版本的txt配置文件 二.安装txt配置文件中的库包 有时候你自己用python实现一个项目,然后想把它在gith ...
- python批量处理txt_浅谈Python批处理文件夹中的txt文件
1 文件处理形式 近期由于处理大量数据,所以对于采用python进行处理文件的一些操作也打算整理一下:接下来主要说一下如何处理目录下的一系列txt文件.首先看一下我们将要处理目录下的15个类似的数据文 ...
- python爬去百度文库资料_Python在线百度文库爬虫(免下载券)
百度文库,文字类型的资源(如txt, doc, pdf),是可以在前端源码分析获取到的,如果能按照规则合理的提取这些文字资源,就可以实现免下载券获取资源. 作者完成了百度文库的在线版爬虫,只需提供文库 ...
- 《脚本》Python在线百度文库爬虫(免下载券)
百度文库,文字类型的资源(如txt, doc, pdf),是可以在前端源码分析获取到的,如果能按照规则合理的提取这些文字资源,就可以实现免下载券获取资源. 作者完成了百度文库的在线版爬虫,只需提供文库 ...
- python百度文库免费_Python在线百度文库爬虫(免下载券)
百度文库,文字类型的资源(如txt, doc, pdf),是可以在前端源码分析获取到的,如果能按照规则合理的提取这些文字资源,就可以实现免下载券获取资源. 作者完成了百度文库的在线版爬虫,只需提供文库 ...
- python 百度网盘 群组 文件_py实现百度云批量生成文件共享链接
背景 最近在设计本站PDF电子书页面的时候发现针对百度云PDF目录下的电子书生成不加密的共享链接很不方便. 有人可能问那么多文件生成一个共享链接供大家下载那多方便?不存在的,防止你们一次性保存到自己百 ...
- load python txt文件_详解Python中numpy.loadtxt()读取txt文件
为了方便使用和记忆,有时候我们会把 numpy.loadtxt() 缩写成np.loadtxt() ,本篇文章主要讲解用它来读取txt文件. 读取txt文件我们通常使用 numpy 中的 loadtx ...
最新文章
- JavaScript 面向对象编程(一) —— 面向对象基础
- android 涂鸦之图片叠加,android图像处理系列之七--图片涂鸦,水印-图片叠加...
- 【POJ3608】Bridge Across Islands(旋转卡壳求两凸多边形的最短间距)
- heka 0.11.0源码分析--Elasticsearch OutPut插件
- 收藏的博客 -- Qt有关的GitHub/Gitee开源项目
- 【推荐系统】:Deep Crossing模型解析以及代码实现
- 1688图片批量采集技巧
- 错误0x800700E1:无法成功完成操作,因为文件包含病毒或潜在的垃圾软件。
- 面试必备:高频算法题汇总「图文解析 + 教学视频 + 范例代码」必问之 排序 + 二叉树 部分!
- cmd无法加载命令解决方法
- 邓西百度网盘批量分享工具
- 系统服务器是什么意思,什么是服务器
- 宜人贷-iOS客户端组件化介绍
- 60秒链快讯 | 我国区块链专利数量达1065件 位居全球第一;V神发表区块链方向开发功能侧重点的看法
- 1095. Cars on Campus (30)
- 风讯dotNETCMS源码
- CSP认证 201912-1 报数(模拟)
- R语言学习笔记 ①绘制直方图 histogram
- R语言计算31省份(除港澳台地区)省会城市的球面距离代码
- (关于数据传输安全)SSH协议