Python爬虫实战批量下载高清美女图片,男生最爱的案例吧!
彼岸图网站里有大量的高清图片素材和壁纸,并且可以免费下载,读者也可以根据自己需要爬取其他类型图片,方法是类似的,本文通过python爬虫批量下载网站里的高清美女图片,熟悉python写爬虫的基本方法:发送请求、获取响应、解析并提取数据、保存到本地。
目标url:http://pic.netbian.com/4kmeinv/index.html
1. 爬取一页的图片
正则匹配提取图片数据
网页源代码部分截图如下:
重新设置GBK编码解决了乱码问题
代码实现:
import requests import re# 设置保存路径 path = r'D:\test\picture_1\ ' # 目标url url = "http://pic.netbian.com/4kmeinv/index.html" # 伪装请求头 防止被反爬 headers = {"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1","Referer": "http://pic.netbian.com/4kmeinv/index.html" }# 发送请求 获取响应 response = requests.get(url, headers=headers) # 打印网页源代码来看 乱码 重新设置编码解决编码问题 # 内容正常显示 便于之后提取数据 response.encoding = 'GBK'# 正则匹配提取想要的数据 得到图片链接和名称 img_info = re.findall('img src="(.*?)" alt="(.*?)" /', response.text)for src, name in img_info:img_url = 'http://pic.netbian.com' + src # 加上 'http://pic.netbian.com'才是真正的图片urlimg_content = requests.get(img_url, headers=headers).contentimg_name = name + '.jpg'with open(path + img_name, 'wb') as f: # 图片保存到本地print(f"正在为您下载图片:{img_name}")f.write(img_content)
Xpath定位提取图片数据
检查分析网页可以找到图片的链接和名称的Xpath路径,写出xpath表达式定位提取出想要的图片数据,但得到的每个图片的src前面需要都加上 ‘http://pic.netbian.com’ 得到的才是图片真正的url,可以用列表推导式一行代码实现。
代码实现:
import requests from lxml import etree# 设置保存路径 path = r'D:\test\picture_1\ ' # 目标url url = "http://pic.netbian.com/4kmeinv/index.html" # 伪装请求头 防止被反爬 headers = {"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1","Referer": "http://pic.netbian.com/4kmeinv/index.html" }# 发送请求 获取响应 response = requests.get(url, headers=headers) # 打印网页源代码来看 乱码 重新设置编码解决编码问题 # 内容正常显示 便于之后提取数据 response.encoding = 'GBK' html = etree.HTML(response.text) # xpath定位提取想要的数据 得到图片链接和名称 img_src = html.xpath('//ul[@class="clearfix"]/li/a/img/@src') # 列表推导式 得到真正的图片url img_src = ['http://pic.netbian.com' + x for x in img_src] img_alt = html.xpath('//ul[@class="clearfix"]/li/a/img/@alt')for src, name in zip(img_src, img_alt):img_content = requests.get(src, headers=headers).contentimg_name = name + '.jpg'with open(path + img_name, 'wb') as f: # 图片保存到本地print(f"正在为您下载图片:{img_name}")f.write(img_content)
2.翻页爬取,实现批量下载
手动翻页分析规律
第一页:http://pic.netbian.com/4kmeinv/index.html
第二页:http://pic.netbian.com/4kmeinv/index_2.html
第三页:http://pic.netbian.com/4kmeinv/index_3.html
最后一页:http://pic.netbian.com/4kmeinv/index_161.html
分析发现除第一页比较特殊,之后的页面都有规律,可以用列表推导式生成url列表,遍历url列表里的链接,进行请求,可实现翻页爬取图片。
单线程版
import requests from lxml import etree import datetime import time# 设置保存路径 path = r'D:\test\picture_1\ ' headers = {"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1","Referer": "http://pic.netbian.com/4kmeinv/index.html" } start = datetime.datetime.now()def get_img(urls):for url in urls:# 发送请求 获取响应response = requests.get(url, headers=headers)# 打印网页源代码来看 乱码 重新设置编码解决编码问题# 内容正常显示 便于之后提取数据response.encoding = 'GBK'html = etree.HTML(response.text)# xpath定位提取想要的数据 得到图片链接和名称img_src = html.xpath('//ul[@class="clearfix"]/li/a/img/@src')# 列表推导式 得到真正的图片urlimg_src = ['http://pic.netbian.com' + x for x in img_src]img_alt = html.xpath('//ul[@class="clearfix"]/li/a/img/@alt')for src, name in zip(img_src, img_alt):img_content = requests.get(src, headers=headers).contentimg_name = name + '.jpg'with open(path + img_name, 'wb') as f: # 图片保存到本地# print(f"正在为您下载图片:{img_name}")f.write(img_content)time.sleep(1)def main():# 要请求的url列表url_list = ['http://pic.netbian.com/4kmeinv/index.html'] + [f'http://pic.netbian.com/4kmeinv/index_{i}.html' for i in range(2, 11)]get_img(url_list)delta = (datetime.datetime.now() - start).total_seconds()print(f"抓取10页图片用时:{delta}s")if __name__ == '__main__':main()
程序运行成功,抓取了10页的图片,共210张,用时63.682837s。
多线程版
import requests from lxml import etree import datetime import time import random from concurrent.futures import ThreadPoolExecutor# 设置保存路径 path = r'D:\test\picture_1\ ' user_agent = ["Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6","Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6","Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/19.77.34.5 Safari/537.1","Mozilla/5.0 (Windows NT 6.0) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.36 Safari/536.5","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3","Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3","Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3","Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3","Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3","Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.0 Safari/536.3","Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24"] start = datetime.datetime.now()def get_img(url):headers = {"User-Agent": random.choice(user_agent),"Referer": "http://pic.netbian.com/4kmeinv/index.html"}# 发送请求 获取响应response = requests.get(url, headers=headers)# 打印网页源代码来看 乱码 重新设置编码解决编码问题# 内容正常显示 便于之后提取数据response.encoding = 'GBK'html = etree.HTML(response.text)# xpath定位提取想要的数据 得到图片链接和名称img_src = html.xpath('//ul[@class="clearfix"]/li/a/img/@src')# 列表推导式 得到真正的图片urlimg_src = ['http://pic.netbian.com' + x for x in img_src]img_alt = html.xpath('//ul[@class="clearfix"]/li/a/img/@alt')for src, name in zip(img_src, img_alt):img_content = requests.get(src, headers=headers).contentimg_name = name + '.jpg'with open(path + img_name, 'wb') as f: # 图片保存到本地# print(f"正在为您下载图片:{img_name}")f.write(img_content)time.sleep(random.randint(1, 2))def main():# 要请求的url列表url_list = ['http://pic.netbian.com/4kmeinv/index.html'] + [f'http://pic.netbian.com/4kmeinv/index_{i}.html' for i in range(2, 51)]with ThreadPoolExecutor(max_workers=6) as executor:executor.map(get_img, url_list)delta = (datetime.datetime.now() - start).total_seconds()print(f"爬取50页图片用时:{delta}s")if __name__ == '__main__':main()
程序运行成功,抓取了50页图片,共1047张,用时56.71979s。开多线程大大提高的爬取数据的效率。
最终成果如下:
3. 其他说明
- 本文仅用于python爬虫知识交流,勿作其他用途,违者后果自负。
- 不建议抓取太多数据,容易对服务器造成负载,浅尝辄止即可。
这个案例你爱了吗?源码获取加群:1136192749
原作者:叶庭云 如有侵权联系删除
Python爬虫实战批量下载高清美女图片,男生最爱的案例吧!相关推荐
- python利用多线程批量下载高清美女图片(350秒下载近3600张1.2个G的照片,地址可变)
目录 第一章.前言 1.1.实现的效果: 1.2.需要用到的库: 第二章.代码分块讲解 2.1.对象的定义和初始化 2.2.方法1和2获取所有图集链接 2.2.1. 对应网站结构 2.2.2 .相应代 ...
- 爬虫案例:利用python爬虫关键词批量下载高清大图
环境: python3+pycharm+requests+re+BeatifulSoup+json 这个确实也属实有一些勉强,不少童鞋私信问我有木有 下载大图 的源码,我说可能会有,现在分享给大家. ...
- 利用python爬虫关键词批量下载高清大图!
前言 在上一篇 写文章没高质量配图?python爬虫绕过限制一键搜索下载图虫创意图片 !中,我们在未登录的情况下实现了图虫创意 无水印高清小图 的批量下载.虽然小图能够在一些移动端可能展示的还行,但是 ...
- 爬虫python创意_爬虫案例:利用python爬虫关键词批量下载高清大图
环境: python3+pycharm+requests+re+BeatifulSoup+json 这个确实也属实有一些勉强,不少童鞋私信问我有木有 下载大图 的源码,我说可能会有,现在分享给大家. ...
- Python爬虫实战 — — Wallhaven壁纸高清原图下载
Python爬虫实战 - - Wallhaven壁纸高清原图下载 一.网站分析 二.可行性分析 三.代码分析 1.所需第三方库与请求头 2.获取当前页的所有壁纸图像链接 3.根据图像链接存储本地 4. ...
- 【Python爬虫】Python request 实现壁纸爬虫 一键批量下载高清壁纸
简介 本项目是本人检验python爬虫学习成果的一个小项目,简陋但能用,对壁纸有不同需求的可自行更改搜索参数,希望能帮到爬虫爱好者或者壁纸爱好者,爬取的所有图片均来源于wallhaven,仅用于个人欣 ...
- 【第1篇】Python爬虫实战-王者荣耀高清壁纸下载
目标网址:https://pvp.qq.com/web201605/wallpaper.shtml 目录 1.页面分析 2.程序源码 3.结果展示 1.页面分析 通过F12打开浏览器控制台,刷新一下页 ...
- Python爬虫实例 wallhaven网站高清壁纸爬取。
文章目录 Python爬虫实例 wallhaven网站高清壁纸爬取 一.数据请求 1.分析网页源码 2.全网页获取 二.数据处理 1.提取原图所在网页链接 2.获取高清图片地址及title 三.下载图 ...
- python爬虫实现批量下载百度图片
今天和小伙伴们合作一个小项目,需要用到景点图片作为数据源,在百度上搜索了一些图片,感觉一个一个手动保存太过麻烦,于是想到用爬虫来下载图片. 本次代码用到了下列一些python模块,需要预先安装Beau ...
最新文章
- 《趣学Python编程》——2.3 使用变量
- Qt实现FlatUI样式(开源)
- SAP CRM WebClient UI Text 可编辑与否的控制逻辑
- 不同编程语言能耗不同?看这27种语言对比!
- python制作自动回复脚本_python itchat实现微信自动回复的示例代码
- java 简单事件的使用,如何正确的使用Java事件通知(1)
- 计算机时代 英语,雅思8分范文:计算机时代教师角色 【出国英语】
- 在 F5 LTM 上配置数据包过滤
- 最新手机芯片AI跑分出炉:高通、联发科力压华为
- [sublime] sublime 实现Markdown编辑器
- jsp 图形验证码 imageutils_java_jsp:java:生成图形验证码(纯数字)
- 百度安装php环境,Centos下安装类百度文库环境
- markdown mysql高亮_博客园里Markdown支持高亮显示的语言
- 沃嘉工业机器人及自动化_智能制造和工业自动化的新宠儿——工业机器人
- Graphics.DrawLine 方法
- 计算机二级考试c语言考试注意事项,计算机二级MS Office、ACCESS、二级C语言考试的注意事项...
- vue创建项目卡住不动,vue create project卡住不动 解决办法
- gis 六边形网格_ArcGIS中的奇技淫巧(Ⅱ)—蜂巢网格图
- 第三方支付平台如何对接?
- Linux究竟值多少钱?