百度文库爬虫

  1. Python百度文库爬虫之txt文件
  2. Python百度文库爬虫之doc文件
  3. Python百度文库爬虫之pdf文件
  4. Python百度文库爬虫之ppt文件
  5. [Python百度文库爬虫之xls文件
  6. Python百度文件爬虫终极版

我们在开始爬虫之前,首先要了解网页的信息和结构,然后获取请求的url和参数(payloads)来得到所要的数据并处理。接下来我们根据:

  • 一.网页分析
  • 二.爬虫编写
  • 三.运行与结果
  • 四.程序改善

一.网页分析

1.初步分析

我们首先以.txt文本文件来分析网站,从简单到复杂,从txt—>word—pdf等

我们以<<一个循环网络爬虫>>进行说明

from IPython.display import Image
Image("./Images/1.png",width="600px",height="400px")

Python百度文库爬虫终极版-编程之家

from IPython.display import Image
Image("./Images/0.png",width="600px",height="400px")

Python百度文库爬虫终极版-编程之家

该百度文库的网址为:链接

URL:https://wenku.baidu.com/view/9a41886f26d3240c844769eae009581b6bd9bd6e.html?fr=search

查看该网页的源代码,并没有我们所要的文本数据,但是有我们需要的参数如下:

  • title:文件主题
  • docId:文件id。这个参数很重要,我们下一步需要它跳转到其他网址
  • docType:文件类型
from IPython.display import Image
Image("./Images/2.png",width="600px",height="400px")

Python百度文库爬虫终极版-编程之家

前提说明:对于上面数据的获取需要re正则表达式,对于别的网页分析器,比如lxml,bs4等不适合这样格式的数据。对于正则表达式的学习,可以参考链接:正则表达式

既然上个url中没有我们需要的数据,那么我们进行浏览器Network进行调试,寻找我们需要的数据。我们要明白一点,数据不可能无缘无故的出现在网页中,肯定存在url将数据发送过来,此数据格式大概率为JSON

2.数据发现

经过url的查找,我们终于找到我们需要的数据链接

from IPython.display import Image
Image("./Images/3.png",width="600px",height="400px")

Python百度文库爬虫终极版-编程之家

上面url所需的参数如下:

  • md5sum: de679a1e4f76df8ac8366bd7663285d6
  • sign: 91f37496c3
  • callback: cb
  • pn: 1
  • rn: 4
  • type: txt
  • rsign: p_4-r_0-s_896f2
  • _: 1587883180674
from IPython.display import Image
Image("./Images/4.png",width="600px",height="400px")

Python百度文库爬虫终极版-编程之家

将以上两个重要的URL进行对比:
https://wenku.baidu.com/view/9a41886f26d3240c844769eae009581b6bd9bd6e.html?fr=search
https://wkretype.bdimg.com/retype/text/9a41886f26d3240c844769eae009581b6bd9bd6e?md5sum=de679a1e4f76df8ac8366bd7663285d6&sign=91f37496c3&callback=cb&pn=1&rn=4&type=txt&rsign=p_4-r_0-s_896f2&_=1587886244900

观察发现,其中文章的id(“9a41886f26d3240c844769eae009581b6bd9bd6e”)是一样的,但是文件内容还有几个参数(如md5sum,sign,rsgin,callback,pn等)

看看需获取文字详情的参数应该通过某个接口请求到的。按时间的顺序往上找,我们发现一个接口包括了需要的md5sum,sign,rsign等参数。其url为:https://wenku.baidu.com/api/doc/getdocinfo?callback=cb&doc_id=9a41886f26d3240c844769eae009581b6bd9bd6e&t=1587886245267&_=1587886244899

from IPython.display import Image
Image("./Images/5.png",width="600px",height="400px")

Python百度文库爬虫终极版-编程之家

from IPython.display import Image
Image("./Images/6.png",width="600px",height="400px")

Python百度文库爬虫终极版-编程之家

  • md5sum: de679a1e4f76df8ac8366bd7663285d6(已获取)
  • sign: 91f37496c3(已获取)
  • callback: cb
  • pn: 1
  • rn: 4
  • type: txt(已获取)
  • rsign: p_4-r_0-s_896f2(已获取)
  • _: 1587883180674

3.其他参数

通过上面的数据获取,我们还有以下参数未获取:

  • callback: cb
  • pn: 1
  • rn: 4
  • _: 1587883180674

callback参数是不变的为cb,pn为页数相关的,_可以猜到这个是类似时间戳的参数,对于这种前后关联的请求,处理时一般使用Requests的Session

session=requests.session()
session.get(url).content.decode('gbk')

对此我们网页信息分析和参数获取过程已经完毕,接下来我们进行程序编程

二.爬虫编写

首先我们编程实现爬取过程,先进行过程调试,然后进行函数编程

通过上面的分析,整个百度文库的爬取过程可以总结为请求百度文库URL,判断文章类型,请求getcodeinfo接口相关参数,请求百度文库正文接口

1.请求百度文库URL

import requests
import re
import json
import ossession=requests.session()
url=input("请输入要下载的文库URL地址:")
请输入要下载的文库URL地址: https://wenku.baidu.com/view/9a41886f26d3240c844769eae009581b6bd9bd6e.html?fr=search
content=session.get(url).content.decode('gbk')
pattern=re.compile('view/(.*?).html')
res=pattern.findall(url)[0]
res
'9a41886f26d3240c844769eae009581b6bd9bd6e'
doc_id=re.findall('view/(.*?).html',url)[0]
doc_id
'9a41886f26d3240c844769eae009581b6bd9bd6e'

2.判断文章类型

types=re.findall(r"'docType.*?\':.*?\'(.*?)\',",content)[0]
types
'txt'
title=re.findall(r"'title.*?\':.*?\'(.*?)\',",content)[0]
title
'一个循环网络爬虫'

3.请求getcodeinfo接口相关参数

content_url='https://wenku.baidu.com/api/doc/getdocinfo?callback=cb&doc_id={}'.format(doc_id)
content_url
'https://wenku.baidu.com/api/doc/getdocinfo?callback=cb&doc_id=9a41886f26d3240c844769eae009581b6bd9bd6e'
content=session.get(content_url).content.decode('gbk')
md5sum=re.findall('"md5sum":"(.*?)"',content)[0]
md5sum
'&md5sum=de679a1e4f76df8ac8366bd7663285d6&sign=91f37496c3'
pn=re.findall('"totalPageNum":"(.*?)"',content)[0]
pn
'4'
rsign=re.findall('"rsign":"(.*?)"',content)[0]
rsign
'p_4-r_0-s_896f2'

4.请求百度文库正文接口

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('utf-8'))
result=''for item in content:for i in item['parags']:result+=i['c'.replace('\\r','\r').replace('\\n','\n')]
filename=title+'.txt'with open(filename,'w',encoding='utf-8') as f:f.write(result)f.close()
from IPython.display import Image
Image("./Images/7.png",width="600px",height="400px")

