python string转int_我用Python搞资源 [ 02 ]

这不是教程,所以没有基础的你看不懂也很正常,去后面点个赞就好。

一. 目标链接

上一个推送处理了一个不带密码的蓝奏云分享链接,这回处理一下带密码的分享链接。

https://lanzoux.com/b015ybdmh     密码:9n8z

为了能有一个合适的链接来练手,咱还特地注册了一下蓝奏云。注册了才发现,蓝奏云竟然只有文件夹分享才有密码,单个文件是没有密码的……而且是上传即生成外链,和百度网盘还是有很大差别的。

二. 页面解析

8442b5f7cfc3a352e770765cb36b8f1e.png

浏览器打开上述链接后就是输入密码的界面了。很明显,咱们要的东西需要输入密码才能看到。
在浏览器上查看一下网页源代码:

955a3caac61a0e60f346c77e54d5cc0c.png

可以看到一个密码提交靠的是一个ajax请求,提取一下这里面的有用信息:

  • 请求方式:

type : 'post',
  • 请求URL:

/filemoreajax.php
  • 请求数据:

data : { 
'lx':2,
'fid':2659087,
'uid':'138195',
'pg':pgs,
'rep':'0',
't':iaxwyd,
'k':igw906,
'up':1,
'ls':1,
'pwd':pwd
},

这边有一个需要注意的点,tk这两个参数对应的变量是会变化的,截图中tk两个参数对照iaxwydigw906这两个变量,过段时间刷新一下这两个变量名又会发生改变。

三. 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 requests
from 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
......

收录到盘他之后如下图所示(并没有收录):

352f482e690ff837539481ec01d2de8b.png

最后,大家手里有没有专门分享蓝奏云的网站呀,我需要来一个试一试。

有的话请在留言区留个言。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值