最近在用藍奏雲,這款雲盤無限速而且操做分享簡單,自認爲挺好的一個雲盤,因此研究瞭如何經過藍奏雲分享連接獲取文件最終地址。你可能問爬取直鏈有什麼用,我說一下個人需求,個人服務器學生機帶寬是1m,很小。我運營着本身的app,我想要爲用戶提供升級更新,若是把最新安裝包放在我服務器上,1m就是128k/s,下載一個10m的安裝包都要好長時間,可是若是咱們將安裝包放在雲盤上,每次用戶請求更新,咱們只須要即時獲取安裝包在藍奏雲的真實地址返回給用戶,這樣用戶直接從獲取藍奏雲獲取apk文件,下載速度比直接從自身1m帶寬服務器快多了。因此,藍奏雲能夠做爲咱們存放共享資源文件的地方。php
#coding=utf-8
from bs4 import BeautifulSoup
import requests
import re
import json
#藍奏雲分享文件連接地址
url = 'https://www.lanzous.com/i3xcmaf'
#header頭,注意那個referer必需要與上面文件分享地址url相同
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.3',
'referer': url
}
# 獲取分享頁面html文件
res = requests.get(url,headers=headers)
# 引入BeautifulSoup庫對html進行處理,獲取iframe中的出現的js文件
soup = BeautifulSoup(res.text,'html.parser')
url2 = 'https://www.lanzous.com/'+soup.find('iframe')['src']
res2 = requests.get(url2,headers=headers)
# 正則提取請求三個參數
a = re.findall(r'var a = \'([\w]+?)\';',res2.text)
params = re.findall(r'var [\w]{6} = \'([\w]+?)\';',res2.text)
# 請求下載地址
url3 = 'https://www.lanzous.com/ajaxm.php'
data = {
'action':'down_process',
'file_id':params[0],
't':params[1],
'k':params[2],
}
res3 = requests.post(url3,headers=headers,data=data)
res3 = json.loads(res3.content)
# 請求最終重定向地址
url4 = res3['dom']+'/file/'+res3['url']
headers2 = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0',
'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
}
res4 = requests.head(url4, headers=headers2)
print res4.headers['Location']
複製代碼
4.先來看看目前藍奏雲真實地址是什麼格式,直接選中電信下載右鍵,複製連接,其格式相似https://vip.d0.baidupan.com/file/?UzVSbA4/BDUFDAU9UWRdMVRrVGxf6QqRB4hWuQXCAapUsVWFC8tSJgR/C30LuFzmUbQO4wXTALBReFU+VXkDMVN1UmMOOgQ8BTYFDFFsXThUM1RpXzMKOgcyVmQFbAE1VHJVZAslUjsEYwttC2dcZFE+DjMFbwA0UXBVI1V5Az9TYVI1DmIEaQV8BWNRMV1zVDxUZl8vCmoHNFY1BWwBNFRlVTQLYVIwBGMLbQtuXDxROA4+BT4ANlFuVWdVawM3U2RSNQ42BDMFYAUxUT1dOFQ9VGVfNAomB21WIAVqASZUIVVxCzNSdAQ7CzkLYlxlUTwOPwVpADRRYFV1VX0Da1M+UmAONQRtBWIFZlEwXWpUPFRoXzkKOgc5VmEFdwEmVCFVcgtrUjcEfA==,相似這種,前面是文件服務器域名,後面跟着看着像base64格式的字符串。(拿這個連接複製到瀏覽器地址欄,回車就會建立下載任務,但其實這還不是最終地址,若是直接請求這個,獲得的只是html文件,它重定向後纔是真實文件地址,這點大坑,後面具體介紹) html
7.這幾個參數是如何生成的,右鍵看一下分享連接網站源代碼,其中箭頭標註的這個就是那個三個框 電信下載 聯通下載 普通下載 頁面 ajax
#coding=utf-8
from bs4 import BeautifulSoup
import requests
import re
import json
#藍奏雲分享文件連接地址
url = 'https://www.lanzous.com/i3xcmaf'
#header頭,注意那個referer必需要與上面文件分享地址url相同
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.3',
'referer': url
}
# 獲取分享頁面html文件
res = requests.get(url,headers=headers)
# 引入BeautifulSoup庫對html進行處理,獲取iframe中的出現的js文件
soup = BeautifulSoup(res.text,'html.parser')
url2 = 'https://www.lanzous.com/'+soup.find('iframe')['src']
res2 = requests.get(url2,headers=headers)
# 正則提取請求三個參數
a = re.findall(r'var a = \'([\w]+?)\';',res2.text)
params = re.findall(r'var [\w]{6} = \'([\w]+?)\';',res2.text)
# 請求下載地址
url3 = 'https://www.lanzous.com/ajaxm.php'
data = {
'action':'down_process',
'file_id':params[0],
't':params[1],
'k':params[2],
}
res3 = requests.post(url3,headers=headers,data=data)
res3 = json.loads(res3.content)
# 請求最終地址
url4 = res3['dom']+'/file/'+res3['url']
print url4
複製代碼
#coding=utf-8
from bs4 import BeautifulSoup
import requests
import re
import json
#藍奏雲分享文件連接地址
url = 'https://www.lanzous.com/i3xcmaf'
#header頭,注意那個referer必需要與上面文件分享地址url相同
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.3',
'referer': url
}
# 獲取分享頁面html文件
res = requests.get(url,headers=headers)
# 引入BeautifulSoup庫對html進行處理,獲取iframe中的出現的js文件
soup = BeautifulSoup(res.text,'html.parser')
url2 = 'https://www.lanzous.com/'+soup.find('iframe')['src']
res2 = requests.get(url2,headers=headers)
# 正則提取請求三個參數
a = re.findall(r'var a = \'([\w]+?)\';',res2.text)
params = re.findall(r'var [\w]{6} = \'([\w]+?)\';',res2.text)
# 請求下載地址
url3 = 'https://www.lanzous.com/ajaxm.php'
data = {
'action':'down_process',
'file_id':params[0],
't':params[1],
'k':params[2],
}
res3 = requests.post(url3,headers=headers,data=data)
res3 = json.loads(res3.content)
# 請求最終重定向地址
url4 = res3['dom']+'/file/'+res3['url']
headers2 = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0',
'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
}
res4 = requests.head(url4, headers=headers2)
print res4.headers['Location']
複製代碼