如何用Beautiful Soup提取网站特定文本制作日语汉字闪卡?
爬取日语汉字词汇制作闪卡问题
需求概述
我正在爬取网站制作日语闪卡,计划将内容整理为包含以下信息的文本文件:
- 目标汉字
- 3个包含该汉字的词汇示例
- 每个词汇对应的假名读音
- 每个词汇的英文释义
期望输出格式
kanji {词汇1},{假名},{英文释义} {词汇2},{假名},{英文释义} {词汇3},{假名},{英文释义}
示例
福 祝福,しゅくふ,blessing 幸福,こうふく,happiness; well-being; joy; welfare; blessedness 裕福,ゆうふく,wealthy; rich; affluent; well-off
当前问题
目前仅针对单个汉字做测试,后续会批量处理汉字列表,但不知道如何从目标网站提取指定区域的文本。我知道可以用BeautifulSoup,但不清楚具体代码写法,现有代码如下:
from requests_html import HTMLSession from bs4 import BeautifulSoup word1_list = [] word2_list = [] word3_list = [] kanji = '福' url = f'https://jpdb.io/search?q={kanji}+%23kanji&lang=english#a' session = HTMLSession() response = session.get(url) # // 不确定这里该写什么 soup = BeautifulSoup(response.html.html, 'html.parser') words = soup.select('div.jp') # // 不确定选择器是否正确 word1_list.append(words) # // 想把需要的数据放到这里
解决方案
步骤说明
- 分析页面结构:目标词汇项通常包含三个核心部分——汉字词汇、假名读音、英文释义,需要通过CSS选择器定位对应元素。
- 提取数据:遍历前3个词汇项,分别提取所需内容并整理成指定格式。
- 异常处理:添加简单的异常捕获,避免因页面结构变化或元素缺失导致程序崩溃。
修改后的代码
from requests_html import HTMLSession from bs4 import BeautifulSoup import time def get_kanji_vocab(kanji): url = f'https://jpdb.io/search?q={kanji}+%23kanji&lang=english#a' session = HTMLSession() # 添加请求头模拟浏览器,避免被拦截 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36' } response = session.get(url, headers=headers) soup = BeautifulSoup(response.html.html, 'html.parser') # 定位词汇项容器(需根据页面实际结构调整选择器) vocab_containers = soup.select('div.vocabulary-entry') result = [kanji] # 只取前3个有效词汇 for container in vocab_containers[:3]: try: # 提取汉字词汇 word = container.select_one('.jp-text').text.strip() # 提取假名读音 kana = container.select_one('.kana-text').text.strip() # 提取英文释义 english = container.select_one('.english-text').text.strip() result.append(f"{word},{kana},{english}") except AttributeError: # 元素缺失时跳过该词汇 continue return '\n'.join(result) # 测试单个汉字 if __name__ == '__main__': test_kanji = '福' print(get_kanji_vocab(test_kanji)) # 批量处理示例 # kanji_list = ['福', '山', '水'] # for kanji in kanji_list: # print(get_kanji_vocab(kanji)) # time.sleep(1)
关键注意点
- 选择器调整:实际使用时需打开目标网站开发者工具,确认词汇项、汉字、假名、释义对应的真实CSS类名或标签,替换代码中的选择器。
- 反爬策略:添加请求头、设置请求间隔,避免触发网站反爬机制。
- 数据校验:可添加额外逻辑校验提取数据的格式,确保输出质量。
内容的提问来源于stack exchange,提问作者Lucas Frykman
相关产品推荐
相关产品推荐

