1.reques高级:

例子:

1.17k小说网:

#我们利用session去请求(是一连串的请求,过程中不会cookie丢失
import  requests


# 会话
session =requests.session()
data ={"loginName""18835556819",
        "password":"26149222Q"}

#1先登录
url = "https://passport.17k.com/ck/user/login"
session.post(url,data=data)
# print(resp.text)
# print(resp.cookies) #看cookeie

#2.拿参数
#刚才的会话中有cookie的
resp = session.get('https://user.17k.com/ck/author/shelf?page=1&appKey=2406394919')
print(resp.json())

2.梨视频

#https://video.pearvideo.com/mp4/adshort/20220214/1645596205217-15826504_adpkg-ad_hd.mp4
#https://video.pearvideo.com/mp4/adshort/20220214/cont-1751850-15826504_adpkg-ad_hd.mp4   正确
#https://video.pearvideo.com/mp4/adshort/20220214/cont-1751850-15826504_adpkg-ad_hd.mp4
#https://video.pearvideo.com/mp4/adshort/20220214/cont-1751850-15826504_adpkg-ad_hd.mp4
#拿到contID
#拿到videoStatus 返回嘚json ->srcURL
#srcURL里面的视频内容休整
#下载视频
import  requests
url = "https://www.pearvideo.com/video_1752547"
headers={"User-Agent""Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4878.0 Safari/537.36",
         #防盗链referer
        "Referer": url
         }
contId =url.split("_")[1]

videostatus = "https://www.pearvideo.com/videoStatus.jsp?contId=1752547&mrd=0.4074439069860505"
resp =requests.get(videostatus,headers=headers)
# print(resp.text)
dic = resp.json()
srcUrl = dic['videoInfo']['videos']['srcUrl']
systemTime = dic['systemTime']
srcUrl_1 = srcUrl.replace(systemTime,"cont-{contId}")#加f


#下载视频
with open("a.mp4",mode="wb") as f:
    f.write(requests.get(srcUrl_1).content)
f.close()

2.代理

代理网址:

快代理:https://www.kuaidaili.com/free/

站大爷:https://www.zdaye.com/ShortProxy.html

例子:

1.干百度

import  requests
#118.190.244.234  3128

proxies = {
    #"http":""
    "https":"https:118.190.244.234"
}

resp = requests.get("http://www.baidu.com")
resp.encoding="utf-8"
print(resp.text)

综合练习:

网易的评论:

#找到未加密的参数
#想办法把参数进行加密(必须参考网易的加密方式)
#请求网易,拿到评论   params =>encText,encSecKey => encSecKey
#AES 加密 pip install pycryptodome
from Crypto.Cipher import  AES
from  base64 import  b64encode
import requests
import json
from lxml import html
f ='00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7'
g ='0CoJUm6Qyw8W8jud'
e ='010001'
url ="https://music.163.com/weapi/comment/resource/comments/get?csrf_token="
i ="10deCDPtDlWGqIJm"
data = {
    "csrf_token""",
    "cursor""-1",
    "offset""0",
    "orderType""1",
    "pageNo""1",
    "pageSize""20",
    "rid""R_SO_4_1901371647",
    "threadId""R_SO_4_1901371647"
}
#处理加密过程                 数据                      '010001'
#var bVj2x = window.asrsea(JSON.stringify(i6c), bsR9I(["流泪", "强"]), bsR9I(Xp2x.md), bsR9I(["爱心", "女孩", "惊恐", "大笑"]));
    # """"
    # function a(a=16) { #随机的16为字符串
    #     var d, e, b = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", c = "";
    #     for (d = 0; a > d; d += 1)#循环16次
    #         e = Math.random() * b.length,#随机数字
    #         e = Math.floor(e),#取整
    #         c += b.charAt(e);#去字符串中xx的位置 b
    #     return c
    # }
    # function b(a, b) { #a是要加密的内容
    #     var c = CryptoJS.enc.Utf8.parse(b)# b是密钥
    #       , d = CryptoJS.enc.Utf8.parse("0102030405060708")
    #       , e = CryptoJS.enc.Utf8.parse(a) #e是数据
    #       , f = CryptoJS.AES.encrypt(e, c, {#加密的密钥 c
    #         iv: d,#偏移量 AES加密
    #         mode: CryptoJS.mode.CBC
    #     });
    #     return f.toString()
    # }
    # function c(a, b, c) {
    #     var d, e;
    #     return setMaxDigits(131),
    #     d = new RSAKeyPair(b,"",c),
    #     e = encryptedString(d, a)
    # }
    # function d(d, e, f, g) {
    #     var h = {}#空对象
    #       , i = a(16);#随机的16位字符串
    #     return h.encText = b(d, g),# g是密钥
    #     h.encText = b(h.encText, i),#得到的是params
    #     h.encSecKey = c(i, e, f),#得到的就是encSecKey,e和f是死的,所有的偏差只能在i上,如果我把i固定(c())里面不产生随机数)那就sck一定是固定的
    #     h
    # }
    # 两次加密: 数据+g => 第一次加密 +i=>b =params
    # """
def get_encSecKey():
    return "a01b02eb445d8f5848c749b1685be5f3c3848c11a214039d567cd750be16625f62dfadaa502547cea2552dea6b9f372965ff47936b879b8282acb57a35b21b86abd231800b5f08d2450e5af1736d42d3ff3eac3b57f4c0fd4bcb402d054248809090c4e552b91a2f0c0a712d7721a5c1d926cfe7afb6633c61ee94887c8e193f"
def get_params(data):#默认收到的是字符串
    frist = enc_params(data,g)
    second =enc_params(frist,i)
    return second       #返回的就是params
def to_16(data):
    pad = 16 - len(data)%16
    data += chr(pad)*pad
    return data
def enc_params(data,key):  #加密
    iv = "0102030405060708"
    data = to_16(data)
    ase = AES.new(key=key.encode("utf-8"),iv=iv.encode("utf-8"),mode=AES.MODE_CBC) #创造加密器
    bs = ase.encrypt(data.encode("utf-8")) #加密的内容必须是16的倍数 123456chr(10)chr(10)chr(10)chr(10)...
    return str(b64encode(bs),"utf-8")
resp = requests.post(url,data={
    "params":get_params(json.dumps(data)),
    "encSecKey":get_encSecKey()
})
ret = resp.json()
# ret_data_comments =ret.get("data").get("comments").get("0")
# print(ret_data_comments)
# list_commenst=ret_data_comments.get("content")
# print(list_commenst)

print(resp.json())

五:并发模块:

posted on 2022-03-31 11:50  Steam残酷  阅读(90)  评论(0)    收藏  举报