【问题标题】:Removing duplicate URLs in Python (non list)删除 Python 中的重复 URL(非列表)
【发布时间】:2017-03-06 17:40:43
【问题描述】:

我需要有关删除输出中重复 URL 的帮助。如果可能的话,我会尝试将其表示为不必将所有内容都放在列表中。我觉得可以通过一些合乎逻辑的陈述来实现,只是不知道如何实现。使用 Python 3.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()

【问题讨论】:

    标签: python python-3.x loops web-scraping duplicates


    【解决方案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)
    

    【讨论】:

    • 有了同样的想法,理解似乎更清晰恕我直言:urls_set = set(join(my_url, link.get("href") for link in links) 然后你可以直接迭代。但是,订单丢失了。
    • @MariusSiuram 是的,但是在将集合的内容写入文件时会丢失顺序。
    • @DeepSpace 完美解决方案。不知道为什么我不想使用列表/集合,但这正是需要做的。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-14
    • 1970-01-01
    • 2011-10-04
    • 2012-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多