Python 爬取 Bing 词典时遇到音标乱码问题如何解决?

用 HTMLParser 解析页面代码,其它部分都没问题,但是个别音标会出错。
比如 abdication, 音标为: "美 [ˌæbdɪ’keɪʃ(ə)n] “,会被解析成"美[ˌbdɪ’ke�”, 查看页面编码是 utf-8 没问题,音标行代码为:
<div class=“hd_prUS”>美&nbsp;[ˌæbdɪ’keɪʃ(ə)n] </div>。

Python 版本 2.7, 请问我是哪里出了问题?
Python 爬取 Bing 词典时遇到音标乱码问题如何解决?

5 回复

遇到音标乱码,通常是编码问题。Bing词典的音标用了特殊符号,网页编码是UTF-8,但有些音标字符在控制台或某些环境下显示不正常。

直接上代码,用requestsBeautifulSoup,关键是要正确解析和打印:

import requests
from bs4 import BeautifulSoup
import re

def get_bing_phonetic(word):
    url = f"https://www.bing.com/dict/search?q={word}"
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
    }
    
    try:
        resp = requests.get(url, headers=headers, timeout=5)
        resp.encoding = 'utf-8'  # 关键:强制设为UTF-8
        soup = BeautifulSoup(resp.text, 'html.parser')
        
        # 找音标,Bing词典的音标在类名为"hd_p1_1"的div里
        phonetic_div = soup.find('div', class_='hd_p1_1')
        if phonetic_div:
            # 提取美式音标,通常包含在方括号内
            phonetic_text = phonetic_div.get_text()
            # 用正则提取音标部分
            phonetic_match = re.search(r'\[.*?\]', phonetic_text)
            if phonetic_match:
                phonetic = phonetic_match.group()
                return phonetic
        return "音标未找到"
    except Exception as e:
        return f"请求出错: {e}"

# 测试
if __name__ == "__main__":
    word = "hello"
    phonetic = get_bing_phonetic(word)
    print(f"{word} 的音标是: {phonetic}")

如果还乱码,试试在IDE或编辑器里把输出编码也设为UTF-8,或者直接写文件:

with open('phonetic.txt', 'w', encoding='utf-8') as f:
    f.write(phonetic)

总结:设对编码UTF-8就行。


<div class=“hd_prUS”>美&#160;[ˌ&#230;bdɪ’keɪʃ(ə)n] </div>
直接看页面源码,这个 div 的内容是这样的,部分字符被转义了。
看看是不是这个原因导致的编码问题。
记得 HTMLParser 有专门的处理方法。
好像是这个 https://docs.python.org/2/library/htmlparser.html#HTMLParser.HTMLParser.handle_charref
你看下。

以及,貌似页面 head 的 meta 里也有同样信息,还好解一些,可以试试拿到。
我用 BeautifulSoup 直接解析的,没问题(解析器用的 lxml )

requests 爬的?这玩意坑

这种音标需要字体支持吧?

几倍–>几位

回到顶部