Python百度文库爬虫终极版-编程之家

5.其他类型(doc)

对于doc文件的爬取,我们方法类型,只是提取https.?0.json.?)\\x22样式的url即对应doc每页的数据

from IPython.display import Image
Image("./Images/8.png",width="600px",height="400px")

Python百度文库爬虫终极版-编程之家

url=input("请输入要下载的文库URL地址:")content=session.get(url).content.decode('gbk')
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/7cf966a96429647d27284b73f242336c1fb93044.html?fr=search
url_list=re.findall('(https.*?0.json.*?)\\\\x22}',content)
url_list=[addr.replace("\\\\\\/","/") for addr in url_list]
url_list[1]
'https://wkbjcloudbos.bdimg.com/v1/docconvert132//wk/62c22f05e9429cd4f65b8c4b36b89070/0.json?responseCacheControl=max-age%3D3888000&responseExpires=Wed%2C%2010%20Jun%202020%2017%3A17%3A46%20%2B0800&authorization=bce-auth-v1%2Ffa1126e91489401fa7cc85045ce7179e%2F2020-04-26T09%3A17%3A46Z%2F3600%2Fhost%2Fe94d9f08d4c9308a4b340a524b8c56a52e1624c8d19144de37f052db510e001c&x-bce-range=9816-20599&token=eyJ0eXAiOiJKSVQiLCJ2ZXIiOiIxLjAiLCJhbGciOiJIUzI1NiIsImV4cCI6MTU4Nzg5NjI2NiwidXJpIjp0cnVlLCJwYXJhbXMiOlsicmVzcG9uc2VDYWNoZUNvbnRyb2wiLCJyZXNwb25zZUV4cGlyZXMiLCJ4LWJjZS1yYW5nZSJdfQ%3D%3D.wX1KXsaKGWwgIukv8kOvn8PFne2TNtDkf2Zy%2FG%2BSaAI%3D.1587896266'
content=session.get(url_list[1]).content.decode('gbk')
txtlist=re.findall('"c":"(.*?)".*?"y":(.*?),',content)
y=0
result=''
for item in txtlist:if not y==item[1]:y=item[1]n='\n'else:n=''result+=nresult+=item[0].encode('utf-8').decode('unicode_escape','ignore')
E:\Anaconda\envs\mypython\lib\site-packages\ipykernel_launcher.py:10: DeprecationWarning: invalid escape sequence '\/'# Remove the CWD from sys.path while we load stuff.
result
'\n八爪鱼·云采集服务平台 \nwww.bazhuayu.com \n \n \n \n爬虫技术入门教程推荐 \n \n首先我们要掌握爬虫相关知识点: \n爬虫之从入门到精通(https:\\/\\/zhuanlan.zhihu.com\\/p\\/25296437) \n1、爬虫的介绍 \n2、HTTP协议的讲解 \n3、爬虫环境的搭建 \n4、爬虫之网页下载 \n5、爬虫之解析 \n6、Headers的详细讲解 \n7、爬虫之存贮 \n8、爬虫之异步加载 \n9、爬虫之多线程 \n10、scrapy的基本介绍 \n11、scrapy的正确编写方式 \n12、scrapy之下载中间件 \n13、scrapy之技巧 \n14、scrapy之分布式 \n15、爬虫总结及反爬虫技巧 '

