使用Python爬取小姐姐图片(beautifulsoup法)

下面是使用Python爬取小姐姐图片的完整攻略,过程中包含两条示例说明。

1. 前置知识

在开始之前,我们需要了解一些基本知识:

  • Python编程语言
  • 爬虫的基本原理
  • Beautiful Soup库的基本用法

如果你对以上内容还不熟悉,可以先去了解一下相关知识。

2. 确定目标网站和页面

首先,我们需要确定一个目标网站和页面,这里我们选择的是一个美女图片网站:https://www.mzitu.com/。该网站由不同的图集组成,每个图集页面都有多张图片可以下载。

3. 分析目标页面

现在,我们需要对目标页面进行分析,找到包含图片的元素及其对应的CSS选择器。可以使用Chrome浏览器的开发者工具进行分析。

在我们选定的页面中,图片元素的标签为img,而其对应的CSS选择器为:div.main-image img,所以我们可以使用BeautifulSoup库找到这些元素。

4. 编写代码

首先,我们需要导入必要的库:

import requests
from bs4 import BeautifulSoup
import os

然后,我们需要编写一个函数,用于查找图集所有页面的URL地址:

def get_urls(url):
    headers = {
        'Referer': url,
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
    html = requests.get(url, headers=headers).text
    soup = BeautifulSoup(html, 'html.parser')
    page_num = soup.find_all('span', class_='dots')[-1].previous_sibling.get_text()
    page_urls = [f'{url}/{i}' for i in range(1, int(page_num) + 1)]
    return page_urls

在这个函数里面,我们使用requests库发送GET请求,获取页面的HTML内容,然后使用BeautifulSoup库解析HTML内容,找到总页数并生成所有页面的URL地址,这里用到的是格式化字符串,可以根据需要自行构造。

接下来,我们需要编写一个函数,用于下载每个页面中的所有图片:

def download_imgs(url):
    headers = {
        'Referer': url,
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
    html = requests.get(url, headers=headers).text
    soup = BeautifulSoup(html, 'html.parser')
    img_url = soup.find('div', class_='main-image').find('img')['src']
    file_name = os.path.basename(img_url)
    with open(file_name, 'wb') as f:
        f.write(requests.get(img_url, headers=headers).content)
        print(f'{file_name} 下载成功')

这个函数用于下载每一页中的图片。其中,我们使用os库获取图片的文件名,并使用requests库下载图片到本地。

最后,我们需要将get_urls和download_imgs组合起来,实现下载整个图集的功能:

url = 'https://www.mzitu.com/249897'
page_urls = get_urls(url)
for page_url in page_urls:
    download_imgs(page_url)

这里我们指定一个具体的图集页面URL,然后调用get_urls获取所有页面的URL地址,再调用download_imgs下载所有页面中的图片。

5. 示例说明

下面是两个使用Python爬取小姐姐图片的示例说明:

示例一

这个示例用于爬取 https://www.mzitu.com/ 的所有图集。

首先,我们需要编写一个函数,用于获取所有图集的URL地址:

def get_album_urls(base_url):
    album_urls = []
    for i in range(1, 20):
        url = f'{base_url}/page/{i}/'
        headers = {
            'Referer': base_url,
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
        html = requests.get(url, headers=headers).text
        soup = BeautifulSoup(html, 'html.parser')
        album_links = soup.find('ul', class_='archives').find_all('a')
        if len(album_links) == 0:
            break
        else:
            album_urls.extend([link['href'] for link in album_links])
    return album_urls

这个函数用于获取所有图集的URL地址,通过分析目标网站的HTML结构,我们可以找到图集URL的CSS选择器,从而使用BeautifulSoup库来提取URL地址。

接下来,我们可以将get_album_urls和我们之前编写的下载图集函数组合起来,实现整站图片的下载:

base_url = 'https://www.mzitu.com/'
album_urls = get_album_urls(base_url)
for album_url in album_urls:
    page_urls = get_urls(album_url)
    for page_url in page_urls:
        download_imgs(page_url)

这个代码会依次下载所有图集的所有图片。

示例二

这个示例用于爬取 https://www.mm131.net/ 的所有图片。

首先,我们需要编写一个函数,用于获取所有分类的URL地址:

def get_category_urls(base_url):
    headers = {
        'Referer': base_url,
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
    html = requests.get(base_url, headers=headers).text
    soup = BeautifulSoup(html, 'html.parser')
    category_links = soup.find('div', class_='nav').find_all('a')[1:]
    category_urls = [link['href'] for link in category_links]
    return category_urls

这个函数用于获取所有分类的URL地址,通过分析目标网站的HTML结构,我们可以找到分类URL的CSS选择器,从而使用BeautifulSoup库来提取URL地址。这里我们省略了一些无关代码,只保留了关键的部分。

接下来,我们可以循环遍历所有分类,进一步获取每个分类下的图片链接,并下载图片:

base_url = 'https://www.mm131.net/'
category_urls = get_category_urls(base_url)
for category_url in category_urls:
    for i in range(1, 101):
        url = f'{category_url}list_6_{i}.html'
        headers = {
            'Referer': base_url,
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
        html = requests.get(url, headers=headers).text
        soup = BeautifulSoup(html, 'html.parser')
        img_links = soup.find('div', class_='content-pic').find_all('img')
        if len(img_links) == 0:
            break
        for link in img_links:
            img_url = link['src']
            file_name = os.path.basename(img_url)
            with open(file_name, 'wb') as f:
                f.write(requests.get(img_url, headers=headers).content)
                print(f'{file_name} 下载成功')

这个代码会依次下载所有分类下的所有图片。

6. 总结

使用Python爬取小姐姐图片是一项有趣的任务,但也需要我们具有一定的编程知识和技能才能完成。在本文中,我们简要介绍了如何使用Python和BeautifulSoup库爬取小姐姐图片,同时也提供了两个示例,希望对大家有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用Python爬取小姐姐图片(beautifulsoup法) - Python技术站

(0)
上一篇 2023年5月14日
下一篇 2023年5月14日

相关文章

  • Python实现对比两个Excel数据内容并标记出不同

    下面是Python实现对比两个Excel数据内容并标记出不同的完整实例教程。 实现思路 本文使用Python语言,利用pandas库读取Excel文件,并将数据转换为DataFrame数据结构。利用DataFrame提供的函数对两个Excel表格进行比对,找寻不同的内容,并在新的Excel表格中标记出不同的内容。 读取Excel文件,将数据转换为DataFr…

    python 2023年5月13日
    00
  • Python用zip函数同时遍历多个迭代器示例详解

    下面是“Python用zip函数同时遍历多个迭代器示例详解”的完整攻略。 标题 简介 在开发Python项目时,常常需要同时遍历多个列表、元组、集合等数据结构,这时就可以利用Python内置函数zip()来实现。 函数说明 函数名:zip()函数功能:将多个可迭代对象中的元素配对组成元组。返回值:一个迭代器,生成由输入的迭代器共有的元素所构成的元组序列。使用…

    python 2023年6月3日
    00
  • Pandas读取并修改excel的示例代码

    下面是一份示例代码和相应的实现步骤,用于演示如何使用Pandas读取和修改Excel文件: 读取Excel文件 首先,我们需要导入Pandas库来读取Excel文件。具体代码如下: import pandas as pd # 读取Excel文件并存储为DataFrame对象 data = pd.read_excel(‘example.xlsx’) # 显示D…

    python 2023年5月13日
    00
  • Python下selenium的实战和普通爬虫的对比

    “””普通爬取数据爬虫,只要有反爬,cookie就不是很稳定。并不利于数据爬取””” import requests import re from lxml import etree headers = { “User-Agent”: “Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML…

    爬虫 2023年4月11日
    00
  • Python pandas对excel的操作实现示例

    下面为您讲解”Python Pandas 对 Excel的操作实现示例” 的完整实例教程。 介绍 Pandas是一个基于NumPy的Python开源数据分析工具,可以方便地对数据进行读取、处理、清洗、统计、分析等操作。而Excel作为数据处理中经典的办公软件,也是数据表格的代表,通常用户会使用Excel来处理和分析数据。在工作中,当需要大量处理Excel表格…

    python 2023年5月13日
    00
  • python遍历迭代器自动链式处理数据的实例代码

    Python遍历迭代器自动链式处理数据的实例代码 在Python中,可以使用迭代器(Iterator)来遍历可迭代对象(Iterable)。迭代器可以一个一个地获取可迭代对象中的元素,然后对它们进行处理。在处理数据时,经常需要对数据进行链式操作,而Python中的迭代器可以自动实现链式处理,非常方便。下面我们就介绍一下Python遍历迭代器自动链式处理数据的…

    python 2023年5月19日
    00
  • python向json中追加数据的两种方法总结

    关于“python向json中追加数据的两种方法总结”的完整攻略,我会从以下几个方面进行讲解: 什么是JSON? Python中处理JSON的常用方法 Python向JSON中追加数据的两种方法 示例说明 1. 什么是JSON? JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,具有良好的可读性和便于机器解析。JSO…

    python 2023年6月3日
    00
  • 10个示例带你掌握python中的元组

    10个示例带你掌握 Python 中的元组 元组(tuple)是 Python 中的一种基本数据结构,可以视为不可变的列表。元组的创建方式和列表类似,但是元组创建后不能再进行修改。 1. 创建元组 元组可通过多种方式创建,以下是其中几种: 1.1 直接使用小括号 t1 = () t2 = (1, 2, 3) t3 = (4,) 上面的代码中,t1 表示空元组…

    python 2023年5月14日
    00
合作推广
合作推广
分享本页
返回顶部