У меня есть webscrapper в Python. Он сохраняет результат в модели django, поэтому, когда я обновляю страницу, он запускает webscrapper, дублируя уже существующие данные. Я попытался удалить данные с помощью списка (dict.fromkeys (my2)) , но безрезультатно.
views.py
def Scrappy(request):
session = requests.Session()
session.headers = {
"User-Agent": 'User-Agent'}
url = 'https://www.google.com/blog/'
content = session.get(url, verify=False,).content
soup = BeautifulSoup(content, "html.parser")
obj1 = soup.find_all(
'div', {'class': 'td_module_3 td_module_wrap td-animation-stack'})
obj2 = soup.find_all(
'div', {'class': 'td_module_10 td_module_wrap td-animation-stack'})
for x in obj1:
linkX = x.find('a', {'class': 'td-image-wrap'})
#saving the fetched data into variables
link_x = linkX.get('href')
title_x = linkX.get('title')
img_src_x = x.find('img', {'class': 'entry-thumb'})['src']
link_x.replace(u"\u2019", "-")
link_x.decode('utf-16', 'ignore')
img_src_x.replace(u"\u2019", "-")
img_src_x.decode('utf-16', 'ignore')
new_Web = WebScraper()
new_Web.web_title = title_x
new_Web.web_url = str(link_x)
new_Web.my_img = str(img_src_x)
try:
my = {new_Web}
my = list(dict.fromkeys(my))
new_Web.save()
except:
pass
# new_Web.save()
for y in obj2:
linkY = y.find('a', {'class': 'td-image-wrap'})
#saving the fetched data into variables
link_y = linkY.get('href')
title_y = linkY.get('title')
img_src_y = y.find('img', {'class': 'entry-thumb'})['src']
img_src_y.replace(u"\u2019", "-")
img_src_y.decode('utf-16', 'ignore')
link_y.replace(u"\u2019", "-")
link_y.decode('utf-16', 'ignore')
new_Web2 = WebScraper()
new_Web2.web_title = title_y
new_Web2.web_url = str(link_y)
new_Web2.my_img = str(img_src_y)
try:
my2 = ["new_Web2"]
my2 = list(dict.fromkeys(my2))
new_Web2.save()
except:
pass
# new_Web2.save()
return redirect('Veb-View')
Я ожидаю, что не буду создавать дубликаты элементов в БД, так как это излишне заполняет базу данных. Пожалуйста, поделитесь методом или ссылкой, как автоматически удалять дубликаты.
Заранее спасибо.