You need to enable JavaScript to run this app. Python用BeautifulSoup提取深层嵌套HTML指定img的src失败求助
优惠活动
大模型
产品
解决方案
定价
更多

Python用BeautifulSoup提取深层嵌套HTML指定img的src失败求助

提取指定class属性的img标签src链接失败问题

我知道已有类似问题,但现有答案均无法解决我的问题。我需要提取class为ui mini avatar image的img标签的src链接,相关标签结构如下:
嵌套标签结构
我不想逐层遍历6层div标签定位该元素,但尝试的两种定位方式均失败,查找结果返回NoneType。我使用的代码如下:

urls = df.iloc[:,-1].values  
for url in urls:
  soup = BeautifulSoup(url, 'lxml')
  a_tag = soup.find('a', class_ ='left')
  img = a_tag.find('img', class_= 'ui mini avatar image')
  link = img.get_attribute('src')
  print(link)
  break

补充说明

我已将需要爬取的链接存储在csv文件中,使用Pandas读取,首条测试链接为https://www.zomato.com/review/kMZEvAx对应的页面内容。


问题排查与修复方案

你的代码存在三处核心问题,对应修复逻辑如下:

  1. 错误传入参数给BeautifulSoup:你直接把url地址字符串传给了BeautifulSoup,它只能解析HTML文本内容,无法自动发起请求拉取页面,需要先通过请求库获取页面HTML再传入解析。
  2. 属性获取方法用错:get_attribute是Selenium库的元素方法,BeautifulSoup的标签对象获取属性直接用get('src')或者['src']即可。
  3. 定位逻辑冗余:不需要先定位a标签再查找img,可通过CSS选择器一步定位目标元素,不需要逐层遍历div。

修复后的可运行代码如下:

import requests
import pandas as pd
from bs4 import BeautifulSoup

# 配置请求头模拟浏览器访问,避免反爬拦截
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
}

urls = df.iloc[:,-1].values  
for url in urls:
    # 先拉取页面HTML内容
    resp = requests.get(url, headers=headers)
    resp.encoding = 'utf-8'
    soup = BeautifulSoup(resp.text, 'lxml')
    # 直接用CSS选择器定位目标img
    target_img = soup.select_one('img.ui.mini.avatar.image')
    if target_img:
        img_link = target_img.get('src')
        print(img_link)
    else:
        print(f"当前页面未找到目标img元素")
    break

内容的提问来源于stack exchange,提问作者Jana.k

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 12:00:04