如何使用Python实现统计多个指定单词在网页中的出现次数
多单词网页统计代码调整方案
问题原因
你现有代码报错的核心原因如下:
- 原
count_words函数仅设计为接收单个单词参数,传入多个逗号分隔的参数时会触发参数数量不匹配的报错 - 你写的
word = ('movie')本质还是单个字符串,仅加括号不加逗号并不会生成元组,多单词元组的正确写法为words = ('movie', 'cinema', 'ticket')
调整后可支持任意数量单词统计的代码
以下实现既可以分别输出每个单词的出现次数,也可以统计所有指定单词的总出现次数:
import requests # 用*words可变参数接收任意数量的待统计单词 def count_words(url, *words): r = requests.get(url).text # 生成键为单词、值为对应出现次数的字典返回 return {word: r.count(word) for word in words} def main(): url = 'https://en.wikipedia.org/wiki/AMC_Theatres' # 可自行增减此处的单词数量,支持2、3、4个乃至更多单词统计 target_words = ('movie', 'cinema', 'ticket', 'theater') count_result = count_words(url, *target_words) total_count = 0 # 分别打印每个单词的统计结果 for word, cnt in count_result.items(): print(f'Url: {url}\ncontains {cnt} occurrences of word: {word}\n') total_count += cnt # 打印所有单词总出现次数 print(f'所有指定单词的总出现次数为:{total_count}') if __name__ == '__main__': main()
可选优化:精确匹配独立单词
现有
str.count()实现会区分大小写,且会匹配包含目标词的子串(比如统计movie时,movies里的movie片段也会被计入)。如果需要精确匹配不区分大小写的独立单词,可以改用正则实现,将count_words函数替换为以下版本:import re import requests def count_words(url, *words): r = requests.get(url).text count_dict = {} for word in words: # re.IGNORECASE代表不区分大小写,\b代表单词边界 count_dict[word] = len(re.findall(fr'\b{re.escape(word)}\b', r, flags=re.IGNORECASE)) return count_dict
内容的提问来源于stack exchange,提问作者CBx12
相关产品推荐
相关产品推荐