result=''
for url in url_list[:-5]:content=session.get(url).content.decode('gbk')y=0txtlist=re.findall('"c":"(.*?)".*?"y":(.*?),',content)for item in txtlist:if not y==item[1]:y=item[1]n='\n'else:n=''result+=nresult+=item[0].encode('utf-8').decode('unicode_escape','ignore')
E:\Anaconda\envs\mypython\lib\site-packages\ipykernel_launcher.py:13: DeprecationWarning: invalid escape sequence '\/'del sys.path[0]
filename=title+".txt"with open(filename,"w",encoding="utf-8") as f:f.write(result)f.close()

6.其他类型(ppt)

数据说明,ppt的每页数据实质就是一张图片,我们获取每张图片就行

import requests
import re
import jsonsession=requests.session()url=input("请输入要下载的文库URL地址:")content=session.get(url).content.decode('gbk')
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/b906673ed1d233d4b14e852458fb770bf68a3b18.html?fr=search
from IPython.display import Image
Image("./Images/9.png",width="600px",height="400px")

Python百度文库爬虫终极版-编程之家

content_url='https://wenku.baidu.com/browse/getbcsurl?doc_id='+doc_id+"&pn=1&rn=99999&type=ppt"
content=session.get(content_url).content.decode('gbk')
url_list=re.findall('{"zoom":"(.*?)","page"',content)
url_list=[item.replace("\\",'') for item in url_list]
import osif not os.path.exists(title):os.mkdir(title)for index,url in enumerate(url_list):content=session.get(url).contentpath=os.path.join(title,str(index)+'.jpg')with open(path,'wb') as f:f.write(content)print("图片保存在"+title+"文件夹")
图片保存在精品课件-爬虫技术文件夹

