You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

新手求助:使用Selenium爬取MorphMarket无法提取指定信息

问题

本人是Selenium新手,尝试爬取https://www.morphmarket.com/all/c/reptiles/pythons/ball-pythons页面的球蟒相关信息,目前仅能提取部分内容,但不清楚如何提取性别、公司、位置以及会员信息。以下是我的代码:

import time
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()

driver.get("https://www.morphmarket.com/all/c/reptiles/pythons/ball-pythons")
time.sleep(5)

snakes = driver.find_elements(By.CSS_SELECTOR,"a.animalCard--avL0R")

link = snakes[0].get_attribute("href")
driver.get(snakes[0].get_attribute("href"))
time.sleep(5)
genes= driver.find_element(By.CSS_SELECTOR, "h1.animalTitle--cH6qE")
print(genes.text)
snake=driver.find_element(By.CSS_SELECTOR,"h2.animalSubTitle--mhYId")
print(snake.text)
price = driver.find_element(By.CSS_SELECTOR, "h1.salePrice--qNIIs")
print(price.text)
#sex = driver.find_element(By.TAG_NAME, "span")
Birth = driver.find_elements(By.CSS_SELECTOR,"div.labelValueContainer--z1CP3")
print(Birth[1].text)
print(Birth[3].text)
print(Birth[4].text)
print(Birth[5].text)
print(Birth[6].text)
print(Birth[7].text)
print(Birth[8].text)
print(Birth[9].text)
print(Birth[10].text)
print(Birth[11].text)

Company= driver.find_element(By.CSS_SELECTOR, "h4.title--qLioF")
print(Company.text)

Location=driver.find_element(By.CSS_SELECTOR,"p.location--TtVtP")
print(Location.text)
membership= driver.find_element(By.CSS_SELECTOR, "span")
解决方案

1. 提取性别

性别信息存放在labelValueContainer容器组中,可通过XPath定位包含"Sex"文本的容器,直接获取对应值:

sex = driver.find_element(By.XPATH, "//div[contains(text(), 'Sex')]/following-sibling::div")
print("性别:", sex.text)

2. 提取公司名称

原选择器可能匹配到非目标元素,需限定在卖家信息区域内,使用更精确的CSS选择器:

company = driver.find_element(By.CSS_SELECTOR, "div.sellerInfoContainer h4.title--qLioF")
print("公司:", company.text)

3. 提取位置信息

同样限定在卖家信息区域,确保定位到正确的位置元素:

location = driver.find_element(By.CSS_SELECTOR, "div.sellerInfoContainer p.location--TtVtP")
print("位置:", location.text)

4. 提取会员信息

会员标识带有特定class(如membershipBadge),可通过CSS选择器直接定位;若class动态变化,也可用XPath模糊匹配:

# 方式1:精确class定位
membership = driver.find_element(By.CSS_SELECTOR, "span.membershipBadge")
# 方式2:模糊匹配class
membership = driver.find_element(By.XPATH, "//span[contains(@class, 'membershipBadge')]")
print("会员信息:", membership.text)

优化后完整代码

建议用显式等待替代time.sleep,提升爬取稳定性:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
wait = WebDriverWait(driver, 10)

# 进入列表页并等待卡片加载
driver.get("https://www.morphmarket.com/all/c/reptiles/pythons/ball-pythons")
snakes = wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, "a.animalCard--avL0R")))
# 进入第一个球蟒详情页
driver.get(snakes[0].get_attribute("href"))

# 提取基础信息
genes = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "h1.animalTitle--cH6qE")))
print("基因:", genes.text)
snake_subtitle = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "h2.animalSubTitle--mhYId")))
print("副标题:", snake_subtitle.text)
price = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "h1.salePrice--qNIIs")))
print("价格:", price.text)

# 提取性别
sex = wait.until(EC.visibility_of_element_located((By.XPATH, "//div[contains(text(), 'Sex')]/following-sibling::div")))
print("性别:", sex.text)

# 提取卖家相关信息
seller_container = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div.sellerInfoContainer")))
company = seller_container.find_element(By.CSS_SELECTOR, "h4.title--qLioF")
print("公司:", company.text)
location = seller_container.find_element(By.CSS_SELECTOR, "p.location--TtVtP")
print("位置:", location.text)
membership = seller_container.find_element(By.CSS_SELECTOR, "span.membershipBadge")
print("会员等级:", membership.text)

driver.quit()

注意事项

  • 页面class可能随网站更新动态变化,若定位失败,需重新检查元素结构并调整定位表达式。
  • 频繁爬取可能触发反爬机制,建议添加合理的请求间隔,避免短时间内大量访问。

内容的提问来源于stack exchange,提问作者user22428402

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 21:37:35