2017-03-06 13 views
0

J'ai besoin d'aide pour supprimer les URL en double dans ma sortie. J'essaierais de le représenter de telle sorte que je n'ai pas à tout mettre dans une liste, si possible. J'ai l'impression que cela peut être réalisé avec un énoncé logique, mais je ne sais pas trop comment le faire. Utiliser Python 3.6.Suppression des URL en double dans Python (non liste)

from urllib.request import urlopen as uReq 
from bs4 import BeautifulSoup as soup 
from urllib.parse import urljoin as join 

my_url = 'https://www.census.gov/programs-surveys/popest.html' 

uClient = uReq(my_url) 
page_html = uClient.read() 
uClient.close() 

page_soup = soup(page_html, "html.parser") 

filename = "LinkScraping.csv" 
f = open(filename, "w") 
headers = "Web_Links\n" 
f.write(headers) 

links = page_soup.findAll('a') 

for link in links: 
    web_links = link.get("href") 
    ab_url = join(my_url, web_links) 
    print(ab_url) 
     if ab_url: 
     f.write(str(ab_url) + "\n") 

f.close() 

Répondre

1

Vous ne pouvez pas y parvenir sans utiliser la structure de données de quelque sorte, sauf si vous voulez écrire dans le fichier et relire encore et encore (ce qui est beaucoup moins préférable que l'utilisation d'un en mémoire Structure de données).

Utilisez un set:

. 
. 
. 

urls_set = set() 

for link in links: 
    web_links = link.get("href") 
    ab_url = join(my_url, web_links) 
    print(ab_url) 
    if ab_url and ab_url not in urls_set: 
     f.write(str(ab_url) + "\n") 
     urls_set.add(ab_url) 
+0

Avec la même idée, une compréhension semble plus propre à mon humble avis: 'urls_set = set (join (my_url, link.get ("href") pour le lien dans les liens)' puis La commande est perdue, cependant – MariusSiuram

+0

@MariusSiuram Vrai, mais vous perdez la commande en écrivant le contenu de l'ensemble dans le fichier – DeepSpace

+0

@DeepSpace Solution parfaite Je ne sais pas pourquoi je ne voulais pas utiliser une liste/ensemble, mais c'est exactement ce qu'il fallait faire, merci! –