如何统计网页Meta关键词在文章文本中的出现次数
问题分析
你当前的代码里,meta_keywords列表实际上只包含一个元素——那串逗号分隔的完整关键词字符串,而非拆分后的单个关键词。循环时会把整个长串当作一个关键词去统计,自然在文本里找不到匹配,计数为0。另外,你用来统计的text是从网页摘要(doc.summary())提取的,范围太小,大概率没包含目标关键词,这也是计数为0的原因之一。
解决步骤
- 拆分逗号分隔的关键词:把提取到的meta关键词字符串按逗号拆分,同时清理掉关键词前后的空格,得到单个关键词的列表。
- 使用完整网页正文统计:直接从原始网页HTML中提取正文文本,避免用摘要导致的内容缺失。
修改后的完整代码
import requests from bs4 import BeautifulSoup res = requests.get( 'https://www.wpbeginner.com/showcase/24-must-have-wordpress-plugins-for-business-websites/', headers={"User-Agent": "Mozilla/5.0 (X11; CrOS x86_64 12871.102.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.141 Safari/537.36"} ) # 提取完整网页正文(替代原来的摘要) soup = BeautifulSoup(res.text, 'html5lib') # 定位文章内容容器,避免统计导航、侧边栏等无关内容 content_div = soup.find('div', class_='entry-content') text = content_div.get_text() if content_div else soup.get_text() # 提取并拆分meta关键词 meta_keywords = [] for item in soup.select('[name=Keywords][content], [name=keywords][content]'): # 按逗号拆分关键词 keyword_list = item['content'].split(',') # 清理每个关键词的前后空格,过滤空字符串 cleaned_keywords = [kw.strip() for kw in keyword_list if kw.strip()] meta_keywords.extend(cleaned_keywords) # 统计每个关键词的出现次数 for keyword in meta_keywords: count = text.count(keyword) print(f"{keyword}: {count}")
说明
- 拆分关键词时用
split(',')把长字符串拆成单个关键词,再用strip()去掉每个关键词前后的空格,同时过滤掉可能的空字符串(比如逗号连续的情况)。 - 提取正文时直接定位文章的内容容器(
entry-content类的div),这样统计的是真正的文章内容,避免无关文本干扰。如果找不到这个容器,就退而求其次用整个网页的文本。 - 修改后每个关键词会被单独统计,计数结果会更准确。
内容的提问来源于stack exchange,提问作者roy
相关产品推荐
相关产品推荐

