Python百度文库爬虫终极版
百度文庫爬蟲
- Python百度文庫爬蟲之txt文件
- Python百度文庫爬蟲之doc文件
- Python百度文庫爬蟲之pdf文件
- Python百度文庫爬蟲之ppt文件
- [Python百度文庫爬蟲之xls文件
- Python百度文件爬蟲終極版
我們在開始爬蟲之前,首先要了解網頁的信息和結構,然后獲取請求的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 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")
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+=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")
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
from IPython.display import Image
Image("./Images/wenku.png",width="600px",height="400px")
總結
以上是生活随笔為你收集整理的Python百度文库爬虫终极版的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 地牢围攻2 宽屏补丁 使用说明
- 下一篇: VBA的表单控件初接触(2):Activ