Python使用BeautifulSoup提取目标元素每行颜色数据的技术求助
解决方法
- 你之前用
soup.find()拿到的是颜色容器,但直接遍历这个容器的子节点会包含很多空白文本节点,根本不是有效颜色项,所以才拿不到数据。得精准遍历容器里的每个颜色选项——页面里每个颜色块都是带color-swatch类的<a>标签,这才是你要找的对象。 - 另外,页面里的颜色名称根本不是在
<title>标签里(那是网页标题标签,跟颜色没关系),而是存在<a>标签的title属性,或者里面<img>的alt属性里。
修正后的代码示例:
import requests from bs4 import BeautifulSoup url = "https://www.hoka.com/en/us/mens-everyday-running-shoes/rincon-3/1119395.html" # 记得加请求头,不然网站容易拦截你的请求 headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"} response = requests.get(url, headers=headers) soup = BeautifulSoup(response.text, 'html.parser') # 找到颜色容器 color_container = soup.find('div', class_="color-swatch-row type-swatch-image") if color_container: # 遍历每个颜色选项的a标签 for color_item in color_container.find_all('a', class_='color-swatch'): # 从title属性拿颜色名 color_name = color_item.get('title') # 也可以从img的alt属性拿,效果一样 # color_name = color_item.find('img').get('alt') if color_name: print(color_name.strip()) else: print("没找到颜色容器,检查页面结构是否变化")
要点提醒
- 一定要加
User-Agent请求头,不然Hoka的网站大概率会把你当成爬虫,返回空页面或者错误内容。 - 别再找
<title>标签了,页面里的颜色信息都存在元素的属性里,用.get('属性名')来获取。 - 用
find_all()定位具体的颜色项,而不是直接遍历容器子节点,避免拿到一堆没用的空白节点。
内容的提问来源于stack exchange,提问作者hanna
相关产品推荐
相关产品推荐

