我试图在线打印出标题的单词,但控制台上没有显示任何内容



为了练习,我想在Python中构建一个词频计数器。我决定使用Reddit上一篇文章的标题(如果这不是问题(作为一个例子。对我来说,第一步是从该标题中获取单词,并将它们放入列表中,如下所示:

import requests
from bs4 import BeautifulSoup

def get_words(url):
word_list = []
source_code = requests.get(url).text
soup = BeautifulSoup(source_code, features='html.parser')
for word in soup.find_all('a', {'class': 'title may-blank loggedin'}):
content = word.string
every_word = content.lower().split()
for every in every_word:
print(every)
word_list.append(every)

get_words('https://www.reddit.com/r/nba/comments/hje9ud/kemba_walker_im_a_single_man_with_no_kids_so_ima/')

但是当我运行它时,控制台上没有任何内容运行(即使我决定遍历标题并打印出所有单词(。这有什么原因吗?是因为我使用像Reddit这样的大网站作为例子吗?

您可能收到 502。 取而代之的是:

source_code = requests.get(url).text

你应该这样做:

response = requests.get(url)
assert response.status_code == 200
source_code = response.text

你会看到它失败了。

您需要添加"用户代理"标头。看到这个问题: 使用 Python 中的搜索网站请求时出现 502 错误

即便如此,你的汤选择器也很奇怪。您正在寻找具有"title"类a元素,但该页面上没有此类元素。您可能应该只获得<h1>元素。

所以这将起作用:

import requests
from bs4 import BeautifulSoup

def get_words(url):
word_list = []
source_code = requests.get(url, headers={'User-Agent': 'Mozilla/5.0'}).text
soup = BeautifulSoup(source_code, features='html.parser')
for word in soup.find_all('h1'):
content = word.string
every_word = content.lower().split()
for every in every_word:
print(every)
word_list.append(every)

get_words('https://www.reddit.com/r/nba/comments/hje9ud/kemba_walker_im_a_single_man_with_no_kids_so_ima/')

我对此进行了测试,它发现了重复的标头,因此可能只使用第一个标头,如下所示:

import requests
from bs4 import BeautifulSoup

def get_words(url):
word_list = []
source_code = requests.get(url, headers={'User-Agent': 'Mozilla/5.0'}).text
soup = BeautifulSoup(source_code, features='html.parser')
content = soup.find_all('h1')[0].string
every_word = content.lower().split()
for every in every_word:
print(every)
word_list.append(every)

get_words('https://www.reddit.com/r/nba/comments/hje9ud/kemba_walker_im_a_single_man_with_no_kids_so_ima/')

相关内容

最新更新