2016-05-23 4 views
1

Mon script python analyse les titres et les liens de plusieurs flux RSS. Je stocke ces titres dans une liste et je veux m'assurer que je n'imprime jamais de doublons. Comment je fais ça?Comment puis-je dire à Python de ne pas imprimer un élément dans une liste?

#!/usr/bin/python 
from twitter import * 
from goose import Goose 
import feedparser 
import time 
from pyshorteners import Shortener 
import pause 
import newspaper 

dr = feedparser.parse("http://www.darkreading.com/rss_simple.asp") 
sm =feedparser.parse("http://www.securitymagazine.com/rss/topic/2654-cyber-tactics.rss") 



dr_posts =["CISO Playbook: Games of War & Cyber Defenses", 
     "SWIFT Confirms Cyber Heist At Second Bank; Researchers Tie Malware Code to Sony Hack","The 10 Worst Vulnerabilities of The Last 10 Years", 
     "GhostShell Leaks Data From 32 Sites In 'Light Hacktivism' Campaign", 
      "OPM Breach: 'Cyber Sprint' Response More Like A Marathon", 
     "Survey: Customers Lose Trust In Brands After A Data Breach", 
     "Domain Abuse Sinks 'Anchors Of Trust'", 
     "The 10 Worst Vulnerabilities of The Last 10 Years", 
] 

sm_posts = ["10 Steps to Building a Better Cybersecurity Plan"] 

x = 1 

while True: 

    try: 

     drtitle = dr.entries[x]["title"] 
     drlink = dr.entries[x]["link"] 
     if drtitle in dr_posts: 
      x += 1 
      drtitle = dr.entries[x]["title"] 
      drtitle = dr.entries[x]["link"] 
      print drtitle + "\n" + drlink 
      dr_posts.append(drtitle) 
      x -= 1 
      pause.seconds(10) 
     else: 
      print drtitle + "\n" + drlink 
      dr_posts.append(drtitle) 
      pause.seconds(10) 

     smtitle = sm.entries[x]["title"] 
     smlink = sm.entries[x]["link"] 
     if smtitle in sm_posts: 
      x +=1 
      smtitle = sm.entries[x]["title"] 
      smtitle = sm.entries[x]["title"] 
      print smtitle + "\n" + smlink 
      sm_posts.append(smtitle) 
      pause.seconds(10) 
    else: 
     print smtitle + "\n" + smlink 
     sm_posts.append(smtitle) 
     x+=1 
     pause.seconds(10) 



except IndexError: 
    print "FAILURE" 
    break 

Pour l'instant je ne il sauter les entrées. Ce qui serait un problème parce que s'il y a un autre doublon plus bas dans le flux RSS, alors j'aurais encore plus de doublons.

Répondre

2

Vous pouvez tirer parti de la structure de données set, car sa propriété «unicité» fera le travail pour vous. Essentiellement, nous pouvons faire de votre liste un ensemble et ensuite définir une liste à nouveau, ce qui garantit que votre liste est maintenant remplie avec des valeurs strictement uniques.

Si vous aviez une liste l, alors vous pouvez le rendre unique par

l = list(set(l)) 
+0

Merci! Cela m'a vraiment aidé! – Frank

+0

Pas de problème mec! Glsd ça a aidé. N'hésitez pas à marquer ma réponse comme acceptée (case à cocher) –

0

Si vous ne souhaitez pas imprimer un lien répétitif vous pouvez utiliser un counter ou defaultdict

sm_posts = defaultdict(int) 
sm_posts[sm_links] += 1 
print sm_posts.keys() #will print all the unique links 

la bonne chose est que vous pouvez également obtenir le nombre de répétitions de liens en faisant

sm_posts[sm_links] 
>>> link_counts 

l'essayer.