Python爬取网页中的图片(搜狗图片)详解

接下来我将为您详细讲解“Python爬取网页中的图片(搜狗图片)详解”的完整攻略。

标题

1. 确定爬取目标

要爬取搜狗图片,我们需要先确定要爬取的页面以及其中的图片。在本例中,我们将使用如下链接作为目标:

https://pic.sogou.com/pics?query=%E7%BE%8E%E5%A5%B3%E5%9B%BE%E7%89%87

此链接指向一个以“美女图片”为关键字的图片搜索结果页面。

2. 安装必要的库

在代码实现之前,需要先安装如下几个Python库:

pip install requests
pip install beautifulsoup4
pip install lxml

其中,requests用于向指定网站发送请求,beautifulsoup4用于解析HTML页面,lxml作为beautifulsoup4的解析器,用于解析HTML页面中的节点,获取其中的图片链接。

3. 获取图片链接

获取图片链接的过程需要经过以下几个步骤:

(1)向指定网站发送请求

import requests

url = 'https://pic.sogou.com/pics'
params = {
    'query': '美女图片',
    'mode': 1,
    'start': 48,
    'reqType': 'ajax',
    'tn': 0,
    'reqFrom': 'result'
}
response = requests.get(url, params=params)
response.encoding = 'utf-8'

我们使用requests库构造了一个GET请求,其中要发送的参数包括查询关键字、搜索模式、起始搜索位置、请求类型、以及请求来源等内容。获取到的搜索结果将会被放入response对象中。

(2)解析HTML页面

from bs4 import BeautifulSoup

soup = BeautifulSoup(response.text, 'lxml')

使用BeautifulSoup构造器,我们将获取到的内容解析成了一个BeautifulSoup对象。为后续处理提供了便利。

(3)提取图片链接

img_tags = soup.find_all('img')
img_urls = [img['src'] for img in img_tags]

我们使用soup对象中提供的find_all方法,获取了页面中所有的img节点。遍历这些节点,可以提取其中的图片链接并存储在一个列表对象img_urls中。

4. 下载图片文件

当我们获取到了所有的图片链接之后,我们就可以使用Python提供的requests库来下载这些图片了。

import os

for idx, url in enumerate(img_urls):
    print('正在下载第{}张图片,链接:{}'.format(idx+1, url))
    response = requests.get(url)

    folder_name = 'images'
    if not os.path.exists(folder_name):
        os.makedirs(folder_name)

    with open('{}/{}.jpg'.format(folder_name, idx), 'wb') as f:
        f.write(response.content)

print('所有图片下载完成')

在以上代码中,我们遍历了所有的图片链接,使用requests库下载图片并存储在指定的文件夹中(在这里为images)。为了防止文件夹不存在的情况,我们使用os库的makedirs方法先行创建了文件夹。

示例

下面给出两个示例,分别演示了如何获取并下载搜狗图片搜索结果页面中的图片。

示例1:获取前2页的搜狗图片

以下示例可以获取前2页的搜狗图片,并将其保存至本地。

import requests
from bs4 import BeautifulSoup
import os

def download_image(url, max_page):
    for i in range(max_page):
        params = {
            'query': '美女图片',
            'mode': 1,
            'start': i * 48,  # 一页展示48张图片
            'reqType': 'ajax',
            'tn': 0,
            'reqFrom': 'result'
        }
        response = requests.get(url, params=params)
        soup = BeautifulSoup(response.text, 'lxml')
        img_tags = soup.find_all('img')
        img_urls = [img['src'] for img in img_tags]

        folder_name = 'images'
        if not os.path.exists(folder_name):
            os.makedirs(folder_name)

        for idx, img_url in enumerate(img_urls):
            print('正在下载第{}张图片,链接:{}'.format(idx+1, img_url))
            response = requests.get(img_url)
            with open('{}/{}.jpg'.format(folder_name, i*48+idx), 'wb') as f:
                f.write(response.content)
    print('所有图片下载完成')

if __name__ == '__main__':
    url = 'https://pic.sogou.com/pics'
    max_page = 2
    download_image(url, max_page)

示例2:获取指定关键字的搜狗图片

以下示例可以获取指定关键字的搜狗图片,并将其保存至本地。

import requests
from bs4 import BeautifulSoup
import os

