2016-07-24 11 views
0

Ich benutze das Feedparser-Modul, um einen News-Feed in meinem Programm zu erstellen.Separate RSS-Feed-Link/s

Die Yahoo! Das Finance API Link Element hat zwei Links: den Yahoo Link und den eigentlichen Artikellink (externe Seite/Quelle). Die beiden sind durch ein Sternchen, mit der folgenden ist ein Beispiel getrennt:

http://us.rd.yahoo.com/finance/external/investors/rss/SIG=12shc077a/ * http://www.investors.com/news/technology/click/pokemon-go-hurting-facebook-snapchat-usage/

Hinweis Das Sternchen zwischen den beiden Positionen.

Ich habe mich nur gefragt, ob es eine pythonische Möglichkeit gibt, diese beiden zu trennen, und nur den zweiten Link zu einer Datei lesen.

Vielen Dank für Ihre Zeit.

Hier ist mein entsprechenden Code:

def parse_feed(news_feed_message, rss_url): 
    ''' This function parses the Yahoo! RSS API for data of the latest five articles, and writes it to the company news text file''' 

    # Define the RSS feed to parse from, as the url passed in of the company the user chose 
    feed = feedparser.parse(rss_url) 

    # Define the file to write the news data to the company news text file 
    outFile = open('C:\\Users\\nicks_000\\PycharmProjects\\untitled\\SAT\\GUI\\Text Files\\companyNews.txt', mode='w') 

    # Create a list to store the news data parsed from the Yahoo! RSS 
    news_data_write = [] 
    # Initialise a count 
    count = 0 
    # For the number of articles to append to the file, append the article's title, link, and published date to the news_elements list 
    for count in range(10): 
     news_data_write.append(feed['entries'][count].title) 
     news_data_write.append(feed['entries'][count].published) 
     news_data_write.append(feed['entries'][count].link) 
     # Add one to the count, so that the next article is parsed 
     count+=1 
     # For each item in the news_elements list, convert it to a string and write it to the company news text file 
     for item in news_data_write: 
      item = str(item) 
      outFile.write(item+'\n') 
     # For each article, write a new line to the company news text file, so that each article's data is on its own line 
     outFile.write('\n') 
     # Clear the news_elements list so that data is not written to the file more than once 
     del(news_data_write[:]) 
    outFile.close() 

    read_news_file(news_feed_message) 

Antwort

0

Sie dieses die folgende Art und Weise aufteilen:

link = 'http://us.rd.yahoo.com/finance/external/investors/rss/SIG=12shc077a/*http://www.investors.com/news/technology/click/pokemon-go-hurting-facebook-snapchat-usage/' 

rss_link, article_link = link.split('*') 

Beachten Sie, dass dies den Link erfordert immer die Sternchen enthalten, sonst werden Sie erhalten die folgende Ausnahme:

ValueError: not enough values to unpack (expected 2, got 1) 

Wenn Sie nur die zweite Verbindung benötigen, könnten Sie auch w rite:

_, article_link = link.split('*') 

Dies zeigt an, dass Sie den ersten Rückgabewert verwerfen möchten. Eine weitere Alternative ist:

article_link = link.split('*')[1] 

Code Bezug: Wenn Sie eine Ausnahme überall haben, nachdem Sie Ihre Ausgabedatei geöffnet haben, wird es nicht richtig geschlossen werden. Verwenden Sie entweder den open Context Manager (docs) oder einen try ... finally Block (docs), um sicherzustellen, dass Sie Ihre Datei schließen, egal was passiert.

Context Manager:

with open('youroutputfile', 'w') as f: 
    # your code 
    f.write(…) 

Exception-Handler:

try: 
    f = open('youroutputfile', 'w') 
    f.write(…) 
finally: 
    f.close()