如何解决抓取Vogue网站Met Gala 2021红毯图片描述返回空结果的问题
问题原因
- 代码存在语法错误:第二次调用
find_elements_by_css_selector定位元素时,类选择器遗漏了前置.符号,无法匹配到对应类名的元素。 - 站点懒加载限制:该画廊采用懒加载逻辑,仅当前可视区域内的slide会加载完整文本内容,未触发展示的元素文本属性为空。
- 选择器精准度不足:目标描述文本实际存储在
.gallery-slide-caption__dek-container的子<p>标签中,直接定位父容器容易出现空文本问题。
修复方案
- 修正选择器语法,补充类选择器前置
. - 增加滑动触发懒加载逻辑,遍历所有slide触发内容加载
- 优化选择器直接定位子
<p>标签,提升抓取稳定性
修复后代码示例
import pprint from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC detail_looks = [] # 遍历所有slide触发懒加载 for look in list_looks: # 滚动到当前元素触发内容加载 driver.execute_script("arguments[0].scrollIntoView({block: 'center'});", look) try: # 等待文本元素加载完成再取值 title = WebDriverWait(look, 2).until( EC.presence_of_element_located((By.CSS_SELECTOR, ".gallery-slide-caption__dek-container p")) ).text.strip() except: title = "" detail_looks.append({"title": title}) pprint.pprint(detail_looks[:5])
优化建议
可直接提取页面预加载的全局JSON数据获取所有描述内容,无需遍历DOM,抓取效率和稳定性更高。
内容的提问来源于stack exchange,提问作者G.FRL
相关产品推荐
相关产品推荐

