You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Beautiful Soup提取无扩展名图片的data-src及补全链接的方法

问题解答

1. 提取img标签的data-src属性值

你已经定位到了class为img-container的div节点,只需在该节点下继续查找img子节点,直接访问对应属性即可,示例代码片段如下:

# 从当前图书条目下定位img容器,不要用全局soup查找避免重复匹配
img_container = item.find('div', class_='img-container')
# 查找容器内的img标签
img_tag = img_container.find('img', class_='lazy')
# 提取data-src属性,get方法在属性不存在时不会抛出异常
data_src = img_tag.get('data-src')

注意:你原有代码中循环内用soup.find_all查找全局的img容器,会重复匹配所有图书的封面,建议改为从当前遍历的item下查找,仅匹配当前图书的封面节点。

2. 拼接生成完整可访问图片链接

你目标站点的/en/helper/ReadImage/接口默认返回JPG格式资源,直接拼接站点前缀和.jpg后缀即可正常访问。如果需要适配不确定扩展名的通用场景,可以请求一次资源从响应头中提取格式,当前场景直接拼接即可:

# 用rstrip去掉baseurl末尾多余的斜杠,避免拼接出现双斜杠
full_img_url = baseurl.rstrip('/') + data_src + '.jpg'

修正后的完整可运行代码

from bs4 import BeautifulSoup
import requests

baseurl = "https://www.nb.co.za/"
productlinks = []
cover_links = []

r = requests.get('https://www.nb.co.za/en/books/0-6-years')
soup = BeautifulSoup(r.content, 'lxml')
productlist = soup.find_all('div', class_="book-slider-frame")

def my_filter(tag):
    return (tag.name == 'a' and
        tag.parent.name == 'div' and
        'img-container' in tag.parent['class'])

for item in productlist:
    # 提取商品详情页链接
    for link in item.find_all(my_filter, href=True):
        productlinks.append(baseurl + link['href'])
    # 提取封面图完整链接
    img_tag = item.find('div', class_="img-container").find('img', class_='lazy')
    data_src = img_tag.get('data-src')
    full_cover = baseurl.rstrip('/') + data_src + '.jpg'
    cover_links.append(full_cover)
    print(full_cover)

内容的提问来源于stack exchange,提问作者Schalk Joubert

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 18:36:05