使用python计算网站词频的代码没有输出正确的频率

jhkqcmku  于 2021-07-13  发布在  Java
关注(0)|答案(2)|浏览(499)

我想计算一个特定网站中单词列表的频率。但是,该代码并没有返回手动“controlf”命令将返回的确切字数。我做错什么了?
这是我的密码:

  1. import pandas as pd
  2. from bs4 import BeautifulSoup
  3. import requests
  4. from selenium import webdriver
  5. import re
  6. url='https://www.gov.uk/government/publications/specialist-quality-mark-tender-2016'
  7. fr=[]
  8. wanted = ['tender','2020','date']
  9. for word in wanted:
  10. a=requests.get(url).text.count(word)
  11. dic={'phrase':word,
  12. 'frequency':a,
  13. }
  14. fr.append(dic)
  15. print('Frequency of',word, 'is:',a)
  16. data=pd.DataFrame(fr)
c8ib6hqw

c8ib6hqw1#

当我在“温柔”这个词上尝试你的代码时, a=requests.get(url).text.count(word) 返回的结果比ctrl+f多得多,这很奇怪,因为我希望返回的结果更少(text.count区分大小写,html有时会将元素分成多行等等)。但是通过打印变量“a”并遍历它,您会注意到页面中没有显示元素,而且标签之间有很多“tender”。我建议你使用beautifulsoup或者找到一些方法来避免看不见的文字。
顺便说一下,小东西,你可以把 requests.get(url).text 作为循环外的变量,这样就不必在每次迭代时都发送请求。

h79rfbju

h79rfbju2#

请参阅问题中的注解,了解为什么要使用 requests 在网页的“可见光谱”中计算单词的频率(你在浏览器中实际看到的频率)可能是个坏主意。
如果你想和我一起 selenium ,您可以尝试:

  1. from selenium import webdriver
  2. url = 'https://www.gov.uk/government/publications/specialist-quality-mark-tender-2016'
  3. driver = webdriver.Chrome(chromedriver_location)
  4. driver.get(url)
  5. body = driver.find_element_by_tag_name('body')
  6. fr = []
  7. wanted = ['tender', '2020', 'date']
  8. for word in wanted:
  9. freq = body.text.lower().count(word) # .lower() to account for count's case sensitive behaviour
  10. dic = {'phrase': word, 'frequency': freq}
  11. fr.append(dic)
  12. print('Frequency of', word, 'is:', freq)

给我的结果和 CTRL + F 做。
你可以测试一下 BeautifulSoup 通过稍微修改代码(顺便说一下,您正在导入):

  1. import requests
  2. from bs4 import BeautifulSoup
  3. url = 'https://www.gov.uk/government/publications/specialist-quality-mark-tender-2016'
  4. fr = []
  5. wanted = ['tender','2020','date']
  6. a = requests.get(url).text
  7. soup = BeautifulSoup(a, 'html.parser')
  8. for word in wanted:
  9. freq = soup.get_text().lower().count(word)
  10. dic = {'phrase': word, 'frequency': freq}
  11. fr.append(dic)
  12. print('Frequency of', word, 'is:', freq)

这给了我同样的结果,除了这个词 tender ,根据 BeautifulSoup 出现12次,而不是11次。自己测试一下,看看什么适合你。

展开查看全部

相关问题