то, что я пытаюсь сделать, это извлекать данные с динамической страницы, которая постоянно перезагружается с информацией. Способ, которым я настроен, заключается в том, что он обновляется каждые 60 секунд. Проблема в том, что старые данные не удаляются со страницы, поэтому, когда программа просматривает данные после обновления, есть дубликаты.Скремблирование динамических данных и исключение дубликатов с помощью BS4, Selenium in Python
Примечание: программа спит в начале, так как изначально нет сообщений для очистки.
Я ищу способ или решение использовать последнюю запись (в данном случае это сообщения [-1]) в качестве отправной точки для поиска, чтобы предотвратить дублирование.
Цените всю помощь! Спасибо.
driver.get(URL)
while 1==1:
time.sleep(60)
chat_page = driver.page_source
chat_soup = BeautifulSoup(chat_page,'lxml')
messages = chat_soup.findAll('div', attrs={'class':'message first'})
for message in messages:
username = message.div.h2.span.strong.text
text = message.find('div', attrs={'class':'markup'}).get_text()
timestamp = message.find('span', attrs={'class':'timestamp'}).get_text()
today = str(datetime.date.today())
timestamp = timestamp.replace('Today', today)
usernames.append(username)
timestamps.append(timestamp)
texts.append(text)
print(timestamp, username," : ",text)
Я создал временное решение, которое проверяет каждую запись перед входом в мою базу данных SQLite3. Программа может работать, используя «INSERT OR IGNORE». К сожалению, программа постоянно проверяет дубликаты, поскольку у нее нет возможности отфильтровать данные, которые уже были очищены. Ниже мое временное решение:
driver.get(URL)
while 1==1:
chat_page = driver.page_source
chat_soup = BeautifulSoup(chat_page,'lxml')
messages = chat_soup.findAll('div', attrs={'class':'message first'})
for message in reversed(messages):
username = message.div.h2.span.strong.text
usernames.append(username)
text = message.find('div', attrs={'class':'markup'}).get_text()
text = text.replace('"', '')
text = text.replace("'", "")
username = username.replace('"', '')
username = username.replace("'", "")
timestamp = message.find('span', attrs={'class':'timestamp'}).get_text()
today = str(datetime.date.today())
timestamp = timestamp.replace('Today', today)
isbot = message.find('span', attrs={'class':'bot-tag'})
if (isbot):
username = '(BOT) ' + username
sql = '''INSERT OR IGNORE INTO 'chats' ('timestamp', 'username', 'text') VALUES ("%s", "%s", "%s")''' % (timestamp, username, text)
conn.executescript(sql)
Вы полагаете, что все, что мне нужно сделать, это добавить обратное() к моему для заявления? Я не понимаю вашего предложения полностью, я просмотрел документацию для этого. – dg4e
Я пробовал это решение, и он просто изменил порядок, но не помогает, извините. – dg4e
Похоже, что вы искали итерацию, начиная с последнего элемента 'messages'? Не могли бы вы уточнить ** «Я ищу способ или решение использовать последнюю запись (в данном случае это сообщения [-1]) в качестве отправной точки для поиска» ** –