是否有一种方法可以告诉列表项来自哪个集合?



我目前有这个工作,它输出对站点地图所做的任何更改。

我想要的是让它显示更改是否被删除或添加。我想我可以通过某种方式找出输出来自哪个列表来做到这一点。

即如果旧的列表缺少了新的列表所拥有的东西,我就会知道它被添加了如果新列表缺少旧列表的某些内容,我就会知道有些内容被删除了

我还没有找到很多关于这个的具体信息,我还在调查中。

注意:我已经试过了。我不喜欢这个输出。我目前有一个使用difflib的工作程序,但输出是一团乱。我觉得自己做一个会更容易(输出方面)。

我的最终目标是监视sitemap.xml并打印任何更改,也打印它是否被添加,删除或编辑。

import requests
from bs4 import BeautifulSoup
import time
from datetime import datetime
import pandas as pd
import csv

# field names 
fields = ['Test', 'Test2', 'Test3'] 

# target URL
url = "https://www.huntermichaelseo.com/testing.xml"
# act like a browser
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'}
PrevVersion = ""
FirstRun = True

while True:
# download the page
response = requests.get(url, headers=headers)
# parse the downloaded homepage
soup = BeautifulSoup(response.text, "xml")
this = soup.find_all('loc')
if PrevVersion != this:
if FirstRun == True:
PrevVersion = this
FirstRun = False
print ("Start Monitoring "+url+ " "+ str(datetime.now()))

# remove all scripts and styles

else:
print("Changes detected on MDR at: "+ str(datetime.now()))
OldPage = set(PrevVersion)
NewPage = set(soup.find_all('loc'))
another = str(OldPage ^ NewPage).split(", ")
s = 't'.join(str(x2) for x2 in another)   
print(s)
with open('GFG', 'w') as f:

# using csv.writer method from CSV package
write = csv.writer(f)

write.writerow(fields)
write.writerows(another)
OldPage = NewPage
#print ('n'.join(diff))
PrevVersion = this

else:
print( "nNo Changes to MDR "+ str(datetime.now()))
time.sleep(5)
continue  

当您使用oldPage ^ newPage时,您无法判断值来自哪个集合。使用减法来得到每个差。

added = newPage - oldPage
deleted = oldPage - newPage

然后当你将这些写入CSV文件时,你可以给每一行添加一个标签,表明它来自哪个集合。

最新更新