Python3 用15行代码实现贴吧图片下载的2种方法

本文介绍使用Python通过两种不同方法爬取并下载百度贴吧图片的过程。第一种方法利用正则表达式匹配图片URL,第二种方法采用BeautifulSoup解析网页结构。这两种方法均可实现对指定贴吧页面上所有图片的有效抓取。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

都知道Python的语法很简单易上手,Python 也很适合拿来做爬虫等等,今天在这里就简单地用2种方法爬取下载贴吧图片。

环境:

  • python 3.6
  • 标准库
    • urllib 的 request 模块
    • re 模块
  • 第三方库
    • beautifulsoup4

第一种方法:

使用 re 正则表达式获得图片 url 使用 request 下载图片
这里我们导入了两个模块,分别是 urllib 的 request 模块 和 re 模块。
urllib 是用来进行 url 网络请求的,re 是一个正则表达式匹配的库。这里我们要先对网站进行模拟请求,然后找到网站中的图片进行下载。
# -*- coding: utf-8 -*-

# 导入 urllib 的 request 模块
from urllib import request
# 导入 re 模块
import re
# 网页地址,想下那个吧的图片,直接粘过来
url_one = "https://tieba.baidu.com/p/4452821383"
# 打开网页,这里需要对网页进行解码
html_one = request.urlopen(url_one).read().decode("utf-8")
#定义一个下载图片的函数
def get_img_re(info):   # info 参数是传解码后的网页
    '''get image use re'''
    # regex 是匹配图片 url 的正则表达式
    regex = r'<img class="BDE_Image" src="(.+?\.jpg)"'
    rege = re.compile(regex)      # 对regex进行编译
    img_list = re.findall(rege,info)    # 获取网页内图片的 url 列表
    for img_url in img_list:    # 循环列表得到图片的 url
        img_name = img_url.rsplit('/')[-1]   # 获得图片名称
        print(img_name)
        request.urlretrieve(img_url,img_name)    # 保存图片
    return len(img_list)     # 返回图片数量

img_count_one = get_img_re(html_one)    # 得到图片数量

print("图片下载完成!!!\n共计 %d 张图片!!!" % img_count_one)

第二种方法:

使用 beautifulsoup 获得图片 url 使用 request 下载图片
这里我们导入了两个模块,分别是 urllib 的 request 模块 和 bs4 的 BeautifulSoup 模块。
# -*- coding: utf-8 -*-

# 导入 urllib 的 request 模块
from urllib import request
# 导入 bs4 的 BeautifulSoup 模块
from bs4 import BeautifulSoup
# 网页地址,想下那个吧的图片,直接粘过来
url_two = "https://tieba.baidu.com/p/4619916043"
# 打开网页,这里不需要对网页进行解码
html_two = request.urlopen(url_two)
#定义一个下载图片的函数
def get_img_bs4(info):     # info 参数是传打开后的网页
    '''get image use bs4'''
    soup = BeautifulSoup(info,"html5lib")    # 这里 BeautifulSoup 会对网页进行解码,html5lib 是以 html5 格式进行解码
    img_list = soup.find_all("img",class_="BDE_Image")    # 获取网页内图片的 img标签 列表
    for img in img_list:   # 循环列表得到一个 img标签
        img_url = img["src"]   # 从 img标签 中提取 图片url
        img_name = img_url.rsplit('/')[-1]   # 获得图片名称
        print(img_name)
        request.urlretrieve(img_url,img_name)   # 保存图片
    return len(img_list)   # 返回图片数量

img_count_two = get_img_bs4(html_two)   # 得到图片数量

print("图片下载完成!!!\n共计 %d 张图片!!!" % img_count_two)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值