爬虫抓图全网最新方法分享,爬取轻松爬终极4K高清美图?
都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 # 转换编码if r.status_code == 200:html = etree.HTML(r.text)html = etree.tostring(html)html = etree.fromstring(html)url_list = html.xpath(r"//div[@class='classify clearfix']//a/@href") # 获得网页分组的urlname = html.xpath(r"//div[@class='classify clearfix']//a/text()") # 获得网页分组的标题else:print('请求错误!')return name, url_list # 把分组标题和分组网址回溯
开始下载选择:
def begin_down(title, url, headers): # 下载选择"""这里的参数为刚获取的标题和网址还有请求头"""print('白嫖方式下载高清图片'.center(30, '-'))for i, j in enumerate(title):print(i, '\t\t\t\t\t', j)inp = int(input('输入下载选项:'))# print(title[inp], url[inp])get_image_1st(title[inp], url[inp], headers) # 调用第一页的网址进行下载get_image(title[inp], url[inp], headers) # 下载剩下的所有页
这里获取的网址需要到下一步进行拼接,根据我的观察,分组网站的第一页和其他页网址不相连,没有规律可循,所以我写了爬取第一页和爬取其他页二个函数来获取图片,这里下面我也会说。
获取图片网址:
def get_image_1st(title, url, headers): # 得到第一页的图片网址url_1st = 'http://pic.netbian.com/' + url # 拼接分组网址r = requests.get(url_1st, headers)if r.status_code == 200:html = etree.HTML(r.text)html = etree.tostring(html)html = etree.fromstring(html)page_url = html.xpath(r'//ul[@class="clearfix"]//li/a/@href') # 获得每张图片的真实网址# print(page_url)page_url = ['http://pic.netbian.com' + i for i in page_url] # 网址拼接pool_down(title, page_url, headers) # 调用图片下载函数 下载选择页的 第一页全部图片,因为第一页网址特殊def get_image(title, url, headers): # 得到其他页的图片网址"""找其他页的网址,然后找到每张图片的点击图片网址"""pages_url = []for i in range(2, 10): # 我们假定最大翻页为10页other_url = 'http://pic.netbian.com' + url + 'index_' + str(i) + '.html' # 拼接网址# print(other_url)r = requests.get(other_url, headers=headers) # 尝试请求第二页 获得图片的点击网址if r.status_code == 200:html = etree.HTML(r.text)html = etree.tostring(html)html = etree.fromstring(html)page_url = html.xpath(r'//ul[@class="clearfix"]//li/a/@href') # 获得每张图片的真实网址page_url = ['http://pic.netbian.com' + i for i in page_url] # 网址拼接pages_url.append(page_url)pool_down(title, pages_url, headers) # 调用下载
获得下载网址:
这里注意一点,我们获取的是src里面的图片网址,这个质量更高一点,便于我们修改画质,这里使用到了线程池和Image的使用,简单使用起来不是很难。
def image_down(title, page_url, headers): # 下载图片if not os.path.exists(title + '//'):os.mkdir(title + '//')os.chdir(title + '//')else:os.chdir(title + '//')for i, j in enumerate(page_url): # 遍历第一页的图表列表r = requests.get(j, headers=headers) # 请求这个图片网址if r.status_code == 200:r.encoding = r.apparent_encoding # 修改编码html = etree.HTML(r.text)html = etree.tostring(html)html = etree.fromstring(html) # 以上搭建xpath对象url = html.xpath(r'//a[@id="img"]/img/@src')name = html.xpath(r'//a[@id="img"]/img/@title')rr = requests.get('http://pic.netbian.com' + ''.join(url), headers=headers)if rr.status_code == 200: # 请求下载图片网址rr.encoding = rr.apparent_encoding # 修改编码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) # 质量分数 95print(f'{title} 中第 {i + 1} 张下载完成!')else:print('错误啦')def pool_down(title, page_url, headers): # 线程下载# print(title, len(page_url))path = 'D://彼岸图库//'# 创建总的文件夹if not os.path.exists(path):os.mkdir(path)os.chdir(path)else:os.chdir(path)# 创建一个多线程下载pool = Pool(6) # 一次6下if len(page_url) > 2: # 如果是其他网址for i in page_url:pool.apply(image_down, args=(title, i, headers))elif len(page_url) == 1: # 如果是第一页pool.apply(image_down, args=(title, page_url, headers)) # 调用线程池pool.close()pool.join()
项目经验:
全部的代码我差不多全部给出了,为了让你们身体健康,我还是希望大家可以自行的编写一下主函数,主函数很简单的,就是简单的调用,参数我已经都给了,体验一下编程的快乐,这样左右手就很充实啦!
我对爬虫的理解不在于代码多难实现,而是如何分析网站,好的分析,绝对事半功倍!
这一次项目,因为是静态网址,没有遇到多少坑坑洼洼,都是小毛病,我就不提出来博取幸苦费用了。
总的来说,你们看了觉得有帮助的,给个关注和支持,就是对我最大的帮助,我会加油,你们也是!
爬虫抓图全网最新方法分享,爬取轻松爬终极4K高清美图?相关推荐
- Python 网络爬虫:爬取4K高清美图
爬取4K高清美图 这篇爬虫主要是用来爬取网站高清4K图片,这也是笔者学初学爬虫的时候最先写一个的爬虫脚本,现在回过头来重新梳理一下,也算是对从前知识的一个总结,希望对大家有所帮助! 文章目录 爬取4K ...
- python批量读取图片并批量保存_Python爬虫:批量抓取花瓣网高清美图并保存
原标题:Python爬虫:批量抓取花瓣网高清美图并保存 昨天看到了不错的图片分享网--花瓣,里面的图片质量还不错,所以利用selenium+xpath我把它的妹子的栏目下爬取了下来,以图片栏目名称给文 ...
- 运用python爬取彼岸桌面所有关键字高清壁纸
运用python爬取彼岸桌面所有关键字高清壁纸 第一次在csdn写博客, 个人技术并不成熟, 还是学生, 高手轻喷菜鸡勿啄 就是心血来潮想要换桌面壁纸, 存在一个文件夹自动更换, 但是从网站上一个一个 ...
- 一键爬取王者荣耀全皮肤高清图片【方法一】
文章目录 前言 一.爬虫是什么? 二.使用步骤 1.引入库 2.访问的URL 3.爬取思路 三.皮肤URL(需要手动找出) 完整代码 四.效果展示 总结 前言 相信很多小伙伴们都喜欢玩王者荣耀这款MO ...
- scrapy图片爬取(爬取站长素材中的高清图片)
- ImagesPipeline:-只需要将img的src的属性值进行解析,提交到管道,管道就会对图片的src进行请求发送获取图片的二次请求 -需求:爬取站长素材中的高清图片-使用流程:-数据解析(图 ...
- Python零基础之爬取王者荣耀官方网站高清壁纸(普通版)
Python零基础之爬取王者荣耀官方网站高清壁纸 目标: 分析过程: 1. 确定目标url 2. 解决url解析问题 3. 图片下载解析 4. 多页面的处理 代码示例 需要注意的问题: 目标: 1.下 ...
- 爬虫百度百万高清美图源代码
@T爬虫百度百万高清美图源代码OC #! -- coding: utf-8 -- Date:2020-09-20 16:52 USER:gordon_lu 使用正则表达式 删选指定的 URL 链接. ...
- python宣传图片_Python爬虫,高清美图我全都要!爬取你想要的,嘿嘿嘿
select = 'div#main div.list ul li a' imgUrls = screen(url, select) 通过这两行代码获取的列表中的值,形如此:星空 女孩 观望 唯美夜景 ...
- 一键爬取王者荣耀全皮肤高清图片【方法二】
爬取王者荣耀官网皮肤[爬虫] 上次我们讲了爬虫的定义以及爬取王者荣耀皮肤的思路. 今天我们换一种方式来爬取同样的内容.大体上思路和方法一相同. 方法一传送门:方法一 方法二 # 网址:https:// ...
最新文章
- 多云战略未来五大趋势分析,必看!
- 【漏洞实战】从信息泄露到内网滲透
- bzoj2820: YY的GCD
- GDCM:gdcm::ServiceClassUser的测试程序
- mysql的单页应用框架搭建_采用vue+webpack构建的单页应用——私人博客MintloG诞生记...
- mysql暂停触发器_mysql如何临时禁用触发器
- c语言自学门槛,初学C语言的人最常问的几个问题
- Python入门--流程控制语句continue
- JS实现将文件和base64的相互转换
- 小米8se账号锁_mi8 8SE 小米8解帐户锁 解ID锁 激活锁 9008刷机包 卡刷包刷机资料...
- 韦东山freeRTOS系列教程之【第一章】FreeRTOS概述与体验
- python的数组下标_python数组下标
- VMware Workstation虚拟机无法共享主机网络解决方法
- 创新工场投资经理:创业就是九死一生
- 2020对口高考计算机专业分数线,2020高考分数线(分数线及一分一段表)
- CeSi 进程集中管理部署
- AI修图市场潜力大,分析全方位
- 前端知识-CSS定位机制:标准流、浮动、定位
- Linux如何用命令创建文件和文件夹
- python汇率编程_python抓取汇率