背景:
我把 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
|
import re import requests
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 键。。。
用Python批量读取本地文本里的图片链接并下载到本地
转载或借鉴请注明博客来源噢!