python string转int_我用Python搞资源 [ 02 ]
這不是教程,所以沒有基礎的你看不懂也很正常,去后面點個贊就好。
一. 目標鏈接
上一個推送處理了一個不帶密碼的藍奏云分享鏈接,這回處理一下帶密碼的分享鏈接。
https://lanzoux.com/b015ybdmh 密碼:9n8z為了能有一個合適的鏈接來練手,咱還特地注冊了一下藍奏云。注冊了才發現,藍奏云竟然只有文件夾分享才有密碼,單個文件是沒有密碼的……而且是上傳即生成外鏈,和百度網盤還是有很大差別的。
二. 頁面解析
瀏覽器打開上述鏈接后就是輸入密碼的界面了。很明顯,咱們要的東西需要輸入密碼才能看到。
在瀏覽器上查看一下網頁源代碼:
可以看到一個密碼提交靠的是一個ajax請求,提取一下這里面的有用信息:
請求方式:
請求URL:
請求數據:
'lx':2,
'fid':2659087,
'uid':'138195',
'pg':pgs,
'rep':'0',
't':iaxwyd,
'k':igw906,
'up':1,
'ls':1,
'pwd':pwd
},
這邊有一個需要注意的點,t、k這兩個參數對應的變量是會變化的,截圖中t、k兩個參數對照iaxwyd和igw906這兩個變量,過段時間刷新一下這兩個變量名又會發生改變。
三. Python 庫
本次使用的函數庫:
Http 請求:Requests
Html 解析:BeautifuSoup
Js 代碼轉 xml:js2xml
Xml 解析:lxml
一般人遇到參數包括在script內部時通常是使用正則表達式來處理,但咱這邊使用js2xml這個函數庫,將 Js 代碼轉換成 Xml 格式,方便提取參數。
四. 開始寫代碼
懶得看過程的可以直接到最底部看最終的辣雞代碼。
1. 引用需要的函數庫
#HTTP 請求import requests
#HTML 解析
from bs4 import BeautifulSoup
#JS 代碼轉 XML
import js2xml
#XML 解析
from lxml import etree
2. 獲取網頁源碼
def getHtml(url):#獲取網頁源代碼
return requests.get(url,headers = header).content.decode('utf-8')
3. 提取需要的 JS 代碼
獲取之后將我們需要的代碼提取出來,也就是上面那張圖標簽里的東西:
def getSrcJsCode(html):#獲取包含參數的JS代碼
soup = BeautifulSoup(html,'lxml')
scrLabel = soup.select('html script')
jsCode = soup.select('html script')[len(scrLabel)-2].string.replace(u'\u3000', ' ').replace(' ', ' ') #順便刪掉一些非法字符
return jsCode
4. 將 JS 代碼轉換成 XML
這邊用到了?js2xml這個函數庫,將 JS 代碼轉換成 XML 方便后續的參數提取:
def getXmlCode(jsCode):#將Js轉換成XML
src_text = js2xml.parse(jsCode, encoding='utf-8', debug=False)
return js2xml.pretty_print(src_text)
5. 從 XML 中獲取各項參數
根據 XML 標簽提取相應的參數:
def getParameters(src_tree,pwd):#獲取各項參數
parameters = {}
selector = etree.HTML(src_tree)
#先獲取會隨時間改變的變量名
tName = selector.xpath('//var/@name')[3]
kName = selector.xpath('//var/@name')[4]
titleName = selector.xpath('//var/@name')[0]
#先獲取會隨時間改變的變量名
parameters["title"] = selector.xpath('//var[@name="'+titleName+'"]/string')[0].text
parameters["fid"] = int(selector.xpath('//property[@name="fid"]/number/@value')[0])
parameters["lx"] = int(selector.xpath('//property[@name="lx"]/number/@value')[0])
parameters["uid"] = selector.xpath('//property[@name="uid"]/string')[0].text
parameters["rep"] = selector.xpath('//property[@name="rep"]/string')[0].text
parameters["up"] = int(selector.xpath('//property[@name="up"]/number/@value')[0])
parameters["ls"] = int(selector.xpath('//property[@name="ls"]/number/@value')[0])
parameters["t"] = selector.xpath('//var[@name="'+tName+'"]/string')[0].text
parameters["k"] = selector.xpath('//var[@name="'+kName+'"]/string')[0].text
return parameters
6. 獲取文件列表
參數已經獲取好了,接下來就是獲取文件列表了。
def getFileList(parameters):return requests.post(url="https://lanzous.com/filemoreajax.php",data=parameters,headers=header).content.decode('utf-8')
7. 最后整合一下代碼
import requestsfrom bs4 import BeautifulSoup
import js2xml
from lxml import etree
header={
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36',
}
def getHtml(url):
#獲取網頁源代碼
return requests.get(url,headers = header).content.decode('utf-8')
def getSrcJsCode(html):
#獲取包含參數的JS代碼
soup = BeautifulSoup(html,'lxml')
scrLabel = soup.select('html script')
return soup.select('html script')[len(scrLabel)-2].string.replace(u'\u3000', ' ').replace(' ', ' ')#刪掉非法字符
def getXmlCode(jsCode):
#將Js轉換成XML
src_text = js2xml.parse(jsCode, encoding='utf-8', debug=False)
return js2xml.pretty_print(src_text)
def getParameters(src_tree,pwd):
#獲取各項參數
parameters = {}
selector = etree.HTML(src_tree)
tName = selector.xpath('//var/@name')[3]
kName = selector.xpath('//var/@name')[4]
titleName = selector.xpath('//var/@name')[0]
parameters["title"] = selector.xpath('//var[@name="'+titleName+'"]/string')[0].text
parameters["fid"] = int(selector.xpath('//property[@name="fid"]/number/@value')[0])
parameters["lx"] = int(selector.xpath('//property[@name="lx"]/number/@value')[0])
parameters["uid"] = selector.xpath('//property[@name="uid"]/string')[0].text
parameters["rep"] = selector.xpath('//property[@name="rep"]/string')[0].text
parameters["up"] = int(selector.xpath('//property[@name="up"]/number/@value')[0])
parameters["ls"] = int(selector.xpath('//property[@name="ls"]/number/@value')[0])
parameters["t"] = selector.xpath('//var[@name="'+tName+'"]/string')[0].text
parameters["k"] = selector.xpath('//var[@name="'+kName+'"]/string')[0].text
return parameters
def getFileList(parameters):
#獲取文件列表
return requests.post(url="https://lanzous.com/filemoreajax.php",data=parameters,headers=header).content.decode('utf-8')
def main(url,pwd):
#整合一下
html = getHtml(url)
jsCode = getSrcJsCode(html)
src_tree = getXmlCode(jsCode)
parameters = getParameters(src_tree,pwd)
parameters['pwd']=pwd
parameters['pg']=1
title = parameters['title']
return getFileList(parameters),title
if __name__ == '__main__':
url="https://lanzous.com/b015ybdmh"
pwd = "9n8z"
fileList,title = main(url,pwd)
print(fileList,title)
整合好啦,看不懂很正常,本來就不是教程呀,而且咱的代碼寫得也不規范。
六. 結束
以下就是本次實驗用的鏈接獲取的內容:
url="https://lanzous.com/b015ybdmh"pwd = "9n8z"
#文件夾一號#
新建文本文檔.zip
新建文本文檔 (10).zip
新建文本文檔 (9).zip
......
收錄到盤他之后如下圖所示(并沒有收錄):
最后,大家手里有沒有專門分享藍奏云的網站呀,我需要來一個試一試。
有的話請在留言區留個言。
總結
以上是生活随笔為你收集整理的python string转int_我用Python搞资源 [ 02 ]的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python datetime.date
- 下一篇: 泰拉瑞亚海龟壳有什么用