【python】QQ 空间照片下载器

简介: 【python】QQ 空间照片下载器

文章目录

这是我fork 关于dslwind/qzone-photo-downloader的小工具:QQ 空间照片下载器项目,但由于时间长久,下载已经失效。因此我对此做了改进修补工作,这是我的QQ 空间照片下载器demo,我只是为了下载我的一万多张照片。说说、日志、文章、评论暂不需要,如果你有兴趣,你还以用更好功能更全的关于qq空间的wwwpf/QzoneExporter项目。

1. 前提

  • ubuntu linux 18.04.5
  • Python 3.6.9

当然,其他版本不能保证,你可以尝试

2. 安装依赖

$ wget https://chromedriver.storage.googleapis.com/99.0.4844.51/chromedriver_linux64.zip  
$ unzip chromedriver_linux64.zip
$ apt install libnss3-dev  chromium-bsu

注意:chrome-browerchromedirver 要保持一致。根本apt源安装chrome-brower默认的版本是99…我选择了chromedirver版本也是99.0.4844.51

3. 使用方法

3.1 克隆

git clone https://github.com/ghostwritten/qzone-photo-downloader.git
cd qzone-photo-downloader

3.2 修改qq

打开downloader.py,定位到以下代码

def entry():
    # 你的 QQ和密码,QQ号必须写,密码可以省略,然后使用网页快速登录功能
    main_user = 123456
    main_pass = ''
    # 要处理的目标 QQ 号,此处可填入多个QQ号,中间用逗号隔开
    dest_users = [123456, ]
$ python3 downloader.py 
.......
正在下载相册 绘画治疗 的第 52 张图片
正在下载相册 绘画治疗 的第 53 张图片
正在下载相册 绘画治疗 的第 54 张图片
正在下载相册 绘画治疗 的第 55 张图片
正在下载相册 绘画治疗 的第 56 张图片
正在下载相册 绘画治疗 的第 57 张图片
正在下载相册 绘画治疗 的第 58 张图片
正在下载相册 绘画治疗 的第 59 张图片
正在下载相册 绘画治疗 的第 60 张图片
正在下载相册 绘画治疗 的第 61 张图片
正在下载相册 绘画治疗 的第 62 张图片
正在下载相册 绘画治疗 的第 63 张图片
正在下载相册 绘画治疗 的第 64 张图片
正在下载相册 绘画治疗 的第 65 张图片
正在下载相册 绘画治疗 的第 66 张图片
正在下载相册 绘画治疗 的第 67 张图片
正在下载相册 绘画治疗 的第 68 张图片
正在下载相册 绘画治疗 的第 69 张图片
正在下载相册 绘画治疗 的第 70 张图片
正在下载相册 插画欣赏 的第 1 张图片
正在下载相册 插画欣赏 的第 2 张图片
正在下载相册 插画欣赏 的第 3 张图片
正在下载相册 插画欣赏 的第 4 张图片
正在下载相册 插画欣赏 的第 5 张图片
正在下载相册 插画欣赏 的第 6 张图片
.......

4 问题

4.1 解析错误

$ python3 downloader.py 
登录成功
登录成功
正在处理用户 xxxx
获取到 0 个相册
未找到 xxxxx 可下载的相册
处理完成

我明明有几十个相册,为什么获取不到呢?

在打印变量c结构体的时候,数据解析结构已经发生变化。

这是旧 的获取相册的方式

    if c:
        c = json.loads(c)
        if ('data' in c) and ('albumListModeSort' in c['data']):
            for i in c['data']['albumListModeSort']:
                albums.append(
                    QzoneAlbum._make([i['id'], i['name'], i['total']]))
    # print(albums)
    return 

这是新的方式,多个一层相册分类的属性:

        if c:
            c = json.loads(c)
            if ('data' in c) and ('albumListModeClass' in c['data']):
                for i in c['data']['albumListModeClass']:
                  for a in i['albumList']:
                     albums.append(
                     QzoneAlbum._make([a['id'], a['name'], a['total']]))
        #print(albums)
        return albums

4.2. valid json 问题

json.decoder.JSONDecodeError: Expecting ‘,’ delimiter: line 15135

column 177 (char 527917)

json.decoder.JSONDecodeError: Invalid \escape: line 1 column 1 (char

1)一般是JSON 中出现特殊字符易出现该 BUG

你可以尝试

