Python - Как проверить сходство между строками и печатать только новые строки? - PullRequest
0 голосов
/ 17 мая 2018

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

Как я могу это сделать?Должен ли я использовать какой-нибудь алгоритм сортировки?

Вот код:

#Lib requests

import requests
import bs4

fonte = requests.get('https://www.noticiasaominuto.com/')
soup = bs4.BeautifulSoup(fonte.text, 'lxml')
body = soup.body

for paragrafo in body.find_all('p', class_='article-thumb-text'):
      print(paragrafo.text)
      conteudo = paragrafo.text

id = requests.get('https://api.telegram.org/bot<TOKEN>/getUpdates')
chat_id = id.json()['result'][0]['message']['from']['id']

print(chat_id)

msg = requests.post('https://api.telegram.org/bot<TOKEN>/sendMessage', data = {'chat_id': chat_id ,'text' : conteudo})

1 Ответ

0 голосов
/ 18 мая 2018

Вам необходимо отслеживать статьи, которые вы видели раньше, либо используя полное решение для базы данных, либо просто сохраняя информацию в файле.Файл должен быть прочитан перед началом.Затем веб-сайт очищается и сравнивается с существующим списком.Любые статьи, которых нет в списке, добавляются в список.В конце обновленный список сохраняется обратно в файл.

Вместо того, чтобы хранить весь текст в файле, вместо него можно сохранить хеш текста.т.е. преобразовать текст в уникальный номер, в этом случае используется шестнадцатеричный дайджест, чтобы его было легче сохранить в текстовом файлеПоскольку каждый хеш будет уникальным, они могут быть сохранены в наборе Python для ускорения проверки:

import hashlib
import requests
import bs4
import os

# Read in hashes of past articles
db = 'past.txt'

if os.path.exists(db):
    with open(db) as f_past:
        past_articles = set(f_past.read().splitlines())
else:
    past_articles = set()

fonte = requests.get('https://www.noticiasaominuto.com/')
soup = bs4.BeautifulSoup(fonte.text, 'lxml')

for paragrafo in soup.body.find_all('p', class_='article-thumb-text'):
    m = hashlib.md5(paragrafo.text.encode('utf-8'))

    if m.hexdigest() not in past_articles:
        print('New {} - {}'.format(m.hexdigest(), paragrafo.text))
        past_articles.add(m.hexdigest())

        # ...Update telegram here...

# Write updated hashes back to the file
with open(db, 'w') as f_past:
    f_past.write('\n'.join(past_articles))

При первом запуске все статьи будут отображаться.В следующий раз статьи не будут отображаться, пока сайт не будет обновлен.

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