2017-03-06 88 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完美的解决方案不知道为什么我不想使用列表/设置,但这正是需要做的,谢谢! –