如何使用Selenium和Python有序输出加密货币名称及对应价格
问题原因及修复方案
- 核心错误是你使用了
set类型存储币种名称:Python中set是无序不重复集合,元素的存储顺序和插入顺序没有关联,后续你用zip()配对名称和价格时,自然会出现顺序错乱、匹配错误的问题 - 遍历名称、价格时的嵌套内层循环属于冗余代码,会导致控制台重复打印内容,不会影响最终匹配结果但会干扰调试
- 你当前用的类名
iworPT、cLgOOr是CoinMarketCap前端框架动态生成的哈希类名,随时可能失效,建议后续更换更稳定的定位方式
修正后可运行代码
from selenium import webdriver driver = webdriver.Chrome(executable_path="chromedriver.exe") driver.get("https://coinmarketcap.com/") driver.implicitly_wait(10) # 将set替换为list,保证存储顺序和页面展示顺序一致 coins = [] coin_names = driver.find_elements_by_class_name('iworPT') print(coin_names) for names in coin_names: coins.append(names.text) # 移除冗余的内层打印循环 for coins_val in coins: print(coins_val) # 币种价格 coinsprice = [] get_coin_price = driver.find_elements_by_class_name('cLgOOr') for price in get_coin_price: coinsprice.append(price.text) # 移除冗余的内层打印循环 for price_val in coinsprice: print(price_val) with open('coins.txt', 'w', encoding='utf-8') as f: # 两个列表顺序和页面完全一致,zip配对不会出错 for coins_name, prices in zip(coins,coinsprice): f.write(coins_name + ": " + prices + "\n") driver.close()
优化建议
- 建议按单条加密货币条目遍历:先定位到每条币种的父元素,再从父元素下提取名称和价格,彻底避免两者顺序不匹配的问题,同时可以规避动态类名变更的影响
- 可以添加异常捕获逻辑,避免部分元素加载失败导致整个脚本崩溃
- Selenium 4以上版本已经弃用
executable_path写法,建议使用Service对象指定驱动路径
内容的提问来源于stack exchange,提问作者Kirito-Kun
相关产品推荐
相关产品推荐

