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

如何让Python识别注册商标®符号?解决网页爬虫编码崩溃问题

解决Supreme爬取中注册商标符号导致的编码崩溃问题

看起来你在Python2环境下遇到了经典的Unicode编码问题——那些显示为“庐”的乱码其实是UTF-8编码的®符号被错误解码成GBK/GB2312编码导致的,而直接把Unicode字符串转成str(Python2中str是字节类型)时,默认用ASCII编码会抛出UnicodeEncodeError,直接导致程序崩溃。下面给你两种可行的解决思路:

方案1:正确处理编码,保留注册商标符号

既然你需要匹配商品名称,最好的方式是正确处理编码,避免信息丢失。在Python2中,BeautifulSoup返回的colour.text是Unicode字符串,直接转str会因为非ASCII字符报错,你可以这样做:

  • 将Unicode字符串编码为UTF-8字节字符串后再存入列表:
for colour in soup.find_all('a', attrs={"class":"name-link"}, href=True):
    # 把Unicode编码为UTF-8字节,避免ASCII编码错误
    CnI.append(colour.text.encode('utf-8'))
    Uhrefs.append(str(colour.get('href')))  # href一般是ASCII,转str没问题
  • 更推荐的做法是全程使用Unicode字符串(包括你的目标匹配字符串),避免编码转换:
    首先把你的目标商品名改成Unicode前缀:
Witem = u'2-Tone Nylon 6-Panel'
Wcolour = u'Black'

然后直接存储Unicode字符串到列表:

for colour in soup.find_all('a', attrs={"class":"name-link"}, href=True):
    CnI.append(colour.text)  # 保留Unicode,不转str
    Uhrefs.append(colour.get('href'))  # BeautifulSoup返回的href也是Unicode

这样后续匹配时不会出现编码不一致的问题。

方案2:移除特殊符号,避免编码问题

如果你的商品匹配逻辑不需要保留®符号,可以直接移除它(或所有非ASCII字符):

  • 精准移除注册商标符号(Unicode编码为\u00AE):
for colour in soup.find_all('a', attrs={"class":"name-link"}, href=True):
    # 移除®符号后再转str
    clean_text = colour.text.replace(u'\u00AE', '')
    CnI.append(str(clean_text))
    Uhrefs.append(str(colour.get('href')))
  • 用正则移除所有非ASCII字符(适合处理多种特殊符号的情况):
    先导入正则模块:
import re

然后修改循环:

for colour in soup.find_all('a', attrs={"class":"name-link"}, href=True):
    # 过滤所有非ASCII字符
    clean_text = re.sub(r'[^\x00-\x7F]+', '', colour.text)
    CnI.append(str(clean_text))
    Uhrefs.append(str(colour.get('href')))

另外提一句:你代码里的while Splitcounter<=len(CnI)逻辑看起来是假设CnI的元素是商品名和颜色交替的,但如果网站结构变化可能会出问题,建议用更可靠的方式解析商品和颜色的对应关系。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:45:00