Есть ли способ отфильтровать статьи фида по содержимому в получателях Calibre?

Я использую Caliber, чтобы загружать каналы из разных источников новостей и отправлять их на мой сайт. Мне было интересно, можно ли использовать пользовательский рецепт для загрузки только статей, в заголовке или содержании которых есть "волшебное" ключевое слово. Для заголовка довольно просто, если вы используете собственный рецепт и переопределите parse_feeds метод:

from __future__ import unicode_literals, division, absolute_import, print_function
from calibre.web.feeds.news import BasicNewsRecipe    

class AdvancedUserRecipe1425579653(BasicNewsRecipe):
    title          = 'MY_TITLE'
    oldest_article = 7
    max_articles_per_feed = 100
    auto_cleanup   = True    
    feeds          = [
        ('MY_TITLE', 'MY_FEED_URL'),
    ]

    def parse_feeds(self):    
        feeds = BasicNewsRecipe.parse_feeds(self)    
        for feed in feeds:    
            for article in feed.articles[:]:    
                if 'MY_MAGIC_KEYWORD' not in article.title.upper():
                    feed.articles.remove(article)    
        return feeds

Но так как у меня нет доступа к feed.content в parse_feeds Мне было интересно, есть ли другой способ сделать это для содержания статьи.

1 ответ

Решение

Я нашел решение, любезно предоставленное Kovid Goyal, парнем, который поддерживает Caliber. Идея состоит в том, чтобы переопределить preprocess_html куда вы можете просто вернуться None в случае, если содержание статьи не соответствует вашим критериям, в моем случае логика была такой:

def preprocess_html(self, soup):                        
    if 'MY_MAGIC_KEYWORD' in soup.html.head.title.string.upper():
        return soup
    if len(soup.findAll(text=re.compile('my_magic_keyword', re.IGNORECASE))) > 0:
        return soup        
    return None

Вы также можете переопределить preprocess_raw_html добиться того же. Разница в том, что в preprocess_raw_html вам придется работать с HTML в виде строки в то время как на preprocess_html HTML уже проанализирован как Beautiful Soup.

Другие вопросы по тегам