Python无法提取img标签src属性,求Nike商品图片URL提取方案
提取Nike女鞋页面商品图片URL的解决方案
原代码存在的问题
conte = soup.find_all(...)返回的是元素列表,直接调用.find()会报错,必须遍历每个商品卡片- Nike商品图片采用懒加载,真实URL通常存在
data-src属性而非src - 未将提取到的URL存入列表,仅打印无法保存有效结果
- 固定
time.sleep()不够可靠,滚动加载的判断逻辑存在漏洞
修正后的代码
import time from selenium import webdriver from bs4 import BeautifulSoup driver = webdriver.Chrome('D:/chromedrive/chromedriver.exe') wshoes_images = [] # 用于存储图片URL的列表 url = "https://www.nike.com/gb/w/womens-lifestyle-shoes-13jrmz5e1x6zy7ok" driver.get(url) SCROLL_PAUSE_TIME = 2 last_height = driver.execute_script("return document.documentElement.scrollHeight") while True: # 滚动到页面底部 driver.execute_script("window.scrollTo(0, document.documentElement.scrollHeight);") time.sleep(SCROLL_PAUSE_TIME) # 获取新的滚动高度 new_height = driver.execute_script("return document.documentElement.scrollHeight") # 解析当前页面的商品卡片 page_source = driver.page_source soup = BeautifulSoup(page_source, 'html.parser') product_cards = soup.find_all('div', class_='product-card__body') # 遍历每个商品卡片提取图片URL for card in product_cards: img_element = card.find('img', class_='product-card__hero-image css-1fxh5tw') # 优先取懒加载的真实地址data-src,无则取src img_url = img_element.get('data-src') or img_element.get('src') # 去重后存入列表 if img_url and img_url not in wshoes_images: wshoes_images.append(img_url) print(img_url) # 判断是否已滚动到底部,终止循环 if new_height == last_height: print("已加载所有商品,停止滚动") break last_height = new_height # 输出所有提取到的图片URL print("\n全部商品图片URL:") for url in wshoes_images: print(url) # 关闭浏览器释放资源 driver.quit()
关键修改说明
- 遍历商品卡片:对
soup.find_all()返回的列表逐个处理,确保每个商品的图片都被提取 - 适配懒加载:优先获取
data-src属性,这是Nike页面懒加载图片的真实地址 - 去重存储:用列表存储URL并做去重,避免重复抓取同一图片
- 优化滚动逻辑:每次滚动后立即解析页面,确保加载出的商品都被处理
- 资源释放:最后调用
driver.quit()关闭浏览器,避免残留进程
内容的提问来源于stack exchange,提问作者Muhammad Umer
相关产品推荐
相关产品推荐

