Убедитесь, что более влажные слова из списка находятся внутри строки другого списка Python - PullRequest
0 голосов
/ 12 апреля 2020

Поэтому я попытался получить все заголовки на главной странице New York Times и хотел посмотреть, сколько раз упомянуто определенное слово. В этом конкретном случае я хотел посмотреть, сколько заголовков упомянули либо о Коронавирусе, либо о Трампе. Это мой код, но он не будет работать, так как «число» остается целым числом, которое я дал ему до того, как l oop.

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.")

Так что я в основном хочу, чтобы переменная «число» увеличилась на 1 если заголовок (который является записью в списке a) содержит слово Trump или Coronavirus или оба в них.

Кто-нибудь знает, как это сделать?

1 Ответ

1 голос
/ 12 апреля 2020

В общем, я рекомендую уделить больше внимания именованию переменных. Мне нравится, как вы пытались напечатать заголовки историй. Строка if any(lijst in s for s in a) не делает то, что, как вы думаете, должна: вместо этого вам нужно перебирать каждое слово в одном 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.
...