这是我遇到的一个Python面试题,因为正则表达式用的不熟悉,所以直接没参加。最后心里过意不去,就试着写了写:
问题如下:
请完成一个程序,并能按步骤实现以下功能:
1. 下载https://en.wikipedia.org/wiki/Machine_translation 页面的内容并保存为mt.html
需要编写代码来下载页面。
2. 统计mt.html中<p>标签内下所有单词以及数目并存储到mt_word.txt中。
mt_word.txt有如下几点要求:
a) 每个单词一行。单词在前,单词出现的次数在后,中间用Tab(\t)进行分隔。
b) 单词要按照单词数目从多到少的顺序进行排列。比如说单词a出现了100次,单词b出现了10次,则单词a要在单词b的前面。
最后实现代码如下:
from bs4 import BeautifulSoup import re soup = BeautifulSoup(open('mt.html','r', encoding='UTF-8'),'html.parser') str1="" for k in soup.find_all('p'): str1 += re.sub(r'(<.*?\w>|\(|\)|\"|\,|\.|\;|\/|\d|\$|\%|\'|\<|\-|\>|\–)', '', str(k)) maps ={} for v in re.sub(r"\s+","|",str1).split("|"): if v in maps: maps[v] += 1 else: maps[v] = 1 lis = sorted(maps.items(), key = lambda asd:asd[1],reverse=True) print(lis) for i in lis: with open("mt_words.txt", "a+", -1, "utf-8") as f: f.write(i[0] + '\t' + str(i[1]) + "\n")写的不是很好,有改进的空间,仅供参考