百度文库爬虫

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

一.网页分析

二.爬虫编写

三.运行与结果

四.程序改善

一.网页分析

1.初步分析

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

我们以<>进行说明

from IPython.display import Image

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

from IPython.display import Image

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

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

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")

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

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

2.数据发现

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

from IPython.display import Image

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

上面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")

将以上两个重要的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")

from IPython.display import Image

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

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 os

session=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")

5.其他类型(doc)

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

from IPython.display import Image

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

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+=n

result+=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=0

txtlist=re.findall('"c":"(.*?)".*?"y":(.*?),',content)

for item in txtlist:

if not y==item[1]:

y=item[1]

n='\n'

else:

n=''

result+=n

result+=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 json

session=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")

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 os

if not os.path.exists(title):

os.mkdir(title)

for index,url in enumerate(url_list):

content=session.get(url).content

path=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=0

for 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=0

for 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 warnings

warnings.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_id

content=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='+rsign

content=json.loads(session.get(content_url).content.decode('gbk'))

result=''

for item in content:

for i in item['parags']:

result+=i['c']

return result

def 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='+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']

return result

def 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=0

txtlists=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+=n

result+=item[0].encode('utf-8').decode('unicode_escape','ignore')

return result

def 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=0

txtlists=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+=n

result+=item[0].encode('utf-8').decode('unicode_escape','ignore')

return result

def 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"+"\\"+title

if not os.path.exists(path):

os.mkdir(path)

for index,url in enumerate(url_list):

content=session.get(url).content

paths=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"+"\\"+title

if not os.path.exists(path):

os.mkdir(path)

for index,url in enumerate(url_list3):

content=session.get(url).content

paths=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=0

txtlists=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+=n

result+=item[0].encode('utf-8').decode('unicode_escape','ignore')

result=result.replace("\udb80","").replace("\udc00","")

return result

def 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":

break

if types not in ['txt','doc','pdf','ppt','xls']:

print("抱歉文件格式错误,请重新输入!")

continue

url=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)

# 文件id

doc_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'

(.*?). ',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'

(.*?)',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.xls

5.ppt

请输入需要下载文件的格式(0退出): ppt

请输入下载的文库URL地址: https://wenku.baidu.com/view/bafb70ab82c4bb4cf7ec4afe04a1b0717fd5b3bf.html?fr=search

图片保存在爬虫技术ppt课件 - 百度文库文件夹

1.doc

2.txt

3.ppt

4.xls

5.ppt

请输入需要下载文件的格式(0退出): doc

请输入下载的文库URL地址: https://wenku.baidu.com/view/0ee9fbc585868762caaedd3383c4bb4cf7ecb78f.html?fr=search

文件爬虫技术是什么保存成功

1.doc

2.txt

3.ppt

4.xls

5.ppt

请输入需要下载文件的格式(0退出): xls

请输入下载的文库URL地址: 0

Invalid URL '0': No schema supplied. Perhaps you meant http://0?

1.doc

2.txt

3.ppt

4.xls

5.ppt

请输入需要下载文件的格式(0退出): 0

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

四.程序改善

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

五.程序打包

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

六.代码链接

from IPython.display import Image

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

