Python 网络爬虫:爬取4K高清美图
爬取4K高清美图
这篇爬虫主要是用来爬取网站高清4K图片,这也是笔者学初学爬虫的时候最先写一个的爬虫脚本,现在回过头来重新梳理一下,也算是对从前知识的一个总结,希望对大家有所帮助!
文章目录
- 爬取4K高清美图
- 1、分析url以及页面结构
- 2、开始编码
- 2、优化程序
- 总结
爬取任意网站的的首要都是分析目标网站,我们需要做的主要流程如下:
1. 访问目标网站,找到你需要的资源具体在某个页面,如何进入该页面,资源在具体的什么位置。2. 通过 F12 开发者工具,找到数据的获取接口,数据是在静态页面直接获取,还是异步加载存放为json等等3. 编写简单的代码,查看是否能直接访问,试探其访问机制及其反爬措施4. 完善代码,逐步请求到你需要的数据。
1、分析url以及页面结构
通过F12调试工具的简单调试,我们发现,它网页url的参数变化规律显而易见。
首页:http://pic.netbian.com/次级风景目录:http://pic.netbian.com/4kfengjing/
(http://pic.netbian.com/4kmeinv/index.html)次级风景目录的第二页:http://pic.netbian.com/4kmeinv/index_2.html风景目录下某个图片:http://pic.netbian.com/tupian/12356.html图片资源:http://pic.netbian.com/uploads/allimg/170725/103840-150095032034c0.jpg
我们不难发现,
/4kfengjing/ 代表的就是首页下不同模块的标识名称
index_2 代表的就是次级模块目录下翻页的标识
12356 代表的是次级风景目录下某个图片的标识名称
/uploads/allimg/170725/103840-150095032034c0.jpg 代表的是我们所需要请求图片的部分url
值得注意的是 http://pic.netbian.com/4kfengjing/ 和http://pic.netbian.com/4kmeinv/index.html同样都访问的第一页的内容,而从第二页起,这个参数的变化规律便是数字随着翻页加1。而12356 以及/uploads/allimg/170725/103840-150095032034c0.jpg参数都在相应的上一级页面中可以直接拿到。
( 其实在风景目录页面里,获取下一级图片页面的同时,也可以直接拿到图片资源的地址,不过笔者这里选择进入图片页面后再拿图片资源的地址,虽然这样会多请求一次,但是当时笔者为了获取图片名称同时给图片命名的代码简单些,选择了多请求一次的方式。)
了解到这些以后我们便可以开始按照规则制造url,编写爬虫访问我们所需要的资源。
2、开始编码
首先导入本项目用到的库:
from lxml.html import etree
import requests
from PIL import Image
import os
import sys
其中,requests 库主要用来发起网络请求,并接收服务器返回的数据;lxml库主要用来解析 html 内容;os 库主要用于将数据输出存储到本地文件中,PIL库是用来处理图片;sys库主要用于解释器相关的操作。
headers = {'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'}url_list = []url = 'http://pic.netbian.com/4kmeinv/index_.html'res = requests.get(url=url,headers=headers)res.encoding = res.apparent_encoding # 修改编码response = etree.HTML(res.text)response = etree.tostring(response)response = etree.fromstring(response) # 以上搭建xpath对象content = response.xpath('//ul[@class="clearfix"]/li')for i in content:tu_url = i.xpath('./a/@href')tupian_url = 'http://pic.netbian.com'+ ''.join(tu_url)url_list.append(tupian_url)
首先是进入模块页面,利用xpath规则拿到图片页面的url,并放入url_list这个列表中,方便后续使用。
for i in url_list:r = requests.get(url=i, headers=headers)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')print(url)rr = requests.get('http://pic.netbian.com' + ''.join(url), headers=headers)name = html.xpath(r'//a[@id="img"]/img/@title')rr.encoding = rr.apparent_encoding # 修改编码
这里是图片页面,从模块页面拿到的url_list列表中不断地拿出图片地址,进行访问,并拿到对应的图片资源地址。
```cwith open(f"./tutu/{''.join(name)}" + '.png', 'wb') as fw:fw.write(rr.content)img = Image.open(f"./tutu/{''.join(name)}" + '.png')img = img.resize((4000, 2000), Image.ANTIALIAS) # 改变大小 抗锯齿# print(img.size)img.save(f"./tutu/{''.join(name)}" + '.png', quality=95)print(str(name) + " 保存完成!")
对拿到的图片资源进行保存以及利用PIL库将图片的清晰度变成高清4k。
2、优化程序
我们通过这个流程可以拿到指定模块下高清图片,但是存在两个问题,第一就是我们没有加入翻页,只能获取到第一页的内容;其次模块的url是写死的,我们无法动态的选择下载摸个模块的高清图片。
于是我们对其进行如下的改进:
area = input('请输入类别:')if area.find('美女')>=0:area = '4kmeinv'elif area.find('风景')>=0:area = '4kfengjing'elif area.find('游戏')>=0:area = '4kyouxi'elif area.find('动漫')>=0:area = '4kdongman'elif area.find('影视')>=0:area = '4kyingshi'elif area.find('明星')>=0:area = '4kmingxing'elif area.find('汽车')>=0:area = '4kqiche'elif area.find('动物')>=0:area = '4kdongwu'elif area.find('人物')>=0:area = '4krenwu'elif area.find('美食')>=0:area = '4kmeishi'elif area.find('宗教')>=0:area = '4kzongjiao'elif area.find('背景')>=0:area = '4kbeijing'else:print('输入关键词格式不正确')sys.exit(0)page = int(input('请输入页数:'))for i in range(0,page+1):i = int(i)if i==1:url = 'http://pic.netbian.com/'+ area +'/index.html'res = requests.get(url=url,headers=headers)res.encoding = res.apparent_encoding # 修改编码response = etree.HTML(res.text)# print(type(response))response = etree.tostring(response)# print(type(response))response = etree.fromstring(response) # 以上搭建xpath对象# print(type(response))content = response.xpath('//ul[@class="clearfix"]/li')for i in content:tu_url = i.xpath('./a/@href')tupian_url = 'http://pic.netbian.com'+ ''.join(tu_url)url_list.append(tupian_url)elif i>=1:i = str(i)# url = 'http://pic.netbian.com/4kmeinv/index_.html'url = 'http://pic.netbian.com/' + area + '/index_' + i + '.html'res = requests.get(url=url,headers=headers)res.encoding = res.apparent_encoding # 修改编码response = etree.HTML(res.text)response = etree.tostring(response)# print(type(response))response = etree.fromstring(response) # 以上搭建xpath对象# print(type(response))content = response.xpath('//ul[@class="clearfix"]/li')for i in content:tu_url = i.xpath('./a/@href')tupian_url = 'http://pic.netbian.com'+ ''.join(tu_url)url_list.append(tupian_url)
我们将模块的选择以及页数,都定义为一个可以手动输入的参数,而这个参数利用find方法的特性支持关键词搜索,这样我们便可以下载你想要模块的高清图片了!
实际运行测试一下,假设我们要爬取美女图片模块下前2页的图片,那我们在开始日期中输入美女呀,在页数中输入 2,运行。
这样我们就可以顺利的获取到我们想要的高清4k图片啦。
以下是完整代码:
from lxml.html import etree
import requests
from PIL import Image
import os
import syspath = './tutu'if not os.path.exists(path):os.makedirs(path)headers = {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'
}
url_list = []
area = input('请输入类别:')
if area.find('美女')>=0:area = '4kmeinv'
elif area.find('风景')>=0:area = '4kfengjing'
elif area.find('游戏')>=0:area = '4kyouxi'
elif area.find('动漫')>=0:area = '4kdongman'
elif area.find('影视')>=0:area = '4kyingshi'
elif area.find('明星')>=0:area = '4kmingxing'
elif area.find('汽车')>=0:area = '4kqiche'
elif area.find('动物')>=0:area = '4kdongwu'
elif area.find('人物')>=0:area = '4krenwu'
elif area.find('美食')>=0:area = '4kmeishi'
elif area.find('宗教')>=0:area = '4kzongjiao'
elif area.find('背景')>=0:area = '4kbeijing'
else:print('输入关键词格式不正确')sys.exit(0)page = int(input('请输入页数:'))for i in range(0,page+1):i = int(i)if i==1:url = 'http://pic.netbian.com/'+ area +'/index.html'res = requests.get(url=url,headers=headers)res.encoding = res.apparent_encoding # 修改编码response = etree.HTML(res.text)response = etree.tostring(response)response = etree.fromstring(response) # 以上搭建xpath对象content = response.xpath('//ul[@class="clearfix"]/li')for i in content:tu_url = i.xpath('./a/@href')tupian_url = 'http://pic.netbian.com'+ ''.join(tu_url)url_list.append(tupian_url)elif i>=1:i = str(i)url = 'http://pic.netbian.com/' + area + '/index_' + i + '.html'res = requests.get(url=url,headers=headers)res.encoding = res.apparent_encoding # 修改编码response = etree.HTML(res.text)response = etree.tostring(response)response = etree.fromstring(response) # 以上搭建xpath对象content = response.xpath('//ul[@class="clearfix"]/li')for i in content:tu_url = i.xpath('./a/@href')tupian_url = 'http://pic.netbian.com'+ ''.join(tu_url)url_list.append(tupian_url)for i in url_list:r = requests.get(url=i, headers=headers)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')rr = requests.get('http://pic.netbian.com' + ''.join(url), headers=headers)name = html.xpath(r'//a[@id="img"]/img/@title')rr.encoding = rr.apparent_encoding # 修改编码with open(f"./tutu/{''.join(name)}" + '.png', 'wb') as fw:fw.write(rr.content)img = Image.open(f"./tutu/{''.join(name)}" + '.png')img = img.resize((4000, 2000), Image.ANTIALIAS) # 改变大小 抗锯齿# print(img.size)img.save(f"./tutu/{''.join(name)}" + '.png', quality=95)print(str(name) + " 保存完成!")print("保存完成!")
总结
这是笔者初学爬虫时写的一个爬虫练习脚本,也没有对其进行函数封装,发出来仅供大家娱乐使用,如果哪里有写误或没写清楚的地方,欢迎大家指正,相互学习,天天进步!
Python 网络爬虫:爬取4K高清美图相关推荐
- python网络爬虫快速下载4K高清壁纸
python网络爬虫快速下载4K高清壁纸 此处给出下载壁纸的链接地址彼岸图网,进入网站之后,我们看到可以下载风景,游戏,动漫,美女等类型的4K图片,装逼一下,re库有贪婪匹配,那我们就写一个通用代码来 ...
- 多线程爬取4k超高清美图壁纸
多线程爬取4k美图壁纸 前言:看完此篇文章你可以更加深入的了解多线程的使用,并且最重要的你能够下载你自己想要的超高清4k壁纸 爬取结果: 1. 分析网站 要爬取的url :http://pic.net ...
- 爬虫抓图全网最新方法分享,爬取轻松爬终极4K高清美图?
都2020年了,爬虫党还在为了图片的下载质量烦恼吗?还是只会下载JPG图片?那我有一种另类方式可以帮助你真正的白嫖高质量图片,肝了一个礼拜的干货,绝对能改变你对爬虫的看法和思考,原来爬虫这么有趣,也不 ...
- python壁纸4k_Python爬取4k高清动漫壁纸
[Python] 纯文本查看 复制代码package main package main import ( "bytes" "fmt" "io/iou ...
- Python爬虫从入门到精通:(9)数据解析_xpath解析2_爬取4K高清动漫图片_Python涛哥
使用xpath爬取4K高清动漫图片名称和图片数据 爬取当前页: # 创建文件夹 存储图片 dirName = 'GirlsLib' if not os.path.exists(dirName):os. ...
- python爬取4k高清壁纸(多线程版)
刚学了多线程,于是把上次写的博客拿出来进行改写, 原文链接:python爬取4k高清壁纸(再也不怕没有壁纸了) 爬取过程已经在上一次写过了,可以点击原文链接查看. 废话不多说,直接上多线程代码: im ...
- 全网最细------爬取4k高清大图
本次案例将教大家免费爬取4k高清大图,即使你是爬虫新手,也可以食用本次文章实现你的免费下载梦,话不多说,先看效果 网站视图: 看到这些图片你是否怦然心动,跟着我一起看下去. 一.思路分析 首先最基本的 ...
- python手机壁纸超清_详解Python静态网页爬取获取高清壁纸
前言 在设计爬虫项目的时候,首先要在脑内明确人工浏览页面获得图片时的步骤 一般地,我们去网上批量打开壁纸的时候一般操作如下: 1.打开壁纸网页 2.单击壁纸图(打开指定壁纸的页面) 3.选择分辨率(我 ...
- 如何利用Python网络爬虫爬取微信朋友圈动态--附代码(下)
前天给大家分享了如何利用Python网络爬虫爬取微信朋友圈数据的上篇(理论篇),今天给大家分享一下代码实现(实战篇),接着上篇往下继续深入. 一.代码实现 1.修改Scrapy项目中的items.py ...
最新文章
- 小牛生产小牛的问题解决集粹
- oracle 定时器时间分区_oracle分区表按时间自动创建
- 【每周CV论文】初学深度学习图像风格化要读的文章
- 简单介绍Python中的几种数据类型
- 开启SAP CDS view DCL前后的读取性能对比
- 使用 Blazor 开发内部后台(四):基于Card组件快速搭建导航首页
- Ontheinternet的深圳论坛
- vscode python 远程调试_vscode 远程调试python的方法
- 切换至 root 身份
- Xamarin For Android 打包编译APK文件详细图文教程
- 【xpath】多个xpath Element对象,提取结果是一样的
- pytorch 查看编号_最完整的PyTorch数据科学家指南(2)
- R-CNN学习笔记5:Faster R-CNN
- 【狂神说Redis】2Redis入门 2-3测试性能
- 【Unity】 2D贪吃豆开发流程
- 2013年,我的推荐博客汇总
- python入门学习随记(十二)
- 禁止K8S容器内子进程拥有提升权限的能力
- 成为人生的赢家都有哪些书_那么,我们是否有代码挑战#1的赢家?
- Spring bean是什么?
热门文章
- 洛阳九县八取名字_洛阳市九县六区是哪几个????
- python动物识别系统(仅有识别功能)
- 英语口语233之每日十句口语
- 【408操作系统】考点总结(更新ing)
- 双11趣味数据:448万人搜“女友喜欢什么”,而不到千人搜“男友喜欢什么”...
- 全球商品期货量化交易策略
- 性能指标:QTS, 并发数, TPS
- 【Python基础】字符串 正则表达式
- PHPExcel用法(详细)
- android按钮详解,android-morphing-button