我想计算一个特定网站中单词列表的频率。但是,该代码并没有返回手动“controlf”命令将返回的确切字数。我做错什么了?
这是我的密码:
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)
2条答案
按热度按时间c8ib6hqw1#
当我在“温柔”这个词上尝试你的代码时,
a=requests.get(url).text.count(word)
返回的结果比ctrl+f多得多,这很奇怪,因为我希望返回的结果更少(text.count区分大小写,html有时会将元素分成多行等等)。但是通过打印变量“a”并遍历它,您会注意到页面中没有显示元素,而且标签之间有很多“tender”。我建议你使用beautifulsoup或者找到一些方法来避免看不见的文字。顺便说一下,小东西,你可以把
requests.get(url).text
作为循环外的变量,这样就不必在每次迭代时都发送请求。h79rfbju2#
请参阅问题中的注解,了解为什么要使用
requests
在网页的“可见光谱”中计算单词的频率(你在浏览器中实际看到的频率)可能是个坏主意。如果你想和我一起
selenium
,您可以尝试:给我的结果和
CTRL + F
做。你可以测试一下
BeautifulSoup
通过稍微修改代码(顺便说一下,您正在导入):这给了我同样的结果,除了这个词
tender
,根据BeautifulSoup
出现12次,而不是11次。自己测试一下,看看什么适合你。