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对应的页面内容。
问题排查与修复方案
你的代码存在三处核心问题,对应修复逻辑如下:
- 错误传入参数给BeautifulSoup:你直接把url地址字符串传给了BeautifulSoup,它只能解析HTML文本内容,无法自动发起请求拉取页面,需要先通过请求库获取页面HTML再传入解析。
- 属性获取方法用错:
get_attribute是Selenium库的元素方法,BeautifulSoup的标签对象获取属性直接用get('src')或者['src']即可。 - 定位逻辑冗余:不需要先定位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
相关产品推荐
相关产品推荐