s = json_str.replace('\\', '\\\\')
db = json.loads(s)

或者

c = json.loads(c,strict=False, encoding="utf-8")

或者

根据我的相册内容,而我是将json数据打印出来,判断分析是相册描述是特殊最多的一部分,我暂时将数据输入到一个文件

.....
write_to_json('./data_photo.txt', c)
....
def write_to_json(filename, data):
    jsonfile = open(filename, "w")
    jsonfile.write(data)
...

这样会定位特殊字符的位置,根据相片url,我定位到相册位置,删除照片,就跳过该bug,或者修改相册描述的字段内容。

$ cat data_photo.txt_2 | jq .
parse error: Invalid escape at line 26467, column 384
cat -n data_photo.txt_2 |grep 26467
 26467           "desc" : "人:越来越不男不女了;钱:越来越不干不净了;友:越来越不好不坏了;情:越来越不咸不淡了;义:越来越不轻不重了;官:越来越不清不白了;理:越来越不清不楚了;心:越来越不红不黒\了;话:越来越不冷不热了;爱:越来越不死不活了;路:越来越不明不暗了。",

✈该工具用到的库学习,你可以参考阅读:


python os 文件操作

python sys系统

python random随机生成

python time时间处理

python json文本处理

python requests url处理

python collections

python Selenium


相关文章
|
6月前
|
Python
空间管理大师已上线!(2),Python高级工程师进阶学习】
空间管理大师已上线!(2),Python高级工程师进阶学习】
|
1天前
|
机器学习/深度学习 数据处理 Python
SciPy 教程 之 SciPy 空间数据 7
本教程介绍了SciPy的空间数据处理功能,涵盖如何使用`scipy.spatial`模块进行点的位置判断、最近点计算等操作。还详细解释了距离矩阵的概念及其在生物信息学中的应用,以及汉明距离的定义和计算方法。示例代码展示了如何计算两个点之间的汉明距离。
6 1
|
4天前
|
图形学 Python
SciPy 空间数据2
凸包(Convex Hull)是计算几何中的概念,指包含给定点集的所有凸集的交集。可以通过 `ConvexHull()` 方法创建凸包。示例代码展示了如何使用 `scipy` 库和 `matplotlib` 绘制给定点集的凸包。
11 1
|
1月前
|
机器学习/深度学习 编解码 Python
python将照片集变成视频
`shigen`是一位坚持更新文章的博客作者,记录成长历程,分享认知见解,留住生活感动。他利用Python库`Pillow`和`MoviePy`开发了一个工具,能够批量处理照片并生成高质量视频。该工具支持多种分辨率、自定义播放时间和照片方向,并能自动调整照片比例以实现居中对齐。通过简单的代码实现了照片视频化的需求,适合强迫症患者使用。**与shigen一起,每天不一样!**个人IP:shigen。
38 9
python将照片集变成视频
|
4天前
|
索引 Python
SciPy 空间数据1
SciPy 通过 `scipy.spatial` 模块处理空间数据,如判断点是否在边界内、计算最近点等。三角测量是通过测量角度来确定目标距离的方法。多边形的三角测量可将其分解为多个三角形,用于计算面积。Delaunay 三角剖分是一种常用方法,可以对一系列点进行三角剖分。示例代码展示了如何使用 `Delaunay()` 函数创建三角形并绘制。
10 0
|
1月前
|
Python
用 Python 读取照片的 Exif 信息(顺便说说本人的一些想法)
用 Python 读取照片的 Exif 信息(顺便说说本人的一些想法)
52 2
|
1月前
|
存储 自然语言处理 Python
解密 Python 的作用域和名字空间
解密 Python 的作用域和名字空间
15 1
|
2月前
|
数据安全/隐私保护 计算机视觉 Python
用python给照片添加水印的三种方式
这篇文章介绍了使用Python给照片添加水印的三种方式:通过PIL库直接添加文本水印、使用OpenCV库结合图像处理功能添加水印,以及使用filestools库进行更为简便的水印添加。
62 7
|
1月前
|
存储 索引 Python
深度解密函数的 local 名字空间(当 Python 中混进一只薛定谔的猫……)
深度解密函数的 local 名字空间(当 Python 中混进一只薛定谔的猫……)
39 0
|
3月前
|
存储 Python
Python 中的名称空间是什么?
【8月更文挑战第29天】
17 0
下一篇
无影云桌面