簡體   English   中英

For-Loop:如何忽略列表中先前添加的值? (蟒蛇)

[英]For-Loop: How to ignore previously added values in a list? (Python)

我有一個循環,不斷向列表中添加一個未知值的變量,然后打印列表。 但是,當我想要下次打印列表時,我找不到忽略先前找到並添加到列表中的值的方法。

我正在使用循環中的請求和bs4抓取一個不斷更新的網站,用於關鍵字匹配鏈接。 一旦網站添加了鏈接,我正在尋找我的代碼,將它們添加到列表中,然后打印列表。 一旦網站添加了下一波匹配鏈接,這些也將添加到我的列表中,但是我的代碼也會將之前找到的舊鏈接再次添加到列表中,因為它們仍然匹配我的關鍵字。 是否可以忽略這些舊鏈接?

url = "www.website.com"  
keyword = "news"
results = []                    #list which saves the links 

while True:
        source = requests.get(url).text  
        soup = BeautifulSoup(source, 'lxml')
        options = soup.find_all("a", class_="name-link")      
        for o in options:
            if keyword in o.text:
                link = o.attrs["href"]                 #the links I want                
                results.append(link)                   #adds links to list

        print(results)
        time.sleep(5)                              #wait until next scrape


#so with every loop the value of 'link' is changing which makes it hard         
for me to find a way to ignore previously found links

為了使它更容易理解,你可以想到一個循環在每次執行循環時向列表中添加一個未知數字,但該數字應該只在第一次執行時打印。

以下是使用集合的概念證明,如果挑戰是您只想保留唯一鏈接,然后打印以前未找到的新鏈接:

import random

results = set()
for k in range(15):
    new = {random.randint(1,5)}
    print(f"First Seen: {new-results}")
    results = results.union(new)
    print(f"All: {results}")

如果它更像是一個流媒體問題,你將所有鏈接保存到一個大的列表,但只想打印最新發現的鏈接,你可以這樣做:

import random

results = []
for k in range(5):
    n = len(results)
    new = []
    for k in range(random.randint(1,5)):
        new.append(random.randint(1,5))

    results.extend(new)
    print(results[n:])

但話又說回來,你也可以在這種情況下打印new ....

這是Set數據結構的一個很好的用例。 集合不保持項目的任何排序。 對上面的代碼進行非常簡單的更改:

url = "www.website.com"  
keyword = "news"
results = {}

while True:
        source = requests.get(url).text  
        soup = BeautifulSoup(source, 'lxml')
        options = soup.find_all("a", class_="name-link")      
        for o in options:
            if keyword in o.text:
                link = o.attrs["href"]                 #the links I want                
                results.add(link)                   #adds links to list

        print(results)
        time.sleep(5)                              #wait until next scrape

如果要維護順序,可以使用有序字典的某些變體。 請看這里: Python有一個有序集嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM