2017-03-06 6 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 =セット(参加(my_url、link.getリンク内のリンクについて( "HREF"))`と:同じ考えで

. 
. 
. 

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

、理解はクリーナー私見です – MariusSiuram

+0

@MariusSiuram真実ですが、セットのコンテンツをファイルに書き込む際に順序を失う – DeepSpace

+0

@DeepSpace Perfect solution。リスト/リストを使用したくない理由がわかりません。しかし、それは正確に何が行われる必要があります。ありがとう! –

関連する問題