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 = 1
    for link in pictures:
        r = requests.get(link, headers=header).content
        with 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 = 1
    for link in pictures:
        r = requests.get(link, headers=header).content
        with 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+=1
    num+=1
    next_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 = 1
    for link in pictures:
        r = requests.get(link, headers=header).content
        with 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 = 1
    for link in pictures:
        r = requests.get(link, headers=header).content
        with 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+=1
    num+=1
    next_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 = 1
    for link in pictures:
        r = requests.get(link, headers=header).content
        with 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)

部分截图如下:     

  • 22
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,以下是用Python爬虫爬取图片的步骤: 1. 导入需要的库:requests、os、urllib。 2. 使用requests库发送请求,获取页的HTML源代码。 3. 使用BeautifulSoup库解析HTML源代码,获取图片的URL地址。 4. 使用os库创建一个本地文件夹,用于存储下载的图片。 5. 使用urllib库下载图片,并保存在本地文件夹中。 6. 将上述步骤封装成函数,可用于批量下载图片。 下面是一个简单的代码示例: ``` import requests import os from bs4 import BeautifulSoup import urllib def download_images(url, folder_path): # 发送请求,获取HTML源代码 response = requests.get(url) html = response.text soup = BeautifulSoup(html, 'html.parser') # 查找所有的图片标签 img_tags = soup.findAll('img') # 创建本地文件夹 os.makedirs(folder_path, exist_ok=True) # 遍历所有图片标签,下载图片并保存到本地文件夹中 for img_tag in img_tags: img_url = img_tag.get('src') if img_url: img_path = os.path.join(folder_path, img_url.split('/')[-1]) urllib.request.urlretrieve(img_url, img_path) # 调用函数,下载图片 download_images('https://www.example.com', 'images') ``` 上述代码中,函数`download_images`接受两个参数:`url`表示要下载图片的页URL地址,`folder_path`表示要保存下载图片的本地文件夹路径。函数使用requests库发送请求,获取HTML源代码,然后使用BeautifulSoup库解析HTML代码,查找所有的图片标签,遍历所有图片标签,下载图片并保存到本地文件夹中。最后调用`download_images`函数,传入相应的参数即可完成图片下载。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值