2017-03-06 93 views
0

我需要幫助刪除輸出中的重複URL。如果可能的話,我會盡力去代表它,這樣我就不必把所有東西放在一個列表中。我覺得可以通過一些合理的陳述來實現,但不知道如何實現。使用Python 3.6。在Python中刪除重複的URL(非列表)

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

回答

1

,除非你想寫入文件,一遍又一遍(這比使用一個內存遠不如最好重新讀取它不能在不使用某種形式的任何數據結構實現這一目標數據結構)。

使用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

有了同樣的想法,一個理解似乎更清潔恕我直言:'urls_set =集(加入(my_url,link.get在鏈路的鏈路( 「HREF」))'然後 – MariusSiuram

+0

@MariusSiuram確實如此,但是在將文件的內容寫入文件時會丟失命令 – DeepSpace

+0

@DeepSpace完美的解決方案不知道爲什麼我不想使用列表/設置,但這正是需要做的,謝謝! –