def download_image(url, max_page, keyword):
    for i in range(max_page):
        params = {
            'query': keyword,
            'mode': 1,
            'start': i * 48,  # 一页展示48张图片
            'reqType': 'ajax',
            'tn': 0,
            'reqFrom': 'result'
        }
        response = requests.get(url, params=params)
        soup = BeautifulSoup(response.text, 'lxml')
        img_tags = soup.find_all('img')
        img_urls = [img['src'] for img in img_tags]

        folder_name = 'images_{}'.format(keyword)
        if not os.path.exists(folder_name):
            os.makedirs(folder_name)

        for idx, img_url in enumerate(img_urls):
            print('正在下载第{}张图片,链接:{}'.format(idx+1, img_url))
            response = requests.get(img_url)
            with open('{}/{}.jpg'.format(folder_name, i*48+idx), 'wb') as f:
                f.write(response.content)
    print('所有图片下载完成')

if __name__ == '__main__':
    url = 'https://pic.sogou.com/pics'
    max_page = 1
    keyword = '猫咪图片'
    download_image(url, max_page, keyword)

以上就是“Python爬取网页中的图片(搜狗图片)详解”的完整攻略,希望对您有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python爬取网页中的图片(搜狗图片)详解 - Python技术站

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

相关文章

  • Python GUI Tkinter简单实现个性签名设计

    下面我将为您介绍“Python GUI Tkinter简单实现个性签名设计”的完整攻略。 1. 初步了解Tkinter 首先,我们需要在Python中安装Tkinter库。Tkinter是一个Python自带的GUI界面库,提供了创建窗口应用程序的基本工具。要使用Tkinter,只需要在代码中导入Tkinter模块即可: import tkinter as …

    python 2023年6月13日
    00
  • Python reques接口测试框架实现代码

    首先,Python的requests库是用于发送HTTP/1.1请求。这个库可以完全地替代Python内置的httplib库。但是,这个有额外的好处,需要手动处理cookies、重定向可以直接获取等等。在接口测试中,使用requests库发送HTTP请求并获取响应内容,可以实现接口的功能测试、性能测试、安全测试等多种测试。 以下是实现Python reque…

    python 2023年5月13日
    00
  • Python中字典常用操作的示例详解

    感谢您对“Python中字典常用操作的示例详解”的关注。下面将为您详细讲解Python字典常用操作的示例详解,以下是主要内容: 目录 字典常用操作概述 获取键值 添加、修改、删除键值对 遍历字典 字典常用方法 总结 字典常用操作概述 Python中的字典是一种存储key-value键值对数据类型。在Python中,字典拥有以下常用操作: 获取键值 添加、修改…

    python 2023年5月13日
    00
  • Python如何生成xml文件

    在Python中,可以使用xml.etree.ElementTree模块来生成XML文件。以下是详细的攻略,介绍如何使用xml.etree.ElementTree模块生成XML文件: 创建XML元素 可以使用xml.etree.ElementTree模块创建XML元素。以下是一个示例,演示如何使用xml.etree.ElementTree模块创建XML元素:…

    python 2023年5月14日
    00
  • Python统计一个字符串中每个字符出现了多少次的方法【字符串转换为列表再统计】

    下面我来详细讲解一下”Python统计一个字符串中每个字符出现了多少次的方法【字符串转换为列表再统计】”的方法。 1. 将字符串转换为列表 首先,我们需要将字符串转换为列表。这可以通过 python 内置的 list() 函数实现。 s = "hello" lst = list(s) # 输出 [‘h’, ‘e’, ‘l’, ‘l’, ‘…

    python 2023年6月3日
    00
  • 对python PLT中的image和skimage处理图片方法详解

    对python PLT中的image和skimage处理图片方法详解 前言 在Python中,matplotlib.pyplot(简称mpl或plt)和scikit-image(简称skimage)是常用的处理图像和可视化的库。本篇文章将详细讲解matplotlib.pyplot和scikit-image的常用API,以及使用案例。 matplotlib.p…

    python 2023年5月19日
    00
  • pip报错“ModuleNotFoundError: No module named ‘pip._vendor.colorama’”怎么处理?

    原因 “ModuleNotFoundError: No module named ‘pip._vendor.colorama'” 错误通常是以下原因引起的: pip 安装损坏:如果您的 pip 安装损坏或不完整,则可能会出现此错误。在这种情况下,您需要重新安装 pip。 缺少 colorama 模块:如果您的系统缺少 colorama 模块,则可能会出现此错…

    python 2023年5月4日
    00
  • Python Pycharm虚拟下百度飞浆PaddleX安装报错问题及处理方法

    Python Pycharm虚拟下百度飞浆PaddleX安装报错问题及处理方法 在使用Python Pycharm虚拟环境下安装百度飞浆PaddleX时,可能会遇到各种报错问题。本文介绍一些常见的错问题及其解决方法。 报错问题1:ModuleNotFoundError: No module named ‘paddle’ 这个报错问题是由于没有安装百度飞浆Pa…

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