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创建数字列表的示例

    下面是关于Python创建数字列表的示例的详细攻略,包含两个示例说明。 创建数字列表的方法 在Python中,我们可以使用range()函数创建数字列表。range()函数的语法如: range(start, stop, step) 其中,start表示起始数字,stop表示终止数字(不包含),step表示步长。 下面是示例: # 创建数字列表 my_lis…

    python 2023年5月13日
    00
  • Python实现求解括号匹配问题的方法

    以下是Python实现求解括号匹配问题的方法的详细攻略。 什么是括号匹配问题? 括号匹配问题指的是在一个字符串中判断括号的开闭是否匹配,即要求每一个左括号都能够找到与之对应的右括号,反之亦然。例如,对于字符串 “([]){}”,括号的开闭匹配是正确的,而对于字符串 “([)]”,括号的开闭匹配是不正确的。 解决括号匹配问题的思路 括号匹配问题可以使用栈来解决…

    python 2023年6月3日
    00
  • Python3.5内置模块之shelve模块、xml模块、configparser模块、hashlib、hmac模块用法分析

    下面就来详细讲解一下Python3.5内置模块之shelve模块、xml模块、configparser模块、hashlib、hmac模块的用法: shelve模块 shelve模块是一个简易的对象持久化存储模块,用于将Python对象持久化到磁盘上,读取时可以直接还原成对象。shelve模块的主要接口是open()函数。 用法示例 import shelve…

    python 2023年6月2日
    00
  • Python实现自动发送邮件功能

    下面是Python实现自动发送邮件功能的完整攻略。 简介 Python可以通过SMTP协议实现邮件的发送。SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,是一种用于邮件发送的标准协议。 实现步骤 导入相关模块:需要导入smtplib、email模块,其中smtplib用于建立SMTP连接并发送邮件,email模块用于…

    python 2023年5月19日
    00
  • 在Python 不同级目录之间模块的调用方法

    在Python中,不同级目录之间的模块调用需要使用模块导入和路径查找机制,来保证程序的正确性和可读性。 以下是实现不同级目录之间模块调用的攻略: 1. 添加模块信息 在Python程序中,我们可以使用import命令导入模块,例如导入名为testmodule的模块: import testmodule 但是如果testmodule在不同的目录下,则需要在Py…

    python 2023年6月3日
    00
  • python爬虫:抓取新浪新闻内容(从当前时间到之前某个时间段),并用jieba分词,用于训练自己的分词模型

    新浪新闻内容采用的是ajax动态显示内容,通过抓包,发现如下规律: 每次请求下一页,js那一栏都会出现新的url: “http://api.roll.news.sina.com.cn/zt_list?channel=news&cat_1=gnxw&cat_2==gdxw1” “||=gatxw||=zs-pl||=mtjj&level…

    爬虫 2023年4月12日
    00
  • python本地降级pip的方法步骤

    下面我会详细讲解“Python本地降级pip的方法步骤”的攻略。具体步骤如下: 1. 确定pip当前版本 使用以下命令可以查看当前pip的版本: pip –version 2. 下载旧版pip 可以在pip官网的历史版本下载页面下载旧版pip的安装包。也可以使用以下命令下载指定版本的pip: pip download pip==<version&gt…

    python 2023年5月14日
    00
  • 手把手教你Android全局触摸事件监听

    手把手教你Android全局触摸事件监听 在Android开发中,对于某些需要全局响应的触摸事件,我们需要对整个Activity设置触摸事件监听器。本文将手把手地教你如何在Android中实现全局触摸事件的监听。 实现原理 在Android中,我们可以通过在Activity中重写onTouchEvent()方法来监听触摸事件。onTouchEvent()方法…

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