前提说明:对于以下文件类型,我们无法保存成对应的文件类型,但可以获取其数据内容

7.其他类型(pdf)

url=input("请输入要下载的文库URL地址:")content=session.get(url).content.decode('gbk')
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/5fd3a55b3d1ec5da50e2524de518964bcf84d2b6.html?fr=search
url_list=re.findall('(https.*?0.json.*?)\\\\x22}',content)
url_list=[addr.replace("\\\\\\/","/") for addr in url_list]
result=""
for url in url_list[:-5]:content=session.get(url).content.decode('gbk')txtlists=re.findall(r'"c":"(.*?)",',content)y=0for item in txtlists:result+=item.encode('utf-8').decode('unicode_escape','ignore')if y%10==0:result+="\n"y+=1
E:\Anaconda\envs\mypython\lib\site-packages\ipykernel_launcher.py:8: DeprecationWarning: invalid escape sequence '\/'
file_name=title+".txt"with open(file_name,"w",encoding="utf-8") as f:f.write(result)f.close()

8.其他类型(xls)

url=input("请输入要下载的文库URL地址:")content=session.get(url).content.decode('gbk')
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/68d81664ddccda38376baffa.html?fr=search
url_list=re.findall('(https.*?0.json.*?)\\\\x22}',content)
url_list=[addr.replace("\\\\\\/","/") for addr in url_list]
set(url_list)
{'https://wkbjcloudbos.bdimg.com/v1/docconvert5099//wk/f3f81bcf705d88d1e845dc6b10429cd0/0.json?responseCacheControl=max-age%3D3888000&responseExpires=Wed%2C%2010%20Jun%202020%2023%3A15%3A31%20%2B0800&authorization=bce-auth-v1%2Ffa1126e91489401fa7cc85045ce7179e%2F2020-04-26T15%3A15%3A31Z%2F3600%2Fhost%2F51e585a7f2fc296ffaf3c75e221ed2226c5305d9827351e11869580041938259&x-bce-range=0-9453&token=eyJ0eXAiOiJKSVQiLCJ2ZXIiOiIxLjAiLCJhbGciOiJIUzI1NiIsImV4cCI6MTU4NzkxNzczMSwidXJpIjp0cnVlLCJwYXJhbXMiOlsicmVzcG9uc2VDYWNoZUNvbnRyb2wiLCJyZXNwb25zZUV4cGlyZXMiLCJ4LWJjZS1yYW5nZSJdfQ%3D%3D.E8J4bCHGAEMVRJAUwfGRrZcNrs6CJJftvA8QsrnwUhI%3D.1587917731','https://wkbjcloudbos.bdimg.com/v1/docconvert5099//wk/f3f81bcf705d88d1e845dc6b10429cd0/0.json?responseCacheControl=max-age%3D3888000&responseExpires=Wed%2C%2010%20Jun%202020%2023%3A15%3A31%20%2B0800&authorization=bce-auth-v1%2Ffa1126e91489401fa7cc85045ce7179e%2F2020-04-26T15%3A15%3A31Z%2F3600%2Fhost%2F51e585a7f2fc296ffaf3c75e221ed2226c5305d9827351e11869580041938259&x-bce-range=9454-&token=eyJ0eXAiOiJKSVQiLCJ2ZXIiOiIxLjAiLCJhbGciOiJIUzI1NiIsImV4cCI6MTU4NzkxNzczMSwidXJpIjp0cnVlLCJwYXJhbXMiOlsicmVzcG9uc2VDYWNoZUNvbnRyb2wiLCJyZXNwb25zZUV4cGlyZXMiLCJ4LWJjZS1yYW5nZSJdfQ%3D%3D.JYFSUrHr%2B2QZYm8uZJc0PADkcF%2BzEhvIraQUJuDUA4w%3D.1587917731'}
result=""
for url in url_list[:-2]:content=session.get(url).content.decode('gbk')txtlists=re.findall(r'"c":"(.*?)",',content)y=0for item in txtlists:result+=item.encode('utf-8').decode('unicode_escape','ignore')if y%10==0:result+="\n"y+=1
result
'接口名称\nHTTP爬虫接口接口技术描述通过WEB爬虫抓取特定URL对象,按HTML格式存储入无线城市内容库。无线城市模拟用户行为访问数据源查询页面,发出请求,得到HTML结果后,转换呈现。针对数据源能力,进行调用封装,提供HTTP请求和消息返\n回,通常是XML返回格式。同上,请求方式为WebService方式。适用采集时间适用数据量粒度非实时,小时网页形式,百、天、周、月兆以下\n即时百K以下HTTP透传接口HTTP调用接口即时百K以下WebService调用接口即时通常百K以下FTP接口\n无线城市作为FTP客户端或者服务端,取得或接受数据源的数文件形式,数非实时,小时据文件,文件格式通常为XML或据量基本无限、天、周、月CSV。可能会需要WebService调制用接口传递控制消息。\n无线城市直接连接数据源系统数据库系统取得数据。非实时,分钟SQL,数据量基、小时、天、本无限制周、月非实时,分钟文件形式,数、小时、天、\n据量基本无限周、月制DB接口本地文件接口对于传递到本地的文件,装载到无线城市系统。业务形式\n固定、半固定信息查询类应用即时查询类应用即时查询类,即时服务调用类应用。即时查询类,即时服务调用\n类应用。离线信息查询,固定、半固定信息支持。离线信息查询,固定、半固定信息支持。离线信息查\n询,固定、半固定信息支持。数据源状况要求示例不区分字段有WEB网站公开信息。无登录、验证码等。无妇婴保健需特别开发。\n有WEB网站公开查询接公积金查询口。无需特别开发。需要针对服务接口进行支付平台支付开发。接口需要针对服务接口进行目前还没有此开发。\n类接口明确交互字段需要针对服务接口进行影院信息查询开发。无需特别开发,需要公开数据库和相关文档。对数据源系统安全影响较大。此方式并不完全。从数\n据源到无线城市的数据传递可能有多种方法,如人工传递、MAIL等1.拷盘形式也是。从服务器上以文件内容FTP接口获得2.约定上传文件的格式要求\n目前还没有此类接口目前还没有此类接口数据内容够不够'
file_name=title+".txt"with open(file_name,"w",encoding="utf-8") as f:f.write(result)f.close()

