首页 > 解决方案 > 使用 Python 计算网站中词频的代码未输出正确的频率

问题描述

我想计算特定网站中单词列表的频率。但是,该代码不会返回手动“控制 F”命令所返回的确切字数。我究竟做错了什么?

这是我的代码:

import pandas as pd
from bs4 import BeautifulSoup
import requests
from selenium import webdriver
import re

url='https://www.gov.uk/government/publications/specialist-quality-mark-tender-2016'
fr=[] 
wanted = ['tender','2020','date']    
for word in wanted:
    a=requests.get(url).text.count(word)
    dic={'phrase':word,
          'frequency':a,              
            }          
    fr.append(dic)  
    print('Frequency of',word, 'is:',a)
data=pd.DataFrame(fr)    

标签: pythonbeautifulsouppython-requestsscreen-scrapingword

解决方案


当我在“Tender”这个词上尝试你的代码时,a=requests.get(url).text.count(word)返回的结果比 ctrl + F 多得多,这很奇怪,因为我希望返回更少( text.count 区分大小写,HTML 有时会将元素分成多行等等)。但是通过打印变量“a”并浏览它,您会注意到页面上没有显示的元素,并且标签之间还有很多“Tender”。我建议您使用 BeautifulSoup 或找到一些方法来避免通过不可见的文本。

顺便说一句,小事,你可以把 'requests.get(url).text作为一个变量放在循环之外,这样你就不必在每次迭代时都发送请求。


推荐阅读