本文目录一览:
图片自动下载神器!一键获取全网图片
大家好,我是九剑。
经常玩电脑的兄弟们应该知道Python,易语言这种神奇的东西,可以在线爬取网上的一些数据,甚是好用。
然而Python毕竟是一种编程语音,想要短时间内去学习并掌握并不是一件容易的事情,更别提实操爬取数据了。
其实从需求上来说,普通用户无非就是 爬取一些图片文字 等等用来欣赏自用数据,比如一些小姐姐图片。
所以这次,九剑为大家带来一个神器,你只需要输入相关关键词,工具就会为你 搜集全网图片,并且无需打开链接,可以直接批量保存 !
关键词4K图下载器(Windows)
无广告,免登录,且免费
打开工具后你就会发现该工具的良心之处了,整体界面为一个小窗口, 没有任何广告弹窗,也没有任何注册登录 的选项!
所有功能一目了然,包括什么 搜索图片、保存图片、关键词输入、设置保存路径 等等,小小白看了都能直接上手操作!
别看它小,功能确是异常强大,某种意义上来说,这TM就是可视化编程,没错,这就是年轻人的第一个程序。
全网搜索,光速保存
首先设置好路径,然后直接 输入关键词,点击搜素图片,工具就会为你进行在线搜索超高清图片 ,基本都是 1080P 以上!
这里我们来尝试一下 输入关键词:动漫美女 ,搜索后可以发现没有任何延迟,工具直接将搜索结果展示了出来!
由于该工具会直接搜全网图片,所以搜索期间我们也可以点击 停止采集图片 ,然后直接点击开始 保存图片 ,工具就会批量将图片保存到相关路径!
基本上保存图片都是非常的快,保存好后这里直接去相关路径随便打开一张下载的图片进行查看,画质都非常的清晰,属于那种直接可以当桌面屏保的图片!
1.点赞并点击我头像关注
2.关注后私信我回复:28
python3 爬取图片异常的原因?
我们在下载文件时,一会会采取urlretrieve或是requests的get方式,
from urllib.request import urlretrieve
urlretrieve(self.url, filename="xxx.png")
但对于连续下载,各个文件保存是需要时间的,而程序运行永运是快于存储的,我怀疑这是水管里流水速度与缸的大小不合适的原因,那可以试试下面这种方式:
r = requests.get(url, stream=True)
with open(local_filename, 'wb') as f:
for chunk in r.iter_content(chunk_size=1024):
if chunk: # filter out keep-alive new chunks
f.write(chunk)
f.flush()
python爬取图片时忽略了一些图片
真实图片地址是在客户端javascript代码中计算出来的.
你需要寻找
span class="img-hash"Ly93dzMuc2luYWltZy5jbi9tdzYwMC8wMDczdExQR2d5MWZ3Z3h6ajlrMGtqMzBpYjBramtnaS5qcGc=/span
这样的内容,取出
Ly93dzMuc2luYWltZy5jbi9tdzYwMC8wMDczdExQR2d5MWZ3Z3h6ajlrMGtqMzBpYjBramtnaS5qcGc=
这段内容,做base64解码即得图片地址。
相应的脚本在
//cdn.jandan.net/static/min/91798e4c623fa60181a31d543488217eB2GDr79r.03100001.js
这段内容你通过get_page()爬到地页面中有,同样,该页面中有这样的html(为便于阅读已重排格式):
div class="text"
span class="righttext"
a href="//jandan.net/ooxx/page-34#comment-4001800"4001800/a
/span
p
img src="//img.jandan.net/img/blank.gif" onload="jandan_load_img(this)" /
span class="img-hash"Ly93dzMuc2luYWltZy5jbi9tdzYwMC8wMDczdExQR2d5MWZ3Z3h6ajlrMGtqMzBpYjBramtnaS5qcGc=/span
/p
/div
这个img的onload调用的函数就在前面给出的那个js文件中:
function jandan_load_img(b){
var d=$(b);
var f=d.next("span.img-hash");
var e=f.text();
f.remove();
var c=jdDw3Ldvi4NcbKboi4X19hCAmdC3Q3aZvN(e,"DGmLfT4H73yJdXXpXs3pw7uAiICcflZS");
var a=$('a href="'+c.replace(/(\/\/\w+\.sinaimg\.cn\/)(\w+)(\/.+\.(gif|jpg|jpeg))/,"$1large$3")+
'" target="_blank" class="view_img_link"[查看原图]/a');
d.before(a);
d.before("br");
d.removeAttr("onload");
d.attr("src",location.protocol+c.replace(/(\/\/\w+\.sinaimg\.cn\/)(\w+)(\/.+\.gif)/,"$1thumb180$3"));
if(/\.gif$/.test(c)){
d.attr("org_src",location.protocol+c);
b.onload=function(){
add_img_loading_mask(this,load_sina_gif)
}
}
它调用了jdDw3Ldvi4NcbKboi4X19hCAmdC3Q3aZvN对img-hash的内容做解码,这个函数同样在这个js文件中:
var jdDw3Ldvi4NcbKboi4X19hCAmdC3Q3aZvN=function(o,y,g){
var d=o;var l="DECODE";
var y=y?y:"";
var g=g?g:0;
var h=4;
y=md5(y);
var x=md5(y.substr(0,16));
var v=md5(y.substr(16,16));
...中间部分略去...
if(l=="DECODE"){
m=base64_encode(m);
var c=new RegExp("=","g");
m=m.replace(c,"");
m=u+m;
m=base64_decode(d)
}
return m
};
你只需要在Python使用相应的库对抓取到的img-hash内容做解码即可得到图片地址。
你使用了str的find来从文本中定位位置,这样做太麻烦了,太多的代码细节,使用re模块做正则匹配就简单很多,更快的是直接使用现有的爬虫库.
使用re进行正则匹配,只需要使用正则式'span class="img-hash"(.+?)'即可提取出该页面中所有加密的图片地址。
import re
import base64
pat = re.compile('span class="img-hash"(.+?)')
...
def get_imgurls(url):
urls = []
for imgurl in pat.findall(url_open(url).decode('utf-8')):
.append(str(base64.b64decode(imgurl), 'utf-8'))
return urls
然后就可以对get_imgurls返回的列表遍历,逐个交给save_img处理了。
使用爬取库也只需要寻找span,从中找出class='img-hash'即可读取text。