Python 检查列表中的单词是否在另一个列表的字符串中
所以我试着获取《纽约时报》主页的所有标题,想看看某个词被提到了多少次。在这个特殊的案例中,我想看看有多少标题提到了冠状病毒或特朗普。这是我的代码,但它不会工作,因为“number”仍然是我在while循环之前给出的整数Python 检查列表中的单词是否在另一个列表的字符串中,python,string,list,conditional-statements,any,Python,String,List,Conditional Statements,Any,所以我试着获取《纽约时报》主页的所有标题,想看看某个词被提到了多少次。在这个特殊的案例中,我想看看有多少标题提到了冠状病毒或特朗普。这是我的代码,但它不会工作,因为“number”仍然是我在while循环之前给出的整数 import requests from bs4 import BeautifulSoup url = 'https://www.nytimes.com' r = requests.get(url) soup = BeautifulSoup(r.text, "html.pars
import requests
from bs4 import BeautifulSoup
url = 'https://www.nytimes.com'
r = requests.get(url)
soup = BeautifulSoup(r.text, "html.parser")
a = soup.findAll("h2", class_="esl82me0")
for story_heading in a:
print(story_heading.contents[0])
lijst = ["trump", "Trump", "Corona", "COVID", "virus", "Virus", "Coronavirus", "COVID-19"]
number = 0
run = 0
while run < len(a)+1:
run += 1
if any(lijst in s for s in a)
number += 1
print("\nTrump or the Corona virus have been mentioned", number, "times.")
导入请求
从bs4导入BeautifulSoup
url='1〕https://www.nytimes.com'
r=请求。获取(url)
soup=BeautifulSoup(r.text,“html.parser”)
a=soup.findAll(“h2”,class=“esl82me0”)
对于a中的故事标题:
打印(故事标题内容[0])
lijst=[“特朗普”、“特朗普”、“冠状病毒”、“新冠病毒”、“病毒”、“新冠病毒”、“新冠病毒-19”]
数字=0
运行=0
运行时
因此,我基本上希望变量“number”增加1,如果标题(列表a中的一个条目)中有特朗普或冠状病毒,或者两者都有
有人知道怎么做吗 一般来说,我建议在命名变量时多加考虑。我喜欢你打印故事标题的方式。行
如果有的话(s中的lijst表示a中的s)
没有做您认为应该做的事情:您需要在单个h2中迭代每个单词。any
功能只是以下功能的简写:
def any(iterable):
for element in iterable:
if element:
return True
return False
换句话说,您试图查看整个列表是否在h2元素中,这永远不会是真的。下面是一个修复示例
import requests
from bs4 import BeautifulSoup
url = 'https://www.nytimes.com'
r = requests.get(url)
soup = BeautifulSoup(r.text, "html.parser")
h2s = soup.findAll("h2", class_="esl82me0")
for story_heading in h2s:
print(story_heading.contents[0])
keywords = ["trump", "Trump", "Corona", "COVID", "virus", "Virus", "Coronavirus", "COVID-19"]
number = 0
run = 0
for h2 in h2s:
headline = h2.text
words_in_headline = headline.split(" ")
for word in words_in_headline:
if word in keywords:
number += 1
print("\nTrump or the Corona virus have been mentioned", number, "times.")
输出
Trump or the Corona virus have been mentioned 7 times.
这不算答案,因为我没有给你一个完整的解决方案,但通常你会做以下事情:1。把里面的东西拿来。2.将所有文本强制转换为小写,以便有效地进行匹配。3.将文本标记为单个实体。好的选择是SpaCy和NLTK。4.计数和分类的问题<代码>集合。计数器可以帮你解决问题。看到代码背后的逻辑是如此令人满意,现在我终于明白我做错了什么。非常感谢!:-)