背景:

我把 B 站热词表情包链接手动粘到 Twikoo 的 json 文件里时,发现图片链接在 Twikoo 里显示不了,B 站应该开启了防盗链,于是我打算把表情包下载到本地再上传到图床。话说为什么要手动去复制表情包链接,因为 B 站数据是动态显示的,Python 爬取到的源码里没有表情包链接,网上有人说这类网站用 Selenium 来获取源码,我测试后,其它同类网站成功了,但 B 站还是获取不到。现在只好先把链接一个一个保存到 json 文件里,再用 Python 逐个下载,这应该算是半自动化了吧。。。我先记录下如何读取文本里的图片链接并下载到本地吧。

核心代码

代码核心点就是读取文本内容用正则表达式筛选出图片链接命名存储到本地文件夹

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
with open(source_path, "r", encoding="UTF-8") as f:
json = f.read()
list = re.findall("[正则表达式]", json)
list.reverse()

i = 1
# 下载图片
for img_url in list:
res = requests.get(img_url)
img_name = file_path + str(i) + ".png" #图片命名规则
with open(img_name, 'wb') as f:
f.write(res.content)

print("第%d张" % i)
i += 1

Demo 代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# -*- coding = utf-8 -*-
# @Time :2022-05-08 20:40
# @Author:HarrisWong
# @File : img_download_txt.py
# @Software: PyCharm


import re #正则表达式
import requests # 制定URL,获取网页数据


def main():
source_path = r"E:\360MoveData\Users\Administrator\Pictures\博客专用\CDN\json\123.json" #文本链接
download(source_path)

# 用户代理:表示告诉服务器,我们是什么类型的浏览器,可以接收什么样水平的文件
headers = { # 模拟浏览器头部信息,向服务器发送消息
"user-agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36",
}

file_path = r"E:\360MoveData\Users\Administrator\Pictures\博客专用\CDN\emoji\bilibiliHotKey\\" #文件保存地址

def download(source_path):

# 核心代码
with open(source_path, "r", encoding="UTF-8") as f:
json = f.read()
list = re.findall("<img src='(https://i0.hdslb.com/bfs/emote/.*.png)'>", json)
list.reverse()

i = 1

# 下载图片
for img_url in list:

res = requests.get(img_url)

img_name = file_path + str(i) + ".png" #图片命名规则
with open(img_name, 'wb') as f:
f.write(res.content)

print("第%d张" % i)
i += 1

if __name__ == '__main__': # 当程序执行时
# 调用函数
main()
print("爬取完毕!")

参考教程

结束语

有 Python 基础的小伙伴可以自己尝试在源代码基础上更改。欢迎评论,反馈 Bug 或给出更好建议。

对了,写这文章的时候突然想到一个更好的办法,就是直接把 F12 里的源码复制到 html 文件里,然后再用 python 解析源码,我哭了,心疼我键盘上的 CV 键。。。