Python进阶--爬取美女图片壁纸(基于回车桌面网的爬虫程序)

目录

一、前言

二、爬取下载美女图片

1、抓包分析

a、分析页面

b、明确需求

c、抓包搜寻

d、总结特点

2、编写爬虫代码

a、获取图片页网页源代码

b、提取所有图片的链接和标题

c、下载并保存这组图片

d、 爬取目录页的各种类型美女图片的链接

e、实现翻页

三、各种需求的爬虫代码

1、下载所有美女图片 

2、下载想要页码范围内的美女图片

3、下载想要类型的美女图片

a、下载想要类型的所有美女图片

b、下载想要类型的想要页码范围的美女图片


一、前言

        回车桌面网(https://www.enterdesk.com/)是一个具备各种精美图片的网站,里面包含各种丰富的图片资源。此处,将详细讲解爬取其中美女图片资源将其下载到本地。看懂本篇内容后,自己也可以爬取其中想要的类型图片。

回车桌面的首页:

        此处仅爬取所框选中的美女图片,看懂本篇后,自己也能做到爬取其他类型的图片!!!

二、爬取下载美女图片

1、抓包分析

        爬虫的第一步都是抓包分析(也就是分析网页,从网页源代码中找到自己想要的内容)。

a、分析页面

(1)在回车桌面中点击美女跳转到美女图片的网页

(2)在美女图片页面中,可以看到有各种类型的美女图片和下一页按钮。

(3)点击一种类型的美女图片会跳转到该种类型的美女图片的具体图片界面

(4)点击下一页会跳转到另一页的美女图片页面,里面包含其他的类型的美女图片

(5)在美女图片页面中还有分类标签,点击一种风格类型,则会跳转到该种类型风格的美女图片

美女网页:

各种类型的美女图片: 

 美女页面的下一页所在位置:

一种类型美女图片的页面:

b、明确需求

        根据上面的页面分析,可以明确以下需求:

  • 要获取到下一页的url所在页面源代码的位置
  • 要获取到每种类型美女图片的url
  • 要找到一种类型美女的各种图片下载的url
  • 对美女网页进行requests请求,需要有请求头,找到请求网页的url、user-agent、cookie等信息
  • 找到各种分类标签的url

c、抓包搜寻

        根据以上需求,分析网页源代码,找到想要的内容。

步骤:

  1. 在美女页面,按下F12,打开开发者界面
  2. 点击开发者界面左上角的鼠标箭头
  3. 将箭头移到在美女页面的一种类型的美女图片上并点击一下
  4. 在开发者界面将会出现此部分的网页源代码

        通过以上步骤,抓包寻找,可以分别找到需求部分所要内容: 

  • 要获取到下一页的url所在页面源代码的位置
  • 要获取到每种类型美女图片的url
  • 要找到一种类型美女的各种图片下载的url
  • 对美女网页进行requests请求,需要有请求头,找到请求网页的url、user-agent、cookie等信息
  • 找到各种分类标签的url

d、总结特点

          经过抓包搜寻,可以发现:

  • 美女页面每一页的url的构造为:以数字进行标记页码
'https://m.mm.enterdesk.com/1.html'
'https://m.mm.enterdesk.com/2.html'
'https://m.mm.enterdesk.com/3.html'
'https://m.mm.enterdesk.com/4.html'
'https://m.mm.enterdesk.com/5.html'....
'https://m.mm.enterdesk.com/262.html'
'https://m.mm.enterdesk.com/264.html'
  • 美女页面的标签的url的构造为:以风格类型的中文拼音+meinv
'https://mm.enterdesk.com/dalumeinv/'
'https://mm.enterdesk.com/rihanmeinv/'
'https://mm.enterdesk.com/gangtaimeinv/'
'https://mm.enterdesk.com/dongmanmeinv/'
'https://mm.enterdesk.com/qingchunmeinv/'
'https://mm.enterdesk.com/oumeimeinv/'
  • 其他的url需要通过xPath来定位,根据所在位置的特点来定位
美女页面的各种类型的美女图片链接xPath定位://div[@class="mbig_pic_list_li"]//dd//a/@href
一种类型美女图片的标题xPath定位://h1[@class="m_h1"]/a/text()
一种类型美女图片的图片的urlxPath定位://div[@class="swiper-wrapper"]//img/@src

2、编写爬虫代码

        根据上面的抓包分析,可以编写爬虫代码。

具体代码思路为:

1. 获取图片页网页源代码
2. 提取所有图片的链接和标题
3. 下载并保存这组图片
4.
 爬取目录页的各种类型美女图片的链接
5. 实现翻页下载

a、获取图片页网页源代码

import os.path
from lxml import etree
import requests
# 1、获取回车桌面美女图片的网页源代码
header = {'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Mobile Safari/537.36','cookie':'Hm_lvt_86200d30c9967d7eda64933a74748bac=1707274876; t=8207bbae9940b5f445e4f3aa1907d202; r=9737; Hm_lpvt_86200d30c9967d7eda64933a74748bac=1707276063'}
index_url = 'https://m.mm.enterdesk.com/'
r = requests.get(index_url, headers=header)

b、提取所有图片的链接和标题

def get_curindex_titlecontent(index_url):r = requests.get(index_url, headers=header)html = etree.HTML(r.text)titles = html.xpath('//h1[@class="m_h1"]/a/text()')pictures = html.xpath('//div[@class="marc_pandn"]//div[@class="swiper-slide"]//img/@src')return titles, pictures

c、下载并保存这组图片

def updownload(index_url):titles,pictures = get_curindex_titlecontent(index_url)titles = titles[0]# 创建目录if not os.path.exists(f'图片/{titles}/'):os.makedirs(f'图片/{titles}')num = 1for link in pictures:r = requests.get(link, headers=header).contentwith open(f'图片/{titles}/{titles}{num}.jpg', 'wb') as f:f.write(r)print(f"已下载...{titles}...编号为{num}的图片")num+=1

d、 爬取目录页的各种类型美女图片的链接

def get_curindex_links(index_url):r = requests.get(index_url, headers=header)html = etree.HTML(r.text)links = html.xpath('//div[@class="mbig_pic_list_li"]//dd//a/@href')return links

e、实现翻页

def get_nextindex_links(index_url):r = requests.get(index_url, headers=header)html = etree.HTML(r.text)links = html.xpath('//div[@class="listpages"]//a[@class="next_p"]/@href')return links

三、各种需求的爬虫代码

1、下载所有美女图片 

        由于美女图片数量较大,不建议使用这种情况。

思路:想要下载所有图片。在第一页的美女页面,下载完这一页图片后,通过获取下一页的链接,来刷新到第二页的美女页面,继续下载第二页的美女图片。然后继续获取下一页来刷新,直到下载到最后一页。最后一页是没有下一页的链接的,所以到了最后一页,获取下一页的代码会报错。但是没有关系,这里已经下载完了所有美女图片。

代码如下:

import os.path
from lxml import etree
import requests
# 1、获取回车桌面美女图片的网页源代码
header = {'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Mobile Safari/537.36','cookie':'Hm_lvt_86200d30c9967d7eda64933a74748bac=1707274876; t=8207bbae9940b5f445e4f3aa1907d202; r=9737; Hm_lpvt_86200d30c9967d7eda64933a74748bac=1707276063'}
index_url = 'https://m.mm.enterdesk.com/'
r = requests.get(index_url, headers=header)
# 2、获取当前回车桌面美女页面的各种美女类型图片的链接
def get_curindex_links(index_url):r = requests.get(index_url, headers=header)html = etree.HTML(r.text)links = html.xpath('//div[@class="mbig_pic_list_li"]//dd//a/@href')return links
# 3、获取下一页的美女页面链接
def get_nextindex_links(index_url):r = requests.get(index_url, headers=header)html = etree.HTML(r.text)links = html.xpath('//div[@class="listpages"]//a[@class="next_p"]/@href')return links
# 4、获取一种美女类型的图片及类型名
def get_curindex_titlecontent(index_url):r = requests.get(index_url, headers=header)html = etree.HTML(r.text)titles = html.xpath('//h1[@class="m_h1"]/a/text()')pictures = html.xpath('//div[@class="swiper-wrapper"]//img/@src')return titles, pictures
# 5、将图片进行下载保存到新的目录中
def updownload(index_url):titles,pictures = get_curindex_titlecontent(index_url)titles = titles[0]# 创建目录if not os.path.exists(f'图片/{titles}/'):os.makedirs(f'图片/{titles}')num = 1for link in pictures:r = requests.get(link, headers=header).contentwith open(f'图片/{titles}/{titles}{num}.jpg', 'wb') as f:f.write(r)print(f"已下载...{titles}...编号为{num}的图片")num+=1
# 6、根据顺序来调整调用顺序
# a、获取各种类型美女图片的链接
num = 1
a = 1
while 1:links = get_curindex_links(index_url)print(f"正在下载第{num}页")print(f"下载链接为:{index_url}")for link in links:
# b、获取其中一个链接的内容和标题并下载保存print(f"正在下载第{a}种类型的美女图片")updownload(link)a+=1num+=1next_page = get_nextindex_links(index_url)# 将列表转换成字符串index_url ="".join(next_page)

部分运行结果截图 :

2、下载想要页码范围内的美女图片

        根据前面的总结特点,美女目录页面是根据1,2,3,4...来标记当前是第几页的。据此,可以通过读取键盘消息来下载自己想要范围内的美女图片。

代码如下:

import os.path
from lxml import etree
import requests
# 1、获取回车桌面美女图片的网页源代码
header = {'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Mobile Safari/537.36','cookie':'Hm_lvt_86200d30c9967d7eda64933a74748bac=1707274876; t=8207bbae9940b5f445e4f3aa1907d202; r=9737; Hm_lpvt_86200d30c9967d7eda64933a74748bac=1707276063'}
index_url = 'https://m.mm.enterdesk.com/'
r = requests.get(index_url, headers=header)
# 2、获取当前回车桌面美女页面的各种美女类型图片的链接
def get_curindex_links(index_url):r = requests.get(index_url, headers=header)html = etree.HTML(r.text)links = html.xpath('//div[@class="mbig_pic_list_li"]//dd//a/@href')return links
# 3、获取一种美女类型的图片及类型名
def get_curindex_titlecontent(index_url):r = requests.get(index_url, headers=header)html = etree.HTML(r.text)titles = html.xpath('//h1[@class="m_h1"]/a/text()')pictures = html.xpath('//div[@class="swiper-wrapper"]//img/@src')return titles, pictures
# 4、将图片进行下载保存到新的目录中
def updownload(index_url):titles,pictures = get_curindex_titlecontent(index_url)titles = titles[0]# 创建目录if not os.path.exists(f'图片/{titles}/'):os.makedirs(f'图片/{titles}')num = 1for link in pictures:r = requests.get(link, headers=header).contentwith open(f'图片/{titles}/{titles}{num}.jpg', 'wb') as f:f.write(r)print(f"已下载...{titles}...编号为{num}的图片")num+=1
# 5、根据顺序来调整调用顺序
# a、获取各种类型美女图片的链接
a = 1
# 输入自己想要的页码范围内的美女图片
x = input("请输入起始页的页码:")
y = input("请输入结束页的页码:")
# 因为range函数是左闭右开的情况,所以y需要自增1
for page in range(int(x), int(y)+1):new_index = index_url + str(page) + '.html'links = get_curindex_links(new_index)print(f"正在下载第{page}页")print(f"下载链接为:{new_index}")for link in links:# b、获取其中一个链接的内容和标题并下载保存print(f"正在下载第{a}种类型的美女图片")updownload(link)a+=1

部分运行结果截图:

3、下载想要类型的美女图片

        根据前面总结特点,可知各种标签的美女类型的url是通过输入中文拼音+meinv来进行标记的。则,可以通过读取键盘输入美女类型来下载想要类型的美女图片。这种情况下,存在两种需求。一是下载想要类型的所有的美女图片,二是下载想要类型的想要页码范围的美女图片。

a、下载想要类型的所有美女图片

代码如下:

import os.path
from lxml import etree
import requests
# 1、获取回车桌面美女图片的网页源代码
header = {'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Mobile Safari/537.36','cookie':'Hm_lvt_86200d30c9967d7eda64933a74748bac=1707274876; t=8207bbae9940b5f445e4f3aa1907d202; r=9737; Hm_lpvt_86200d30c9967d7eda64933a74748bac=1707276063'}
index_url = 'https://m.mm.enterdesk.com/'
r = requests.get(index_url, headers=header)
# 2、获取当前回车桌面美女页面的各种美女类型图片的链接
def get_curindex_links(index_url):r = requests.get(index_url, headers=header)html = etree.HTML(r.text)links = html.xpath('//div[@class="mbig_pic_list_li"]//dd//a/@href')return links
# 3、获取下一页的美女页面链接
def get_nextindex_links(index_url):r = requests.get(index_url, headers=header)html = etree.HTML(r.text)links = html.xpath('//div[@class="listpages"]//a[@class="next_p"]/@href')return links
# 4、获取一种美女类型的图片及类型名
def get_curindex_titlecontent(index_url):r = requests.get(index_url, headers=header)html = etree.HTML(r.text)titles = html.xpath('//h1[@class="m_h1"]/a/text()')pictures = html.xpath('//div[@class="marc_pandn"]//div[@class="swiper-slide"]//img/@src')return titles, pictures
# 5、将图片进行下载保存到新的目录中
def updownload(index_url):titles,pictures = get_curindex_titlecontent(index_url)titles = titles[0]# 创建目录if not os.path.exists(f'图片/{keyword}/{titles}/'):os.makedirs(f'图片/{keyword}/{titles}')num = 1for link in pictures:r = requests.get(link, headers=header).contentwith open(f'图片/{keyword}/{titles}/{titles}{num}.jpg', 'wb') as f:f.write(r)print(f"已下载...{titles}...编号为{num}的图片")num+=1
# 6、根据键盘的输入来下载想要类型的美女图片
# a、读取键盘消息
keyword = input("请输入想要下载的类型的美女图片(中文拼音):")
index_url = index_url + keyword
num = 1
a = 1
while 1:links = get_curindex_links(index_url)print(f"正在下载第{num}页")print(f"下载链接为:{index_url}")for link in links:
# b、获取其中一个链接的内容和标题并下载保存print(f"正在下载第{a}种类型的美女图片")updownload(link)a+=1num+=1next_page = get_nextindex_links(index_url)# 将列表转换成字符串index_url ="".join(next_page)

部分截图如下: 

b、下载想要类型的想要页码范围的美女图片

代码如下:

import os.path
from lxml import etree
import requests
# 1、获取回车桌面美女图片的网页源代码
header = {'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Mobile Safari/537.36','cookie':'Hm_lvt_86200d30c9967d7eda64933a74748bac=1707274876; t=8207bbae9940b5f445e4f3aa1907d202; r=9737; Hm_lpvt_86200d30c9967d7eda64933a74748bac=1707276063'}
index_url = 'https://m.mm.enterdesk.com/'
r = requests.get(index_url, headers=header)
# 2、获取当前回车桌面美女页面的各种美女类型图片的链接
def get_curindex_links(index_url):r = requests.get(index_url, headers=header)html = etree.HTML(r.text)links = html.xpath('//div[@class="mbig_pic_list_li"]//dd//a/@href')return links
# 3、获取一种美女类型的图片及类型名
def get_curindex_titlecontent(index_url):r = requests.get(index_url, headers=header)html = etree.HTML(r.text)titles = html.xpath('//h1[@class="m_h1"]/a/text()')pictures = html.xpath('//div[@class="swiper-wrapper"]//img/@src')return titles, pictures
# 4、将图片进行下载保存到新的目录中
def updownload(index_url):titles,pictures = get_curindex_titlecontent(index_url)titles = titles[0]print(titles)# 创建目录if not os.path.exists(f'图片/{keyword}/{titles}/'):os.makedirs(f'图片/{keyword}/{titles}')num = 1for link in pictures:r = requests.get(link, headers=header).contentwith open(f'图片/{keyword}/{titles}/{titles}{num}.jpg', 'wb') as f:f.write(r)print(f"已下载...{titles}...编号为{num}的图片")num+=1
# 5、根据键盘的输入来下载想要类型的美女图片
# a、读取键盘消息
keyword = input("请输入想要下载的类型的美女图片(中文拼音):")
index_url = index_url + keyword +'/'
# 输入自己想要的页码范围内的美女图片
x = input("请输入起始页的页码:")
y = input("请输入结束页的页码:")
# 因为range函数是左闭右开的情况,所以y需要自增1
for page in range(int(x), int(y)+1):new_index = index_url + str(page) + '.html'links = get_curindex_links(new_index)print(f"正在下载第{page}页")print(f"下载链接为:{new_index}")for a, link in enumerate(links):# b、获取其中一个链接的内容和标题并下载保存print(f"正在下载第{page}页的第{a}种类型的美女图片")updownload(link)

部分截图如下:     

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/460770.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

wyh的迷宫

涉及知识点:求迷宫能否到达终点的,而不是求路径数的,用bfs时可以不用重置状态数组(回溯)。 题目描述 给你一个n*m的迷宫,这个迷宫中有以下几个标识: s代表起点 t代表终点 x代表障碍物 .代…

python-产品篇-游戏-象棋

文章目录 代码效果 代码 import pygame import time import constants from button import Button import pieces import computerclass MainGame():window NoneStart_X constants.Start_XStart_Y constants.Start_YLine_Span constants.Line_SpanMax_X Start_X 8 * Lin…

读千脑智能笔记07_人工智能的未来(中)

1. 机器智能的未来 1.1. 没有任何技术原因阻止我们创造智能机器 1.1.1. 障碍在于我们缺乏对智能的理解,也不知道产生智能所需的机制 1.2. 历史表明,我们无法预测将推动机器智能向前发展的技术进步 1.2.1. …

【数据结构】链表OJ面试题2《分割小于x并排序链表、回文结构、相交链表》+解析

1.前言 前五题在这http://t.csdnimg.cn/UeggB 休息一天,今天继续刷题! 2.OJ题目训练 1. 编写代码,以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前 。链表分割_牛客题霸_牛客网 思路 既然涉及…

深入理解原码、反码和补码

文章目录 前言原码反码补码原码、反码、补码之间的转换为什么需要反码和补码? 前言 在计算机领域,经常会听到原码、反码和补码这些概念。这些概念是计算机中对数值进行存储和运算的基础。本文将深入探讨这些概念,解释它们的定义、特点以及在…

黑马程序员——html css基础——day09——CSS高级

目录: 定位 相对定位:绝对定位定位居中固定定位堆叠层级z-index高级技巧 CSS精灵案例-写出自己的名字字体图标下载字体使用字体CSS修饰属性 垂直对齐方式过渡表单获得焦点选择器focus透明度opacity光标类型cursor禁用鼠标样式表格样式-合并相邻两个边框…

第59讲订单数据下拉实现

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;/*** 订单查询 type值 0 全部订单 1待付款 2 待收货 3 退款/退货* param type* return*/RequestMapping("/list")public R list(Integer type,Integer page,Integer pageSize){System.out.pri…

使用 Docker 镜像预热提升容器启动效率详解

概要 在容器化部署中,Docker 镜像的加载速度直接影响到服务的启动时间和扩展效率。本文将深入探讨 Docker 镜像预热的概念、必要性以及实现方法。通过详细的操作示例和实践建议,读者将了解如何有效地实现镜像预热,以加快容器启动速度,提高服务的响应能力。 Docker 镜像预热…

传输层协议 ——— TCP协议

TCP协议 TCP协议谈谈可靠性为什么网络中会存在不可靠?TCP协议格式TCP如何将报头与有效载荷进行分离?序号与确认序号 确认应答机制(ACK)超时重传机制连接管理机制三次握手四次挥手 流量控制滑动窗口拥塞控制延迟应答捎带应答面向字…

关于使用sort函数来快排的几种使用方法(总结)

sort 函数是一个极好的排序函数,因为其运行速度块,占用内存少,排序也省力,深受程序员们的喜爱,具体用法这里就不再多介绍了,今天主要强调以下几点快排: 1.从大到小快排: #include &…

数字图像处理实验记录九(数字形态学实验)

一、基础知识 1.形态学,用于从图像中提取对表达和描绘区域形状有意义的图像分量,使后续的识别工作能够抓住目标对象最为有本质的形状特征,如边界连通区域等。 2.膨胀运算:膨胀会使目标区域范围“变大”,将于目标区域接…

如何给闲置电脑安装黑群晖

准备 diskgenius ,黑群晖引导文件(有些需要扩展驱动包),如果给U盘安装需要balenaEtcher或者rufus(U盘安装还需要ChipGenus),如果给硬盘安装需要有pe推荐firePE或U启通 我以U盘为例 首先去找这…