You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python爬取网页文本后如何实现词数统计?

解决网页文本词数统计问题

问题分析

你的代码存在两个核心问题:

  1. 变量接收错误:get_text函数返回的是(标题, 正文文本)的元组,但你直接把整个元组赋值给了text变量,导致后续统计时处理的是元组而非纯文本。
  2. 词数统计逻辑缺失:仅用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 03:10:56