Python爬取网页文本后如何实现词数统计?
解决网页文本词数统计问题
问题分析
你的代码存在两个核心问题:
- 变量接收错误:
get_text函数返回的是(标题, 正文文本)的元组,但你直接把整个元组赋值给了text变量,导致后续统计时处理的是元组而非纯文本。 - 词数统计逻辑缺失:仅用
len(str(text))只能统计字符长度,没有实现按单词分割统计的逻辑。
修正后的完整代码
import requests from bs4 import BeautifulSoup from urllib.request import urlopen import re def get_text(url): page = urlopen(url) soup = BeautifulSoup(page, "lxml") # 提取所有p标签文本并去除首尾空白 text = ' '.join(map(lambda p: p.text.strip(), soup.find_all('p'))) # 合并多余空格和换行,统一文本格式 text = re.sub(r'\s+', ' ', text) return soup.title.text, text # 获取目标URL url = input('Enter URL - ') # 正确接收标题和正文两个返回值 title, page_text = get_text(url) # 统计字符长度 char_length = len(page_text) # 统计词数:分割后过滤空字符串,避免无效计数 word_count = len([word for word in page_text.split() if word.strip()]) # 输出结果 print(f'网页标题: {title}') print(f'文本字符长度 - {char_length}') print(f'文本词数 - {word_count}')
关键改进点
- 修正变量接收:用
title, page_text = get_text(url)分别接收标题和正文,避免元组混淆统计对象。 - 文本预处理:通过
strip()和正则替换清理冗余空白,确保文本格式整洁,减少统计误差。 - 灵活词数统计:基础版本按空格分割并过滤空元素,若需要排除标点干扰,可改用正则匹配纯单词:
# 仅统计由字母数字组成的单词(自动忽略标点) word_count = len(re.findall(r'\b\w+\b', page_text))
词数差异说明
若统计结果和摘要词数有出入,通常是因为:
- 摘要仅提取核心段落,而你的代码覆盖了所有p标签文本,范围更广。
- 不同场景对“单词”的定义不同:比如是否包含带标点的词(如
AI.),可根据需求调整统计逻辑。
内容的提问来源于stack exchange,提问作者Param Dhingana
相关产品推荐
相关产品推荐

