qq相册里的照片有的打不开,空间照片打不开怎么回事

淘宝开店 2021-11-25 16:55:10
  

  导入系统   

  

  进口是   

  

  导入操作系统   

  

  导入请求   

  

  导入execjs   

  

  导入时间   

  

  用_转到从转到导入   

  

  #饼干需要有p_skey参数   

  

  全局cookie # pgv _ pvi=7315500032 pgv _ pvid=288873475   

  

  ptui _ loginuin=1919988942 RK=YoxQku3nQ 7   

  

  ptcz=5d 6856 F2 fff 94194 AE 900 a4ee 204 a 2528654 c 81 e 39 c 9 c 812977 ab 125 cfcaecdf;   

  

  qz _ screen=1920 x1080 qz _ FE _ WEBP _ SUPPORT=1;_ _ Q _ w _ s _ _ QZN _ ToDomsgCnt=1;   

  

  _ tucao _ session=zevtwlb3s 1 jwr 0 vkqjgzvtm 5 yuqzmzfwyujrnm 5 xvk5gqupwustnrww 9 uq 0 jnl p2b kdjrwfqz 2p vuhu 05 vugj 5 quprnctir 1 fusehtsct2m 3 luanfabtu a 05 lmuxr2r jmwlmql 9   

  

  -2titpizlbb 2 deb 4 zw 7 upxq==;pgv _ si=s1334556672   

  

  _ qpsvr _ local tk=0.4684345944820856ptisp=CTC pgv _ info=ssid=s 6272865000   

  

  1919988942 _ today计数=0;1919988942 _ total count=3081 CPU _ performance _ V8=5;   

  

  uin=o 1919988942 key=@ EgVMVB3lCp _ uin=o 1919988942   

  

  pt4 _ token=rszjbes 01h 79 ehraxrxzvg 3 vftky 4 * p2u v4tx 51 XII _;   

  

  p _ skey=1H * iJGgv * 7-Gg-o5rez 7 ztixgwkziuu 0 a 596 lume u1i _;x-stgw-ssl-   

  

  info=2d 4a a 1681 CAD 595 b 93 c 934 eab 2 ed 891 a | 0.166 | 1565046557.661 | 5 | r | I | tlsv 1.2 | ECDHE-   

  

  RSA-AES 128-GCM-sha 256 | 57000 | N | 0 '   

  

  全球uin #1919988942 '   

  

  全球薪酬#2757145758 '   

  

  全球时间_睡眠#2 #安全性考虑   

  

  失败='对不起,您尚未登录或者登录超时。'   

  

  #返回合法的文件夹名称(如果你使用的是除中文外定义的名称,请手动修改正则表达式。)   

  

  def mkName _ Legalization(Strname):   

  

  strvalue=Strname   

  

  str值=re.sub(r'[^a-za-z0-9(\u4e00-\u9fa5]',' ',strvalue)#仅保留数字阿扎   

  

  z中文字符   

  

  返回strvalue.strip()#去掉头尾空格   

  

  #返回超文本传送协议(超文本传输协议的缩写)消息   

  

  def getHttp(url,cookie):   

  

  高尔斯=真   

  

  而戈耶斯:   

  

  尝试:   

  

  标头={'Referer':   

  

  'https://qzs.qq.com/qzone/photo/v7/page/photo.html?init=照片。V7/模块/albumList/indexnavBar=1 ',   

  

  用户代理: ' Mozilla/5.0(X11;Linux x86 _ 64r v :38.0)Gecko/20100101   

  

  Firefox/38.0 Icewelk/38。3 .0 ',   

  

  接受' : '文本/html,应用程序/xhtml xml,应用程序/XML;q=0.9,*/*;q=0.8 ',   

  

  cookie':cookie   

  

  s=requests.session()   

  

  戈耶斯=假的   

  

  返回s.get(url,标头=标头).内容   

  

  请求除外。异常。超时:   

  

  打印('访问超时,将自动重连。')   

  

  除了请求。例外。连接错误:   

  

  打印('连接错误,将自动重连。')   

  

  #返回列表所有字   

符串

  

def getlist(urllist):

  

strA = ""

  

for i in urllist:

  

strA = strA + str(i) + "\r\n"

  

return strA

  

@with_goto

  

def main():

  

print("欢迎使用QQ相册爬取脚本,第一个Python作品!\r\n")

  

uin = input("请填写登录QQ账号. \r\n")

  

fuin = input("请填写爬取对象的QQ账号. \r\n")

  

cookie = input("请填写带pskey的Cookies. \r\n")

  

fileName = input("请填写导出目录地址...\r\n")

  

time_sleep = float(input("请填写请求间隔时间,单位为秒,可输入小数,例如0.1,0.5. \r\n"))

  

print("开始模拟登录。")

  

t = execjs.compile("function time(){return

  

String(Math.random().toFixed(16)).slice(-9).replace(/^0/, '9')}").call(

  

'time')

  

gtk_t = 'function a(skey){var hash = 5381;for (var i = 0, len = skey.length;i

  

< len;++i) {hash += (hash << 5) + skey.charCodeAt(i);}return hash &

  

2147483647;}'

  

qq = cookie.split("p_skey=")[1].split(";")[0]

  

gtk = execjs.compile(gtk_t).call('a', qq) # .replace("p_skey=(.*?);"))

  

label .getrepeat

  

json_qq = getHttp(

  

"https://h5.qzone.qq.com/proxy/domain/photo.qzone.qq.com/fcgi-

  

bin/fcg_list_album_v3?g_tk={0}&callback=shine0_Callback&t={1}&hostUin={2}&uin={3}&appid=4&inCharset=utf-8&outCharset=utf-8&source=qzone&plat=qzone&format=jsonp¬ice=0&filter=1&handset=4&pageNumModeSort=40&pageNumModeClass=15&needUserInfo=1&idcNum=4&callbackFun=shine0&_=1516544656243".format(

  

gtk, t, fuin, uin),cookie)

  

if (json_qq == None):

  

goto .getrepeat

  

json_qq = str(json_qq,encoding='utf-8')

  

if (json_qq != ""):

  

state = re.findall(r'"message":"(.*?)",', json_qq)

  

#登陆失败

  

if (state[0] != fail):

  

print("登录成功,开始爬取。")

  

json_text = json_qq.replace("shine0_Callback(", "").replace(");", "")

  

url_id = re.findall(r'"id" : "(.*?)",', json_text) #获取相册列表

  

url_str = ""

  

url_name = re.findall(r'"name" : "(.*?)",', json_text) #获取相册名称

  

total = re.findall(r'"total" : (.*?),', json_text) #获取相册照片数量

  

url_Index = 0 #当前页数

  

url_Count = 0

  

url_text = [] #JSON数据

  

#为了安全性我选择了导出链接和下载链接两步分开 [也就是这部分不包括下载]

  

print("开始申请相册信息。[固定延迟:"+str(time_sleep)+"]")

  

url_Count = 0#

  

url_Start =[] #相册列表中的起点

  

url_Over = [] #相册列表中的终点

  

for x in url_id:

  

# 由于限制每次最多只能申请500张

  

#range(0,toatl,501) =》 for(i= 0; i<=total;i+=501)

  

print("开始第"+ str(url_Index + 1) + "个相册的爬取,")

  

print('name:' + url_name[url_Index])

  

url_Start.append(url_Count)#记录开始的列表索引

  

url_forcount = int(int(total[url_Index]) / 500) + 1 #计算要多少次才能遍历这个相册

  

for i in range(0, url_forcount, 1):

  

text = "" #防止接收失敗無法驗證

  

label .begin

  

url_q = "https://h5.qzone.qq.com/proxy/domain/photo.qzone.qq.com/fcgi-

  

bin/cgi_list_photo?g_tk={0}&callback=shine0_Callback&t={1}&mode=0&idcNum=4&hostUin={2}&topicId={4}&noTopic=0&uin={3}&pageStart={6}&pageNum={5}&skipCmtCount=0&singleurl=1&batchId=¬ice=0&appid=4&inCharset=utf-8&outCharset=utf-8&source=qzone&plat=qzone&outstyle=json&format=jsonp&json_esc=1&question=&answer=&callbackFun=shine0&_=1516549331973".format(

  

gtk, t, fuin, uin, x,500,i*500+1) # g_tk,t,fuin,uin,url_id,pagesnum,pagesstart

  

text = getHttp(url_q,cookie)

  

if (text == None):

  

goto .begin

  

state = str(text,encoding='utf-8') #验证状态

  

if(state == ''):

  

print("返回异常。将自动重复该序号的循环。")

  

goto .begin

  

time.sleep(time_sleep)

  

url_text.append(text) #获取返回到列表

  

url_Count = url_Count + 1

  

print("当前进度:" + str(i+1) + "/" + str(url_forcount))

  

print("\r\n" + '完成了第'+ str(url_Index + 1) + '个相册.')

  

url_Index = url_Index + 1 # 自增 循坏继续

  

url_Over.append(url_Count)#记录结束的列表索引

  

print("QQzone所有在线记录操作结束。")

  

print("开始导出链接...")

  

#x = url_Getpaget[0] to url_GetPage[Ubound(me)] x=>第x + 1个相册

  

url_Index = 0

  

for x in range(0,len(total),1):

  

#mkNameL... ->返回合法的文件夹名称(如果你使用的是除中文外定义的名称,请手动修改正则表达式。)

  

url_str = "" #刷新

  

path = fileName + '\\\qzone' + '\\\' + mkName_Legalization(url_name[x]) +

  

'\\\'#输出路径

  

mkdir(path)#创建目标

  

f = open( path + mkName_Legalization(url_name[x]) + '_download.txt',

  

'wb+')#打开/创建

  

url_str = url_str + "<小林的分隔符——————" + mkName_Legalization(url_name[x]) +

  

"——————Start>"+"\r\n" #添加相册记载开始信息

  

for i in range(url_Start[x],url_Over[x],1):

  

url_Download = re.findall(r'"url" : "(.*?)",',

  

url_text[i].decode('utf-8'))#返回真实下载地址

  

url_str = url_str + getlist(url_Download) #添加该相册所有真实链接地址

  

print("\r\n"+ '完成了第'+str(x + 1)+'个相册的下载信息。')

  

url_str = url_str + "<小林的分隔符——————" + mkName_Legalization(url_name[x]) +

  

"——————End>"+"\r\n" #添加相册记载结束信息

  

f.write(bytes(url_str,'UTF-8'))

  

f.close

  

print("下载开始?")

  

Download_Bool = input("Y/N :")

  

#你可以在这之后添加下载的代码,但我的主要目的并不是这个。

  

print(fail)

  

print("程序结束")

  

#程序走到这一步就Goodbay了。

  

def mkdir(path):

  

# 去除首位空格

  

path=path.strip()

  

# 去除尾部 \ 符号

  

path=path.rstrip("\\\")

  

# 判断路径是否存在

  

# 存在 True

  

# 不存在 False

  

isExists=os.path.exists(path)

  

# 判断结果

  

if not isExists:

  

os.makedirs(path)

  

print(path+' 创建成功')

  

return True

  

else:

  

print(path+' 目录已存在')

  

return False

  

# 入口

  

if __name__ == "__main__":

  

main()

  

相关文章

热门文章

最近发表