我学爬虫一直有一个梦想,就是想真正达到可见即可爬的态度,所以我一直在尝试找一种方式去搞定它,从最开始的模拟接口去交接数据,但是我发现这行不通,然而条条大路通罗马,后浪又怎么能这么消逝在沙滩上,直到我想了一个问题,为什么我们每次保存图片都是JPG格式,为什么不是PNG格式? 那我就查阅了相关文献,终于,我成功了,我用另类的方式搞定了这些限制次数的图库,这是一次大胆的创意,可以适用在任何图站,希望对大家有帮助!
都2020年了,爬虫党还在为了图片的下载质量烦恼吗?还是只会下载JPG图片?那我有一种另类方式可以帮助你真正的白嫖高质量图片,肝了一个礼拜的干货,绝对能改变你对爬虫的看法和思考,原来爬虫这么有趣,也不会这么思维固然,代码方式尽量简单一点,让大家能看懂,加油各位!
防止有人说我标题党,我先给图致敬,绝对是4k以上画质,作假的剁手!
技术分析:
爬虫还用JPG?
这个另类技术设计到一点值得我们思考,我们每次爬虫保存的图片都是默认JPG,为什么
- 先不管他们的定义是什么,简单来说,JPG就是一种有损压缩技术,在符合所需画质的前提下,尽可能的提高压缩比,来减少储存空间,所以传输速度快,文件小,画质低,这也就是网站为什么都用JPG来存储图片了。
- 而PNG我定义就是一种
大保健
,他能保存完整的画质,也就是相对无损压缩技术,缺点也就是存储空间大,保留了很多原始通道,所以网站不采用,爬虫教学也不采用。 - 而位图的定义,理论上是可以无限放大的,JPG作为位图自然是糟糕的选择,而PNG确实是一个完美的搭档,这里我就
钻了这个空子
,用了这种方式搞定了高清图库。 - 采用这种方式,我不是吹嘘我有多厉害,可能有人想过,但是我只是分享这种方式给更多的朋友,改善他们的固有思维,如果你想要小图片的话保存JPG也是很好的选择,而我喜欢
高清大图
,我采用的是PIL库的Image类的操作,下面我会给出很好的解释。这是一个全站点图片爬取的爬虫,速度可能有点慢,我尽力使用了线程池,谢谢理解!
技术关键代码:
存储为位图,然后无损放大图片,就可以得到我们的效果了,还不懂的留言问我。
with open(''.join(name) + '.png', 'wb') as fw:
fw.write(rr.content)
img = Image.open(''.join(name) + '.png')
img = img.resize((4000, 2000), Image.ANTIALIAS) # 改变大小 抗锯齿
# print(img.size)
img.save(''.join(name) + '.png', quality=95) # 质量分数 95
如果看到这里觉得对你有帮助的,希望给个关注和赞,这是对我最大的支持!
项目技术:
- 还是熟悉的网站 彼岸图网 这个网站质量挺高的,但是有个缺点就是限制次数,所以这次就决定搞它了,其他网站也是大同小异之作。
- 总的步骤分了几大模块,设计到的技术点不是很多,requests和xpath 作为爬虫基础技术,还有Image类和线程池技术,然后文件的os库也是必须的。
- 我保证说的很清楚,我们就开始实践吧!
获取分组网址和标题:
- 我们这次做的是一个全站点爬取,所以得考虑分组问题,这里我们编写爬虫获取箭头所指向的信息,我保存为一个列表,方便我接下来的操作。
代码:
def get_groups(url, headers): # 获得重要信息
"""根据传入的最初网址和标题头,获得每个专栏的网址和标题"""
r = requests.get(url, headers=headers)
r.encoding = r.apparent_encoding # 转换编码