有没有办法更新文件而不获取重复值?

Is there a way to update the file and not get duplicate values?

我正在使用 python 抓取网站并将所有数据保存到 .csv 文件中。 (你可以在下面看到我的代码) 该网站每小时更新一次,所以我想用网站前几页上的新条目更新现有文件(有 100 多页)。最好的检查方法可能是使用日期和时间字段检测重复条目。有什么方法可以做到这一点?我一直在想办法,但一直没有成功。

1 将模式附加到前几页的 运行 代码并使用 excel 删除条目? (这里会很奇怪)

2 Pandas 有一个删除重复的选项,但是我很困惑现在我已经带着这个

来到这里了,现在该怎么办
import csv
import re
import datetime
import requests
from bs4 import BeautifulSoup



params = {
    "action": "livewire_load_posts",
    "school": "",
    "round": "",
    "status": "",
    "orderby": "",
    "paged": "",
}

file = open('output.csv', 'w')
writer = csv.writer(file) 
writer.writerow(['Date&Time','Status','School'])

for page in range(1, 10):
    
    print("Getting page {}..".format(page))

    params["paged"] = page
    data = requests.post(url, data=params).json()
    soup = BeautifulSoup(data["markup"], "html.parser")

    for entry in soup.select(".livewire-entry"):
        
        datime = entry.select_one(".adate")
        status = entry.select_one(".status")
        name = status.find_next("strong")


        datime = datime.get_text(strip=True)
        datime = datetime.datetime.strptime(datime, '%B %d, %Y %I:%M%p')
        
        print(
            "{:<25} {:<25} {}".format(
                
                status.get_text(strip=True),
                name.get_text(strip=True),
                datime
            )
        )

        

        writer.writerow([datime, status.get_text(strip=True), name.get_text(strip=True)]
        

    print("-" * 80) 

file.close()

您可以读取现有的 csv 文件并将 'status' 和 'school' 值存储在两个列表中(首先创建),然后根据它们检查新值并在找到时从 for 循环中中断,像这样:

for page in range(1, 10):
    ...    
    for entry in soup.select(".livewire-entry"):
        datime = entry.select_one(".adate")
        status = entry.select_one(".status")
        name = status.find_next("strong")

        if status in status_list and name in name_lists:
            break
        ...

或者,一旦您将新行附加到 csv 文件并关闭它,您可以 open it in Pandas, drop duplicate rows and save it back to a csv file:

df = pd.read_csv('output.csv')
df = df.drop_duplicates(keep="first", subset=['Status', 'School'])
df.to_csv(path_or_buf='output.csv', index=False)