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

Selenium爬取Instagram评论时format格式化xpath触发UnicodeEncodeError如何解决

错误成因

该错误结合硬编码序号可正常运行的特征,有两个核心触发原因:

  1. XPath字符串拼接冲突:你当前XPath中使用的"是HTML转义格式的双引号,直接写死字符串时Python可自动解析匹配,但通过format()动态拼接时,转义字符和编码规则匹配异常,触发编码报错。
  2. Windows环境编码限制:如果你的运行环境为Windows,系统默认终端编码为GBK(即错误提示中的charmap),当你爬取到的评论包含emoji、小语种字符等特殊Unicode内容时,打印或写入默认编码文件时就会触发报错,你测试的序号1的评论刚好没有特殊字符,所以运行正常。

修复方案

1. 优先修正XPath拼接逻辑

把XPath内的转义双引号替换为单引号,调整字符串拼接方式,避免转义冲突:

# 用f-string构造XPath,避免format和转义字符的冲突
xpath = f'//*[@id="react-root"]/section/main/div/div[1]/article/div[3]/div[1]/ul/ul[{i}]/div/li/div/div[1]/div[2]/span'
comment = browser.find_element_by_xpath(xpath).get_attribute('textContent')

如果你使用的是Selenium 4.0+版本,旧版定位方法已废弃,需要改为browser.find_element(By.XPATH, xpath),提前导入from selenium.webdriver.common.by import By即可。

2. 适配Windows编码限制

如果修正XPath后仍然报错,做以下两处调整即可:

  • 运行脚本前先在终端执行chcp 65001,将终端编码切换为UTF-8
  • 存储评论内容时,强制指定编码为UTF-8,示例:
# 写入文件时指定utf-8编码,避免特殊字符编码失败
with open('instagram_comments.csv', 'a', encoding='utf-8') as f:
    f.write(comment + '\n')
  • 如果是打印内容时报错,可以增加容错处理:
print(comment.encode('utf-8', errors='ignore').decode('utf-8'))

3. 优化批量获取逻辑(可选)

不需要逐次构造序号XPath,可以一次性获取所有评论节点再遍历,稳定性更高:

# 一次性匹配所有评论节点
comment_nodes = browser.find_elements_by_xpath('//*[@id="react-root"]/section/main/div/div[1]/article/div[3]/div[1]/ul/ul/div/li/div/div[1]/div[2]/span')
for node in comment_nodes:
    comment = node.get_attribute('textContent')
    # 后续处理逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 13:18:04