2016-07-24 5 views
0

Я использую модуль feedparser для создания ленты новостей в своей программе.Отдельная ссылка для RSS-канала/s

Yahoo! Элемент link API финансов фактически имеет две ссылки: ссылку Yahoo и фактическую ссылку на статью (внешний сайт/источник). Два отделены друг от друга звездочек, со следующим быть примером:

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

Примечания звездочки между двумя элементами.

Мне просто интересно, существует ли пифонический способ разделить эти два и читать только вторую ссылку на файл.

Спасибо за ваше время.

Вот мой соответствующий код:

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) 

ответ

0

Вы можете разделить это следующим образом:

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('*') 

Имейте в виду, что это требует ссылку, чтобы всегда содержать звездочку, в противном случае вы будете получить следующее исключение:

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

Если вам нужна только вторая ссылка, вы также можете использовать w обряд:

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

Это означает, что вы хотите отбросить первое возвращаемое значение. Другая альтернатива:

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

Что касается вашего кода: если у вас есть исключение в любом месте после того, как вы открыли свой выходной файл, он не будет закрыта. Либо используйте диспетчер контекста open (docs) или блок try ... finally (docs), чтобы убедиться, что вы закрываете файл независимо от того, что происходит.

Контекст менеджер:

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

обработчик исключений:

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