BeautifulSoup Detect Change Trigger - PullRequest
       0

BeautifulSoup Detect Change Trigger

1 голос
/ 05 апреля 2020

У меня есть скрипт, который использует bs4 для очистки веб-страницы и получения строки с именем «Последнее обновление: 4/3/2020, 20:28». Затем я назначаю эту строку переменной и отправляю ее по электронной почте. Сценарий планируется запускать один раз в день. Однако дата и время на сайте меняются через день. Поэтому вместо того, чтобы каждый раз запускать скрипт по электронной почте, я бы хотел настроить триггер так, чтобы он отправлялся только тогда, когда дата отличается. Как настроить скрипт для обнаружения этого изменения?

Строка в HTML:

<h1>COVID-19 News Updates</h1>


<br>Last Updated 4/3/2020, 12:08 p.m.
'''Checks municipal websites for changes in meal assistance during C19 pandemic'''

# Import requests (to download the page)
import requests
# Import BeautifulSoup (to parse what we download)
from bs4 import BeautifulSoup
import re

#list of urls
urls = ['http://www.vofil.com/covid19_updates']

#set the headers as 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'}

#download the homepage
response = requests.get(urls[0], headers=headers)
#parse the downloaded homepage and grab all text
soup = BeautifulSoup(response.text, "lxml")
#Find string
last_update_fra = soup.findAll(string=re.compile("Last Updated"))
print(last_update_fra)

#Put something here (if else..?) to trigger an email.

#I left off email block...

Ответ, который я нашел в шкафу, был такой, но он ссылается на теги, не строка Разбор меняющихся тегов BeautifulSoup

1 Ответ

1 голос
/ 05 апреля 2020

Вам нужно будет часто проверять наличие изменений, используя что-то вроде этого:

'''Checks municipal websites for changes in meal assistance during C19 pandemic'''

# Import requests (to download the page)
import requests
# Import BeautifulSoup (to parse what we download)
from bs4 import BeautifulSoup
import re
import time

#list of urls
urls = ['http://www.vofil.com/covid19_updates']

#set the headers as 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'}

while True:
    #download the homepage
    response = requests.get(urls[0], headers=headers)
    #parse the downloaded homepage and grab all text
    soup = BeautifulSoup(response.text, "lxml")
    #Find string
    last_update_fra = soup.findAll(string=re.compile("Last Updated"))
    time.sleep(60)
    #download request again
    soup = BeautifulSoup(requests.get(urls[0], headers=headers), "lxml")

    if soup.findAll(string=re.compile("Last Updated")) == last_update_fra:
        continue
    else:
        # Code to send email
*This waits a minute before checking for changes, but it can be adjusted as needed.
[Credit][1]: https://chrisalbon.com/python/web_scraping/monitor_a_website/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...