Очистка данных без повторения уже сохраненных данных - PullRequest
0 голосов
/ 01 февраля 2019

У меня есть простой скрипт Beautifulsoup, который периодически удаляет данные со страницы и сохраняет их в виде файла json.Однако каждый раз, когда он запускается, он просматривает множество одинаковых наборов URL-адресов и очищает множество одинаковых данных, а также любые новые опубликованные данные.Как я могу избежать дублирования?

Я пытался выбрать URL, которые уже были удалены, но не знаю, как создать логику, чтобы остановить ненужное дублирование в процессе очистки.

    for i in urlrange:
        urlbase = 'https://www.example.com/press-releases/Pages/default.aspx?page='
        targeturl = urlbase+str(i)
        req = requests.get(targeturl)
        r = req.content
        soup = BeautifulSoup(r,'lxml')
        for row in soup.find_all('table', class_='t-press'):
            for link in row.find_all('a'):
                link = link.get('href')
                link = 'https://www.example.com' + link
                if link not in datalinks:
                    datalinks.append(link)
                    #print('New link found!')
                else:
                    continue

    pickling_on = open("links_saved.pkl","wb")
    pickle.dump(datalinks, pickling_on)
    pickling_on.close()

    for j in datalinks:
        req = requests.get(j)
        r = req.content
        soup = BeautifulSoup(r,'lxml')
        for textdata in soup.find_all('div', class_='content-slim'):
            textdata = textdata.prettify()
            data.append({j:textdata})   

    json_name = "Press_Data_{}.json".format(time.strftime("%d-%m-%y"))

    with open(json_name,'w') as outfile:
        json.dump(data,outfile)

Я хотел бы очистить данные, не просматривая URL-адреса, которые уже были обработаны сценарием.

Ответы [ 2 ]

0 голосов
/ 01 февраля 2019

Попробуйте что-то вроде этого:

listwithdups = [ 'url1', 'url2', 'url3', 'url2', 'url4', 'url4' ]    
uniqueList = [ i for i in listwithdups if i not in uniqueList ]

Разбить понимание списка:

listwithdups = [ 'url1', 'url2', 'url3', 'url2', 'url4', 'url4' ]    
uniqueList = [] #declaring empty list

for i in listwithdups:
 if i not in uniqueList:
  uniqueList.append(i)
0 голосов
/ 01 февраля 2019

Попробуйте сохранить ссылки в наборе.

datalinks = [ ]
unique_links = set(datalinks)

Это удалит все дублирующиеся ссылки, поэтому теперь будут обрабатываться только уникальные ссылки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...