[PYTHON] Speichern Sie den Text aller Evernote-Notizen mit Beautiful Soup und SQL Alchemy in SQLite

Ich muss den vollständigen Text von evernote extrahieren und die Methode verwenden, die ich damals verwendet habe. Es scheint, dass Sie dies mit der Evernote-API tun können, aber es ist nicht so viel, also ist es problematisch. Daher werde ich vorstellen, wie Sie alle Notizen im HTML-Format ausgeben und mit Beautiful Soup kratzen.

Geben Sie alle Evernote-Notizen im HTML-Format aus

Wählen Sie zuerst alle Noten mit "Befehl + A" aus. Exportieren Sie Notizen von dort. evernote-scrape-1.png Wählen Sie HTML als Ausgabeformat. evernote-scrape-2.png Speichern Sie es diesmal als Mynote auf Ihrem Desktop.

Die index.html von mynote ist der Index aller Notizen in der Ausgabedatei, und es gibt einen Link zu jeder HTML-Datei. Verwenden Sie diesen.

Als Prozedur

Das ist.

Kratzen mit schöner Suppe

Beim Scraping werden in erster Linie bestimmte Informationen von einer Website extrahiert. Die Datei, die Sie zuvor gekratzt haben, ist keine Website, sondern im HTML-Format, sodass Sie sie kratzen können. Es gibt mehrere Python-Module, die abgekratzt werden können, aber dieses Mal werde ich etwas verwenden, das sich Schöne Suppe nennt.

Mit schöner Suppe mit Pip installieren.

$ pip install beautifulsoup4

Die schöne Suppe wird grundsätzlich wie folgt verwendet.

import urllib2
from bs4 import BeautifulSoup

html = urllib2.urlopen("http://~ ~ ~")
soup = BeautifulSoup(html)
scrape = soup.find_all("a")

Weitere Informationen finden Sie im offiziellen Dokument. http://www.crummy.com/software/BeautifulSoup/bs4/doc/

Diesmal werden nur "oup.get_text () ", "oup.find_all (" a ")" und "oup.get ("href") "verwendet.

Mit SQLAlchemy in der Datenbank speichern

SQLAlchemy ist ein OR-Mapper, mit dem Sie bequem mit der Datenbank interagieren können, ohne sie in SQL zu schreiben. Lassen Sie uns mit pip installieren.

$ pip install sqlalchemy

Extrahieren Sie Sätze aus Evernote

Jetzt, wo ich fertig bin, werde ich kratzen.

Erstellen Sie zunächst eine Funktion, die nur den Satz extrahiert und zurückgibt, nachdem Sie die URL der Notiz angegeben haben.

def scrape_evernote(url):
    note_url = "file:///(Verzeichnis notieren)" + url.encode('utf-8')
    html = urllib2.urlopen(note_url)
    soup = BeautifulSoup(html)
    all_items = soup.get_text()

    return "".join(all_items)

Die ersten drei Zeilen erstellen ein BeautifulSoup-Objekt. Den vollständigen Text des URL-Ziels erhalten Sie mit all_items =oup.get_text (). In dem darauf folgenden Teil werden die Zeichen, die mit get_text () abgerufen werden können, zeichenweise in das Array aufgenommen, sodass alle Arrays zu einer Zeichenfolge zusammengefasst werden.

Speichern Sie den extrahierten Text in SQLite

Erstellen Sie als Nächstes eine Funktion zum Speichern des extrahierten Texts in SQLite.

def scrape_and_save2sql():
    Base = sqlalchemy.ext.declarative.declarative_base()

    class Evernote(Base):
        __tablename__ = 'mynote'
        id = sqlalchemy.Column(sqlalchemy.Integer, primary_key=True)
        title = sqlalchemy.Column(sqlalchemy.String)
        note = sqlalchemy.Column(sqlalchemy.String)

    db_url = "sqlite+pysqlite:///evernote.sqlite3"
    engine = sqlalchemy.create_engine(db_url, echo=True)

    Base.metadata.create_all(engine)

    #Erstellen Sie eine Sitzung
    Session = sqlalchemy.orm.sessionmaker(bind=engine)
    session = Session()

    #Holen Sie sich die URL aller Notizen aus dem Index
    index_url = "file:///(Verzeichnis notieren)/index.html"
    index_html = urllib2.urlopen(index_url)
    index_soup = BeautifulSoup(index_html)
    all_url = index_soup.find_all("a")

    for note_url in all_url:
        title = note_url.get_text()
        note = scrape_evernote(note_url.get("href"))
        evernote = Evernote(title=title, note=note)
        session.add(evernote)

    session.commit()

