Neculai Fantanaru

Totul depinde de cine conduce

Python: Extrage datele din pagina Web-Html si trimite automat Email

On Iunie 24, 2023
, in
Python Scripts Examples by Neculai Fantanaru YYY

1. Trebuie să ai local o pagină de tip template "online.html" cu designul aferent viitorului mesaj newsletter pe care vrei să-l trimiţi

2. Extrage cel mai nou link din pagina locală index.html

3. Accesează acel link şi citeşte prin metoda "view source" pagina html, direct de pe pagina internet

4. Preia datele necesare din acea pagină html şi apoi le copiază în pagina locală "online.html". Apoi face backup într-un fişier "online_backup.html"

TITLU-ARTICOL din "online.html" va fi completat de conţinutul <title> din pagină web

LINK-CANONICAL din "online.html" va fi completat de conţinutul <canonical> din pagină web

COMENTARIU-BUTON din "online.html" va fi completat de conţinutul <canonical> din pagină web

COMENTARIU-LINK din "online.html" va fi completat de conţinutul <canonical> din pagină web

ARTICOL-BEBE din "online.html" va fi completat de conţinutul articolului din pagină web. Conţinutul se află între punctele de reper < ! -- ARTICOL START --> şi < ! -- ARTICOL FINAL -->

5. Trimite email la adresele email specificate

6. Face UNDO la fişierul "online.html" şi salvează.

Puteţi vizualiza întregul cod aici: https://pastebin.com/ANidubsK

import urllib.request
import re
from bs4 import BeautifulSoup
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import shutil

# Acceseaza index.html
url = r"file:///e:/Principal/index.html"

# Descarcă conținutul paginii
response = urllib.request.urlopen(url)
html_content = response.read()

# Selectează link-ul conform pattern-ului specificat
pattern = r'<h3 class="font-weight-normal" itemprop="name"><a href="([\s\S]*?)" class="color-black">'
match = re.search(pattern, html_content.decode())
if match:
    link_url = match.group(1)
    print("Link-ul deschis este:", link_url)  # Afișează link-ul deschis

    # Accesează link-ul
    response = urllib.request.urlopen(link_url)
    link_content = response.read()

    # Extrage cerințele
    soup = BeautifulSoup(link_content, 'html.parser')
    title = soup.title.string
    canonical = soup.find('link', {'rel': 'canonical'})['href']

    # Extrage conținutul articolului
    article_pattern = r'<!-- ARTICOL START -->([\s\S]*?)<!-- ARTICOL FINAL -->'
    article_match = re.search(article_pattern, link_content.decode())
    if article_match:
        article_content = article_match.group(1)

        # Facem backup la fișierul online.html
        shutil.copy2(r"c:\Folder8\online.html", r"c:\Folder8\online_backup.html")

        # Deschide fișierul HTML pentru modificare
        with open(r"c:\Folder8\online.html", "r", encoding='utf-8') as file:
            online_html = file.read()

        # Înlocuiește "TITLU-ARTICOL" cu titlul
        online_html = online_html.replace("TITLU-ARTICOL", title)

        # Înlocuiește "LINK-CANONICAL" cu canonical
        online_html = online_html.replace("LINK-CANONICAL", canonical)

        # Înlocuiește "COMENTARIU-BUTON" cu link-ul canonical
        online_html = online_html.replace("COMENTARIU-BUTON", canonical)

        # Înlocuiește "COMENTARIU-LINK" cu link-ul canonical
        online_html = online_html.replace("COMENTARIU-LINK", canonical)

        # Înlocuiește "ARTICOL-BEBE" cu article_content
        online_html = online_html.replace("ARTICOL-BEBE", article_content)

        print("Fișierul HTML a fost citit cu succes!")

        # Formatează tagurile specifice cu BOLD
        soup_online = BeautifulSoup(online_html, 'html.parser')
        for tag in soup_online.find_all(['p', 'span'], class_=['text_obisnuit', 'text_obisnuit2']):
            if tag.get('class') == ['text_obisnuit']:
                tag.wrap(soup_online.new_tag("span", style="font-weight: normal;"))
            else:
                tag.wrap(soup_online.new_tag("strong"))

        # Actualizează fișierul online.html cu conținutul formatat
        with open(r"c:\Folder8\online.html", "w", encoding='utf-8') as file:
            file.write(str(soup_online))

        print("Fișierul HTML a fost modificat cu succes!")

        # Trimite email-ul (configurat pentru Cpanel )
        sender_email = 'your@email.com'
        sender_password = 'PASWWORD'
        receiver_emails = ['exemple_1@yahoo.com', 'example_2@gmail.com']

        message = MIMEMultipart()
        message['From'] = sender_email
        message['To'] = ', '.join(receiver_emails)
        message['Subject'] = 'Articol'

        message.attach(MIMEText(str(soup_online), 'html'))

        with smtplib.SMTP_SSL('mail.YOUR-DOMAIN.com', 465) as smtp_server:
            smtp_server.login(sender_email, sender_password)
            smtp_server.send_message(message)

        print("Email trimis cu succes!")

        # Restaurăm fișierul online.html din backup
        shutil.copy2(r"c:\Folder8\online_backup.html", r"c:\Folder8\online.html")

        print("Fișierul online.html a fost restaurat din backup!")
    else:
        print("Nu s-a găsit conținutul articolului conform cerinței.")
else:
    print("Nu s-a găsit un link conform cerinței.")


That's all folks.

If you like my code, then make me a favor: translate your website into Romanian, "ro".

Also, you can see other Python Codes: HERE

Alatura-te Comunitatii Neculai Fantanaru
Cele 63 de calităţi ale liderului
Cele 63 de calităţi ale liderului

De ce să citeşti această carte? Pentru că este hotărâtoare pentru optimizarea performanţelor tale. Fiindcă pune accent mai mult pe latura umană decât pe conceptul de business, ceea ce permite cu uşurinţă citirea şi înţelegerea ei.

Leadership - Magia măiestriei
Leadership - Magia măiestriei

Trăsătura esenţială a acestei cărţi, faţă de altele existente pe piaţă din acelaşi domeniu, este aceea că descrie, prin exemple, competenţele ideale ale unui lider. N-am susţinut niciodată că eşte uşor să devii un lider foarte bun, dar dacă veţi urma pas cu pas...

Atingerea maestrului
Atingerea maestrului

Pentru unii lideri „a conduce” înseamnă mai mult a juca un joc de şah, un joc de inteligenţă şi perspicacitate; pentru alţii un joc de noroc, un joc pe care cred că-l pot câştiga mergând de fiecare dată la risc şi pariind totul pe o singură carte.

Leadership Puzzle
Leadership Puzzle

Am scris această carte, care combină într-un mod simplu dezvoltarea personală cu leadershipul, ca pe un joc de puzzle, unde trebuie să combinaţi toate piesele date pentru a reconstitui imaginea de ansamblu.

Performanţa în conducere
Leadership - Pe înţelesul tuturor

Scopul acestei cărţi este de a vă oferi cât mai multe informaţii preţioase prin exemple concrete, şi de a vă arăta o cale prin care să dobândiţi capacitatea de a-i determina pe ceilalţi să vadă lucrurile din aceeaşi perspectivă ca dumneavoastră.

Leadership - Pe înţelesul tuturor
Leadership - Pe înţelesul tuturor

Urmăresc în rândurile acestei cărţi să trezesc interesul omului obişnuit pentru acţiune şi succes. Mesajul acestui volum este că o naţiune puternică este format din oameni puternici şi de succes. Iar fiecare din noi are potenţial, deci succes…