Feedparser не анализирует поиск по описанию

Я пытаюсь использовать RSS для получения автоматических уведомлений о конкретных уязвимостях безопасности, которые могут меня беспокоить. Я сделал его функциональным для поиска ключевых слов в заголовке и URL-адресе записей канала, но, похоже, он игнорирует описание rss.

Я проверил, что поле описания существует в ленте (первоначально я начал со сводки вместо описания, прежде чем обнаружил это), но не понимаю, почему оно не работает (относительно новое для python). Возможно, это проблема санитарии, или я что-то упустил в том, как выполняется поиск?

#!/usr/bin/env python3.6

import feedparser

#Keywords to search for in the rss feed


key_words = ['Chrome','Tomcat','linux','windows']

# get the urls we have seen prior

f = open('viewed_urls.txt', 'r')
urls = f.readlines()
urls = [url.rstrip() for url in urls]
f.close()

#Returns true if keyword is in string

def contains_wanted(in_str):
    for wrd in key_words:
        if wrd.lower() in in_str:
            return True
    return False

#Returns true if url result has not been seen before

def url_is_new(urlstr):
    # returns true if the url string does not exist
    # in the list of strings extracted from the text file
    if urlstr in urls:
        return False
    else:
        return True

#actual parsing phase

feed = feedparser.parse('https://nvd.nist.gov/feeds/xml/cve/misc/nvd-rss.xml')
for key in feed["entries"]:
    title = key['title']
    url = key['links'][0]['href']
    description  = key['description']

#formats and outputs the specified rss fields

    if contains_wanted(title.lower()) and contains_wanted(description.lower()) and url_is_new(url):
        print('{} - {} - {}\n'.format(title, url, description))

#appends reoccurring rss feeds in the viewed_urls file
        with open('viewed_urls.txt', 'a') as f:
            f.write('{}\n'.format(title,url))

person shoughton1996    schedule 28.06.2019    source источник
comment
contains_wanted(title.lower()) and contains_wanted(description.lower()) and url_is_new(url) Вы уверены, что это должно быть соединением?   -  person pbn    schedule 28.06.2019
comment
Потому что, если заголовок не содержит нужного слова, другие выражения в этом операторе if не оцениваются.   -  person pbn    schedule 28.06.2019


Ответы (1)


Это помогло. Я не знал о логике соединения, но решил ее. Я пропустил contains_wanted(title.lower()), так как это не было необходимо в логике оператора, поскольку contains_wanted(description.lower()) выполняет цель оператора заголовка, а также свою собственную. и я получаю правильный вывод.

Спасибо пбн.

person shoughton1996    schedule 29.06.2019