设置准备登录的QQ号码【与Cookies对应】

设置将准备的爬取对象QQ号码

设置好抓取的cookies

设置好time_sleep的时间【安全性考虑[过快会导致远程主机中断连接,然后出些奇怪的异常。]】

在新的脚本里,你将通过Input输入需要的数据来得到参数。

2.1 执行代码

在安装完需求模块与准备好一切之后,将它保存,在PowerShell or cmd命令行中启动。 程序在爬取完相册链接后会执行Input,

填入指定目录,将输出链接.txt文件到该目录。【这时的文本文件里是未转义的JS代码[这正是我要的。],你可以写一个转义工具将 \/ 手动转义,例如下面给出的代码:】

'\Code for vb6

'\e-mail: 1919988942@qq.com

Dim url() As String

Public Function url_format(stra As String) As String

'由于可能需要转义的url代码行超出Integr(32...)级别,启用long更稳妥

Dim strb() As String

Dim i As Long

url_format = ""

strb = Split(stra, "\")

For i = 0 To UBound(strb)

If strb(i) <> "/" Then

url_format = url_format + strb(i)

End If

Next

End Function

Public Sub main()

Dim i As Long

Open App.Path & "\ling_url.txt" For Input As #1

Do Until EOF(1)

ReDim Preserve url(i)

Line Input #1, url(i)

url(i) = url_format(url(i))

i = i + 1

Loop

Close #1

Open App.Path & "\ling_Val_url.txt" For Output As #2

For i = 0 To UBound(url())

Print #2, url(i)

Next

Close #2

End Sub

执行代码结果(示例):

(2019/8/6 10:40更新。)

3.代码分析:

(2019/8/7.2:00 先睡了。)

(2019/8/6 14:30。)

#Python : 小林的QQ空间相册下载链接爬取脚本

# -*- coding: utf-8 -*-

import sys

import re

import os

import requests

import execjs

import time

from goto import with_goto #添加于19.8.6

#cookie 需要有p_skey参数

global cookie #pgv_pvi=7315500032; pgv_pvid=288873475; ptui_loginuin=1919988942; RK=YoxQKU3NQ7; ptcz=5d6856f2fff94194ae900a4ee204a2528654c81e39c9c812977ab125cfcaecdf; qz_screen=1920x1080; QZ_FE_WEBP_SUPPORT=1; __Q_w_s__QZN_TodoMsgCnt=1; _tucao_session=ZEVTWlB3S1JWR0VkQjgzVTM5YUQzMzFwYUJRNm5xVk5GQUpWUStPNDNRWW9uQ0JFNlp2bkdjRWFqZ2pVVUhIU05VUGJ5QUpRNCtIR1FUSEhtSCt2M3luanFabTlua05LWmUxR2RJMWlMQlE9--2TItPIzlBB2dEb4ZW7UPXQ%3D%3D; pgv_si=s1334556672; _qpsvr_localtk=0.4684345944820856; ptisp=ctc; pgv_info=ssid=s6272865000; 1919988942_todaycount=0; 1919988942_totalcount=3081; cpu_performance_v8=5; uin=o1919988942; skey=@EgVMVB3lC; p_uin=o1919988942; pt4_token=RsZjbes01h79ehRaXRxZVG3VFtky4*P2udV4tx51XiY_; p_skey=1H*iJGgv*7-Gg-O5reZ7ZtixgWkziuu0a596lUmeU1I_; x-stgw-ssl-info=2d4aa1681cad595b93c934eab2ed891a|0.166|1565046557.661|5|r|I|TLSv1.2|ECDHE-RSA-AES128-GCM-SHA256|57000|N|0"

global uin #1919988942"

global fuin #2757145758"

global time_sleep #2 #安全性考虑

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

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

def mkName_Legalization(Strname):

strvalue = Strname

strvalue = re.sub(r'[^a-zA-Z0-9(\u4e00-\u9fa5)]+',' ',strvalue)#仅保留数字A-Za-z中文字符

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

#返回Http消息

def getHttp(url,cookie):

Goyes= True

while Goyes :

try:

headers = {'Referer': 'https://qzs.qq.com/qzone/photo/v7/page/photo.html?init=photo.v7/module/albumList/index&navBar=1',

'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Firefox/38.0 Iceweasel/38.3.0',

'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',

'cookie':cookie

}

s = requests.session()

Goyes = False

return s.get(url, headers=headers).content

except requests.exceptions.Timeout:

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

except requests.exceptions.ConnectionError:

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

#返回列表所有字符串

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&notice=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=&notice=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了。

# mkdir函数引用来源:https://www.cnblogs.com/monsteryang/p/6574550.html

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()

python爬取别人qq空间相册_Python_小林的爬取QQ空间相册图片链接程序相关推荐

  1. Python_小林的爬取QQ空间相册图片链接程序

    前言 昨天看见某人的空间有上传了XXXX个头像,然后我就想着下载回来[所以本质上这是一个头像下载程序],但是一个个另存为太浪费时间了,上网搜索有没有现成的工具,居然要注册码,还卖45一套.你们的良心也 ...

  2. python登录网站下载excel_写了一个小工具,爬去指定网站的的登陆后的数据进行整理,可以正常登陆了,但是无法下载excel文件?...

    题目描述 我计划写一个小工具,爬取我账号里面的数据,采用requests登陆后,虽然可以正常登陆,但是无法下载里面Excel数据,麻烦大货帮我分析一下,怎么解决.我知道可能是权限问题,下载的时候需要带 ...

  3. python爬取京东商品属性_python爬虫小项目:爬取京东商品信息

    #爬取京东手机信息 import requests from bs4 import BeautifulSoup from selenium import webdriver import re imp ...

  4. Python学习笔记 第二部分 - 正则表达式 与 爬虫小实例(抓取豆瓣电影中评分大于等于8分的影片)...

    一.正则表达式 python正则常用的函数和方法 compile(pattern,flags=0)        对正则表达式pattern进行编译,flags是可选标识符,并返回一个regex对象 ...

  5. 利用Python编写一个AI脚本自动控制2048网页小游戏

    前言 本文将使用python+selenium自动控制游戏运行.当然采用的是伪随机数进行键盘控制.只作为一个抛砖迎玉的参考,不涉及专业算法. – 一.前期准备(必须有) 1.在安装好的pyCharm中 ...

  6. Python网络爬虫数据采集实战(八):Scrapy框架爬取QQ音乐存入MongoDB

    通过前七章的学习,相信大家对整个爬虫有了一个比较全貌的了解 ,其中分别涉及四个案例:静态网页爬取.动态Ajax网页爬取.Selenium浏览器模拟爬取和Fillder今日头条app爬取,基本涵盖了爬虫 ...

  7. python爬b站视频_python代码福利:用requests爬取B站视频封面

    最近看到一篇文章介绍了利用Python爬虫爬取B站视频封面的文章,虽然我完全没看文章,但是只看了一眼这个封面图就彻底把我吸引了.不过我也对爬虫这方面比较熟悉了,这么简单的事情还用看别人的文章教我做事? ...

  8. python爬取页面内容由京东提_python制作爬虫爬取京东商品评论教程

    本篇文章是python爬虫系列的第三篇,介绍如何抓取京东商城商品评论信息,并对这些评论信息进行分析和可视化.下面是要抓取的商品信息,一款女士文胸.这个商品共有红色,黑色和肤色三种颜色, 70B到90D ...

  9. 不用python爬今日头条_手把手教你从今日头条爬取你想要的任何图片

    都说人生苦短,我用python.为了找点乐趣,不如写个爬虫? 那爬什么呢? 宇宙条是爬虫界行家,它的很多信息都是从其它网站爬来的,那就拿它练练手吧. 网上类似的文章其实不少,但是大多是很久之前的,在这 ...

  10. python爬取哔哩哔哩视频_Python实现视频爬取下载

    注:源内容来自公众号[python学习开发] 一般情况下我们使用爬虫更多的是对数据或者图片进行爬取,今天在这里和大家分享一下关于使用爬虫技术来进行视频下载的方法,不仅可以方便的下载一些体积小的视频,针 ...

最新文章

  1. python字典存储省份与城市_在Python中存储字典路径
  2. Kaggle Tabular Playground Series - Jan 2022 的baseline和日期特征处理
  3. BZOJ 3105:[cqoi2013]新Nim游戏
  4. 循环相关函数range、enumerate、zip
  5. Endnote如何一键更改参考文献?
  6. 西安电子科技大学第16届程序设计竞赛G题
  7. Node — 第五天
  8. 单片机红绿灯电路灯有几种_新农村建设的太阳能路灯如何选择?
  9. 电商行业最复杂的人货场分析,我用一个案例给你讲清楚
  10. 1: 认识WPF和一个小Demon
  11. Golang sort 排序
  12. 程序员的生活照,最后一个绝了!有同感吗?
  13. wxpython网站_wxpython学习笔记
  14. NET代码运行在服务器JS运行在客户端
  15. mac免费CAD模型设计软件FreeCAD怎样设置中文模式
  16. 微信小程序登陆\code详解
  17. 什么是php 抽象类
  18. css3属性基本骨架
  19. Word代做,线上兼职,月入过万
  20. [python,2018-06-25] 高德纳箭号表示法

热门文章

  1. 每年考证时间表(绝对有用)
  2. 电脑管家急救箱linux,腾讯电脑管家系统急救箱
  3. Lua代码加密 LuaJit代码加密
  4. Struts1标签库如何升级到Struts2
  5. SlideLive:提供阶梯类型PPT模板下载
  6. JAVA文件上传大小限制问题
  7. Xcopy 复制文件和目录,包括子目录。
  8. asp.net922-基于Web的房屋中介管理信息系统
  9. javaScript、PHP连接外卖小票机打印机方案(佳博、芯烨等)
  10. UVa 10361 自动作诗机