Erstellen Sie zunächst "Base". Erstellen Sie dann ein Modell der Notiz.

class Evernote(Base):
    __tablename__ = 'mynote'
    id = sqlalchemy.Column(sqlalchemy.Integer, primary_key=True)
    title = sqlalchemy.Column(sqlalchemy.String)
    note = sqlalchemy.Column(sqlalchemy.String)

Speichern Sie diesmal einfach den Titel und den Inhalt der Notiz.

Erstellen Sie einen Speicherort und eine Sitzung für SQLite.

Danach erhalten Sie den Titel und die URL jeder Notiz aus index.html. Links zu jeder Notiz in index.html

<a href="URL notieren">Titel notieren</a>

Da es als konfiguriert ist, erhalten Sie alle Tags mit index_soup.find_all (" a "). Da jedes Tag als Array gespeichert ist, nehmen Sie es heraus und holen Sie die URL und den Titel des Linkziels aus dem a-Tag. Extrahieren Sie den Text aus dieser URL mit der zuvor erstellten scrape_evernote (). Zum Schluss festschreiben und in SQLite speichern.

Damit ist die Extraktion abgeschlossen.

Wenn Sie in txt-Daten anstatt in SQLite ausgeben möchten

def scrape_and_save2txt():
    file = open('evernote_text.txt', 'w')

    #Holen Sie sich die URL aller Notizen aus dem Index
    index_url = "file:///(Verzeichnis notieren)/index.html"
    index_html = urllib2.urlopen(index_url)
    index_soup = BeautifulSoup(index_html)
    all_url = index_soup.find_all("a")

    for note_url in all_url:
        title = note_url.get_text()
        file.write(title)
        note = scrape_evernote(note_url.get("href"))
        file.write(note)

    file.close()

Wenn ja, ist es möglich. Natürlich können Sie auch im CSV-Format ausgeben.

Zusammenfassung

Ich habe es am Anfang geschrieben, aber das allgemeine Verfahren ist

Es ist geworden. Diesmal waren es nur Sätze, aber die Bilder werden auch in einem Ordner mit demselben Namen wie der Titel in der Notiz gespeichert. Wenn Sie dies gut verwenden, können Sie alle Bilder in evernote extrahieren.

Recommended Posts

Speichern Sie den Text aller Evernote-Notizen mit Beautiful Soup und SQL Alchemy in SQLite
Ich habe versucht, das Update von "Hameln" mit "Beautiful Soup" und "IFTTT" zu benachrichtigen.
Ich habe versucht, die Phase der Geschichte mit COTOHA zu extrahieren und zu veranschaulichen
[Python3] Verstehe die Grundlagen von Beautiful Soup
Lassen Sie uns mit Python Receive spielen und den Text des Eingabeformulars speichern / anzeigen
Speichern Sie das numpy-Array mithilfe des Wave-Moduls in einer WAV-Datei
Häufig verwendete Methoden von Selen und schöner Suppe
So suchen Sie HTML-Daten mit Beautiful Soup
Ich habe versucht, das Update von "Werde ein Romanautor" mit "IFTTT" und "Werde ein Romanautor API" zu benachrichtigen.
Ich habe versucht, den Text in der Bilddatei mit Tesseract der OCR-Engine zu extrahieren
Verwenden Sie die Spotify-API, um alle Songs von Arashis Songinformationen abzurufen und den Index zu überprüfen
Ermitteln und verarbeiten Sie die Codierung der Textdatei automatisch
Persönliche Hinweise zur Integration von vscode und anaconda
Die Geschichte der Verwendung von Circleci zum Bau vieler Linux-Räder
Wie man die Anzahl der GPUs aus Python kennt ~ Hinweise zur Verwendung von Multiprocessing mit pytorch ~