Python3使用BeautifulSoup抓取网页时如何正确配对中英双语例句
解决方法
核心逻辑是利用页面的DOM结构特性:该站点的每条双语例句组固定为class=e的英文行在前,紧邻的下一个同级tr节点就是对应的class=c中文行,不需要分开抓取两类元素再按索引配对,从根源避免错位问题。
完整实现代码
from urllib.request import Request, urlopen from bs4 import BeautifulSoup def parseDictWeb(): print("parse....") url = "http://www.jukuu.com/search.php?q=apple" req = Request(url, headers={'User-Agent': 'Mozilla/5.0'}) html_page = urlopen(req).read() soup = BeautifulSoup(html_page, 'html.parser') # 只抓取所有英文行作为遍历基准 eng_trs = soup.find_all("tr", {"class": "e"}) lst = [] for eng_tr in eng_trs: # 提取英文内容,strip去掉多余空白 eng_text = eng_tr.get_text(strip=True) # 找当前英文行的下一个相邻tr节点 next_tr = eng_tr.find_next_sibling("tr") # 判断下一个tr是否为对应的中文行 zh_text = "" if next_tr and next_tr.get("class") == ["c"]: zh_text = next_tr.get_text(strip=True) # 加入结果列表 lst.append({"e": eng_text, "c": zh_text}) return lst # 测试 if __name__ == "__main__": res = parseDictWeb() print(res)
方案优势
- 就算出现某个英文例句没有对应中文的情况,也只会把该条的c字段置为空,不会影响后续所有配对的准确性,完全避免错位问题
- 只需要一次遍历,执行效率更高
内容的提问来源于stack exchange,提问作者Dolphin
相关产品推荐
相关产品推荐

