Python 文本采集替换图片的问题

2020-05-03 16:50:31 +08:00
 qianyealone
文章采集下来了带图片的内容,想把图片地址换成本地,图片也下了,但是怎么批量把远程图片地址换成本地的呢

把<img alt="" src="http://img.baidu.com/2020/05/20200503105830041.jpg"/>换成
<img alt="" src="20200503105830041.jpg"/>

新人跪求大佬带带
2226 次点击
所在节点    Python
13 条回复
ClericPy
2020-05-03 17:06:11 +08:00
本地开个 static/images 文件夹下载图片, 然后路径用相对路径, 记得别用 windows 的反斜杠, 用 as_posix 的

大致用的就是:

requests 的 Response.content 写入 file
pathlib 的 as_posix

没什么其他信息, 就这样吧

PS: 图片名字如果不重要的话, 最简单的就是图片地址转 md5 名字, 避免文件名重复, 也不用处理不同路径同名文件
jdhao
2020-05-03 17:12:28 +08:00
直接正则表达式都能替换了
qianyealone
2020-05-03 17:15:52 +08:00
ClericPy
2020-05-03 17:17:41 +08:00
jdhao
2020-05-03 17:18:12 +08:00
@qianyealone 查一下 python 的正则表达式,只能帮到这。。
ClericPy
2020-05-03 17:22:37 +08:00
我热晕了, 两次答非所问...

html = '<img alt="" src="http://img.baidu.com/2020/05/20200503105830041.jpg"/>'
print(re.sub('(?<=src=") http[^"]*/', '', html))
# <img alt="" src="20200503105830041.jpg"/>
qianyealone
2020-05-03 17:22:51 +08:00
@ClericPy 谢谢了,大佬
annielong
2020-05-03 17:56:20 +08:00
习惯上还是 url 的目录来存文件,只用把域名替换就行了,实际上好多图片都是用的相对路径,域名都不需要替换,只用按目录保存图片就可以直接用
llsquaer
2020-05-04 10:19:33 +08:00
@ClericPy 直接复制你的代码 测试的..没变化啊 我用的 python3.6
ClericPy
2020-05-04 10:33:56 +08:00
@llsquaer #9
我代码贴上来以后不知道 http 前面为什么多了空格, 反正在本站贴代码基本就是脑补
https://paste.ubuntu.com/p/M4Q3QwnZRs/
lau52y
2020-05-04 14:15:50 +08:00
我一般用 bs4 获取所有 img 然后就给 replace 替换了
llsquaer
2020-05-05 11:36:10 +08:00
@ClericPy 谢谢...我还在研究正则.一直用不好,之前做这种图片本地化是 自己手写的一个函数替换的.你这样更简单了.
ClericPy
2020-05-05 11:43:18 +08:00
@llsquaer #12 用正则替换虽然性能高, 但是准确度容错率一般, 比如这里的双引号遇到单引号又得适配, 遇到不是 http 开头的 src 又得适配, 遇到莫名其妙有个换行的, 遇到 src 实际是 data-src 的, 最稳妥的还是 bs4 之类的 DOM 解析然后替换

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/668279

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX