爬取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高清美图相关推荐

  1. python网络爬虫快速下载4K高清壁纸

    python网络爬虫快速下载4K高清壁纸 此处给出下载壁纸的链接地址彼岸图网,进入网站之后,我们看到可以下载风景,游戏,动漫,美女等类型的4K图片,装逼一下,re库有贪婪匹配,那我们就写一个通用代码来 ...

  2. 多线程爬取4k超高清美图壁纸

    多线程爬取4k美图壁纸 前言:看完此篇文章你可以更加深入的了解多线程的使用,并且最重要的你能够下载你自己想要的超高清4k壁纸 爬取结果: 1. 分析网站 要爬取的url :http://pic.net ...

  3. 爬虫抓图全网最新方法分享,爬取轻松爬终极4K高清美图?

    都2020年了,爬虫党还在为了图片的下载质量烦恼吗?还是只会下载JPG图片?那我有一种另类方式可以帮助你真正的白嫖高质量图片,肝了一个礼拜的干货,绝对能改变你对爬虫的看法和思考,原来爬虫这么有趣,也不 ...

  4. python壁纸4k_Python爬取4k高清动漫壁纸

    [Python] 纯文本查看 复制代码package main package main import ( "bytes" "fmt" "io/iou ...

  5. Python爬虫从入门到精通:(9)数据解析_xpath解析2_爬取4K高清动漫图片_Python涛哥

    使用xpath爬取4K高清动漫图片名称和图片数据 爬取当前页: # 创建文件夹 存储图片 dirName = 'GirlsLib' if not os.path.exists(dirName):os. ...

  6. python爬取4k高清壁纸(多线程版)

    刚学了多线程,于是把上次写的博客拿出来进行改写, 原文链接:python爬取4k高清壁纸(再也不怕没有壁纸了) 爬取过程已经在上一次写过了,可以点击原文链接查看. 废话不多说,直接上多线程代码: im ...

  7. 全网最细------爬取4k高清大图

    本次案例将教大家免费爬取4k高清大图,即使你是爬虫新手,也可以食用本次文章实现你的免费下载梦,话不多说,先看效果 网站视图: 看到这些图片你是否怦然心动,跟着我一起看下去. 一.思路分析 首先最基本的 ...

  8. python手机壁纸超清_详解Python静态网页爬取获取高清壁纸

    前言 在设计爬虫项目的时候,首先要在脑内明确人工浏览页面获得图片时的步骤 一般地,我们去网上批量打开壁纸的时候一般操作如下: 1.打开壁纸网页 2.单击壁纸图(打开指定壁纸的页面) 3.选择分辨率(我 ...

  9. 如何利用Python网络爬虫爬取微信朋友圈动态--附代码(下)

    前天给大家分享了如何利用Python网络爬虫爬取微信朋友圈数据的上篇(理论篇),今天给大家分享一下代码实现(实战篇),接着上篇往下继续深入. 一.代码实现 1.修改Scrapy项目中的items.py ...

最新文章

  1. 小牛生产小牛的问题解决集粹
  2. oracle 定时器时间分区_oracle分区表按时间自动创建
  3. 【每周CV论文】初学深度学习图像风格化要读的文章
  4. 简单介绍Python中的几种数据类型
  5. 开启SAP CDS view DCL前后的读取性能对比
  6. 使用 Blazor 开发内部后台(四):基于Card组件快速搭建导航首页
  7. Ontheinternet的深圳论坛
  8. vscode python 远程调试_vscode 远程调试python的方法
  9. 切换至 root 身份
  10. Xamarin For Android 打包编译APK文件详细图文教程
  11. 【xpath】多个xpath Element对象,提取结果是一样的
  12. pytorch 查看编号_最完整的PyTorch数据科学家指南(2)
  13. R-CNN学习笔记5:Faster R-CNN
  14. 【狂神说Redis】2Redis入门 2-3测试性能
  15. 【Unity】 2D贪吃豆开发流程
  16. 2013年,我的推荐博客汇总
  17. python入门学习随记(十二)
  18. 禁止K8S容器内子进程拥有提升权限的能力
  19. 成为人生的赢家都有哪些书_那么,我们是否有代码挑战#1的赢家?
  20. Spring bean是什么?

热门文章

  1. 洛阳九县八取名字_洛阳市九县六区是哪几个????
  2. python动物识别系统(仅有识别功能)
  3. 英语口语233之每日十句口语
  4. 【408操作系统】考点总结(更新ing)
  5. 双11趣味数据:448万人搜“女友喜欢什么”,而不到千人搜“男友喜欢什么”...
  6. 全球商品期货量化交易策略
  7. 性能指标:QTS, 并发数, TPS
  8. 【Python基础】字符串 正则表达式
  9. PHPExcel用法(详细)
  10. android按钮详解,android-morphing-button