三.运行与结果

import requests
import json
import re
import os
import warningswarnings.filterwarnings('ignore')session=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 parse_doc(content):url_list=re.findall(r'(https.*?0.json.*?)\\x22}',content)url_list=[addr.replace("\\\\\\/","/") for addr in url_list]result=""for url in set(url_list):content=session.get(url).content.decode('gbk')y=0txtlists=re.findall(r'"c":"(.*?)".*?"y":(.*?),',content)for item in txtlists:# 当item[1]的值与前面不同时,代表要换行了if not y==item[1]:y=item[1]n='\n'else:n=''result+=nresult+=item[0].encode('utf-8').decode('unicode_escape','ignore')return resultdef parse_pdf(content):url_list=re.findall(r'(https.*?0.json.*?)\\x22}',content)url_list=[addr.replace("\\\\\\/","/") for addr in url_list]result=""for url in set(url_list):content=session.get(url).content.decode('gbk')y=0txtlists=re.findall(r'"c":"(.*?)".*?"y":(.*?),',content)for item in txtlists:# 当item[1]的值与前面不同时,代表要换行了if not y==item[1]:y=item[1]n='\n'else:n=''result+=nresult+=item[0].encode('utf-8').decode('unicode_escape','ignore')return resultdef parse_ppt1(doc_id,title):content_url='https://wenku.baidu.com/browse/getbcsurl?doc_id='+doc_id+'&pn=1&rn=9999&type=ppt'content=session.get(content_url).content.decode('gbk')url_list=re.findall('{"zoom":"(.*?)","page"',content)url_list=[addr.replace('\\','') for addr in url_list]path="F:\\桌面\\Files"+"\\"+titleif not os.path.exists(path):os.mkdir(path)for index,url in enumerate(url_list):content=session.get(url).contentpaths=os.path.join(path,str(index)+'.jpg')with open(paths,'wb') as f:f.write(content)print("图片保存在"+title+"文件夹")def parse_ppt2(content,title):url_list=re.findall(r'(https:\\\\/\\\\/wkretype.bdimg.com.*?\d+)\\",',content)url_list=[addr.replace('\\\\/','/') for addr in url_list]path="F:\\桌面\\Files"+"\\"+titleif not os.path.exists(path):os.mkdir(path)for index,url in enumerate(url_list3):content=session.get(url).contentpaths=os.path.join(path,str(index)+'.jpg')with open(paths,'wb') as f:f.write(content)print("图片保存在"+title+"文件夹")def parse_xls(content):url_list=re.findall(r'(https.*?0.json.*?)\\x22}',content)url_list=[addr.replace("\\\\\\/","/") for addr in url_list]result=""for url in set(url_list):content=session.get(url).content.decode('gbk')y=0txtlists=re.findall(r'"c":"(.*?)".*?"y":(.*?),',content)for item in txtlists:# 当item[1]的值与前面不同时,代表要换行了if not y==item[1]:y=item[1]n='\n'else:n=''result+=nresult+=item[0].encode('utf-8').decode('unicode_escape','ignore')result=result.replace("\udb80","").replace("\udc00","")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 not in ['txt','doc','pdf','ppt','xls']: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)elif types=='doc':title=re.findall(r"title.*?:.*?'(.*?)'",content)[0]result=parse_doc(content)filename=path+"\\"+title+".doc"save_file(title,filename,result)elif types=='pdf':title=re.findall(r"title.*?:.*?'(.*?)'",content)[0]result=parse_pdf(content)filename=path+"\\"+title+".txt"save_file(title,filename,result)elif types=='ppt':link=re.findall('wkretype',content)if link==None:title=re.findall(r"title.*?:.*?'(.*?)'",content)[0]parse_ppt1(doc_id,title)else:title=title=re.findall(r'<title>(.*?)</title>',content)[0]parse_ppt2(content,title)elif types=='xls':title=re.findall(r"title.*?:.*?'(.*?)'",content)[0]result=parse_xls(content)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.ppt请输入需要下载文件的格式(0退出): ppt
请输入下载的文库URL地址: https://wenku.baidu.com/view/bafb70ab82c4bb4cf7ec4afe04a1b0717fd5b3bf.html?fr=search图片保存在爬虫技术ppt课件 - 百度文库文件夹
1.doc 2.txt 3.ppt 4.xls5.ppt请输入需要下载文件的格式(0退出): doc
请输入下载的文库URL地址: https://wenku.baidu.com/view/0ee9fbc585868762caaedd3383c4bb4cf7ecb78f.html?fr=search文件爬虫技术是什么保存成功
1.doc 2.txt 3.ppt 4.xls5.ppt请输入需要下载文件的格式(0退出): xls
请输入下载的文库URL地址: 0Invalid URL '0': No schema supplied. Perhaps you meant http://0?
1.doc 2.txt 3.ppt 4.xls5.ppt请输入需要下载文件的格式(0退出): 0

具体效果演示,可以看前面的几篇文章了解

四.程序改善

虽然文件内容可以下载下来,但是除了txt文件和doc文件,ppt文件外,pdf文件和xls文件无法做到与原文件排版一样

五.程序打包

使用pyinstaller将程序打包成可执行文件(.exe)文件,下载链接见文末

六.代码链接

Github项目链接:链接
执行文件
链接:https://pan.baidu.com/s/15zLxVxrtE3ILGeFeKxIWBw
提取码:lw77 Python百度文库爬虫终极版-编程之家

from IPython.display import Image
Image("./Images/wenku.png",width="600px",height="400px")

Python百度文库爬虫终极版-编程之家