python 百度文库 签到_Python百度文库爬虫终极版相关推荐

  1. python 时间序列突变检测_Python 百度指数突变点检测

    百度指数是一款非常好用的工具,通过它我们能知道某些关键词在过去的一些日子里的热度变化趋势并能够对这些数据进行分析.如果能用得好百度指数,我们将能产出巨大的价值.你可以通过关注文章下方的Python实用 ...

  2. python抓取百度地图数据_Python 百度地图爬虫 - 搜索数据采集

    class Hot_City_Coordinates(): """获取热门城市""" def __init__(self): self.he ...

  3. python画地图经纬度_Python 百度API 画出美美哒热力地图(代码 数据)

    作者:王大伟 前言 现在是晚上22:22,我是不是很2 周围的人都在跨年刷朋友圈 我一个人在办公室默默打开博客 准备写一篇文章为2017画下句点 之前在写葡萄酒数据分析那篇文章时 曾想过做一个葡萄酒分 ...

  4. python百度翻译包_python百度翻译移动端

    百度翻译返回997错误,经过分析查询网络其他博客的示例,解决方法:如何计算sign import requests import execjs import json class MobileBaid ...

  5. python api调用百度ai平台_Python 百度AI接口调用

    接口调用准备 1.进入网站: https://console.bce.baidu.com/?_=1535519624081&fromai=1#/aip/overview 2.选择产品服务里的文 ...

  6. python爬boss网站_python之requests爬虫Boss数据

    python之requests爬虫Boss数据 需要用到的库:reqeusts.lxml 没有的可以用直接下载 pip install requests pip install lxm 这里以pyth ...

  7. python爬取系统_python应用:爬虫框架Scrapy系统学习第四篇——scrapy爬取笔趣阁小说...

    使用cmd创建一个scrapy项目: scrapy startproject project_name (project_name 必须以字母开头,只能包含字母.数字以及下划线) 项目目录层级如下: ...

  8. python金融实战 源代码_Python金融股票爬虫实战源码大全

    Stock [1]- 终端实时获取股票价格,实时查询股票价格,默认查询了沪指.深指.需要安装requests库,通过调用新浪股票API,实时查询股票价格,支持查询多支股票,通过threading多线程 ...

  9. python京东自动签到_Python 实现京东自动签到领京豆

    今天带大家进行模拟京东登录,并进行签到获取京豆,1000 个京豆 = 10 元,毕竟「苍蝇也是肉」,每天用脚本可以获取大概 n 个京豆,是不是一个发现了一个「发家致富」的好路子? 废话不多说,下面开始 ...

最新文章

  1. [转]使用C#调用金诚信71x系列读卡器的DLL
  2. python面向对象的基本概念_面向对象的概念和基本语法,python,学习,笔记,一,基础...
  3. 8cm等于多少像素_「前端剑指offer第5期」物理像素、逻辑像素、CSS像素、PPI、设备像素比是什么...
  4. 记一次线上压测Dubbo线程池队列满的问题
  5. Tuscany SCA 发布Web Service
  6. hadoop配置(个人总结)
  7. CSS 渐进增强与优雅降级
  8. ARM产品系列对应架构图
  9. iPhone 13 Pro原型机曝光:全新玫瑰金配色,女性首选
  10. 真的很OK!雷军成科创板大赢家 相关投资企业3家已上市
  11. python学习之路(10)--难点
  12. Stanford CS224N: PyTorch Tutorial (Winter ‘21) —— 斯坦福CS224N PyTorch教程 (第三部分)
  13. 将通达信的背景设置成白色
  14. android加载dex方法,[原创]分享一个快速加载dex文件的方法
  15. Unity3d——UGUI学习笔记
  16. 如何使用deeptools处理BAM数据
  17. 计算机等级成绩科目代码65,北京计算机等级考试成绩评定标准是怎样的
  18. 玖逸云黑v1.4-更高级的云黑系统
  19. win10打开蓝牙_用了N年也未必知!Win10竟藏有这么多实用功能
  20. PCIe功耗控制--ASPM

热门文章

  1. MySQL连接查询\等值连接介绍
  2. ADS中示例文件.7zads格式的打开
  3. HTML常用文字标签
  4. openssl之EVP实现哈希(md5,sha256,sm3)
  5. 矩形脉冲用matlab,矩形周期脉冲信号MATLAB实现.doc
  6. 国产银河麒麟服务器vsftp匿名用户本地用户的一般设置
  7. 路由器上的虚拟服务器安全吗,路由器可以当虚拟主机吗
  8. 什么是对象?什么是类?类与对象有什么关系?
  9. 菜鸟教程之C语言基础(上)
  10. 计算机毕业设计JAVA基于的校园头条新闻管理系统的设计与实现mybatis+源码+调试部署+系统+数据库+lw