删除Python中的重复URL(非列表)

删除Python中的重复URL(非列表),python,python-3.x,loops,web-scraping,duplicates,Python,Python 3.x,Loops,Web Scraping,Duplicates,我需要有关删除输出中重复URL的帮助。如果可能的话,我会尽量表达它,这样我就不必把所有的东西都列在一个列表中。我觉得这可以通过一些逻辑陈述来实现,只是不确定如何实现。使用Python3.6 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

我需要有关删除输出中重复URL的帮助。如果可能的话,我会尽量表达它,这样我就不必把所有的东西都列在一个列表中。我觉得这可以通过一些逻辑陈述来实现,只是不确定如何实现。使用Python3.6

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

如果不使用任何类型的数据结构,就无法实现这一点,除非您希望写入文件并反复读取(这远不如使用内存中的数据结构)

使用:


基于同样的想法,理解似乎更清晰:IMHO:
url\u set=set(链接中的链接使用join(my\u url,link.get(“href”))
然后您可以直接迭代。虽然顺序丢失。@mariusiuram True,但在将集合的内容写入文件时,您会丢失顺序。@DeepSpace完美解决方案。不确定为什么我不想使用列表/集合,但这正是需要做的。谢谢!
.
.
.

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)