Как лучше всего добавить данные / RSS-каналы на сервер MongoDB Atlas? - PullRequest
0 голосов
/ 18 января 2019

Я пытаюсь добавить данные из нескольких URL-адресов, извлекая дату, заголовок, ссылку и источник из RSS-каналов на сервер MongoDB каждые 10 минут. У меня в основном два вопроса. 1. Как лучше всего добавить данные в базу данных mongodb без дубликатов значений? 2. Я получаю KeyError: 'description', когда добавляю description = (article["description"]) или когда добавляю pubdate = (article["pubDate"] в цикле ввода. Как я могу решить это?

import feedparser
import datetime
import pymongo
import json

"""
Crawler for the RSS. Extract the information from different RSS feeds and adds them to a MongoDB server
"""

# create a dictionary of rss feeds
feeds = [
    "http://rss.nytimes.com/services/xml/rss/nyt/HomePage.xml",
    'http://feeds.foxnews.com/foxnews/most-popular',
    'http://www.wsj.com/xml/rss/3_7041.xml',
    'http://www.wsj.com/xml/rss/3_7014.xml',
    'http://www.wsj.com/xml/rss/3_7085.xml',
    'http://feeds.washingtonpost.com/rss/national',
    'http://rss.cnn.com/rss/cnn_topstories.rss',
    'http://rss.cnn.com/rss/cnn_us.rss',
    'http://feeds.feedburner.com/breitbart',
    'http://www.cnbc.com/id/100003114/device/rss/rss.html',
    'http://feeds.abcnews.com/abcnews/topstories',
    'http://feeds.bbci.co.uk/news/rss.xml',
    'https://www.wired.com/feed/',
    'http://rss.upi.com/news/top_news.rss',
    'http://feeds.reuters.com/reuters/topNews',
    'http://rssfeeds.usatoday.com/usatoday-NewsTopStories',
    ]

data = []
dt = datetime.datetime.utcnow()

for source in feeds:
    feed = feedparser.parse(source)

for entry in feed["entries"]:
    article = json.loads(json.dumps(entry, default=str))
    title = (article["title"])
    link = (article["link"])
    source = feed['feed']['title']

    d = {
        "Datetime": dt,
        "Title": title,
        "Link": link,
        "Source": source
    }

    data.append(d)
    print(data)


client = pymongo.MongoClient("mongodb_server")

mydb = client["master_database"]

mycol = mydb["news"]

x = mycol.insert_many(data)
...