[PYTHON] Enregistrez le texte de toutes les notes Evernote dans SQLite à l'aide de Beautiful Soup et SQL Alchemy

J'ai besoin d'extraire le texte intégral d'Evernote et de publier la méthode que j'ai utilisée à l'époque. Il semble que vous puissiez le faire en utilisant l'API Evernote, mais ce n'est pas tellement, donc c'est gênant. Par conséquent, je vais vous présenter comment sortir toutes les notes au format html et les gratter avec Beautiful Soup.

Sortie de toutes les notes Evernote au format html

Tout d'abord, sélectionnez toutes les notes avec «Commande + A». Exportez les notes à partir de là. evernote-scrape-1.png Sélectionnez html comme format de sortie. evernote-scrape-2.png Cette fois, enregistrez-le sous mynote sur votre bureau.

L'index.html de mynote est l'index de toutes les notes dans le fichier de sortie, et il existe un lien vers chaque fichier html, alors utilisez-le.

Comme procédure

C'est.

Gratter avec une belle soupe

En premier lieu, le grattage consiste à extraire des informations spécifiques d'un site Web. Le fichier que vous avez récupéré précédemment n'est pas un site Web, mais il est au format html afin que vous puissiez le gratter. Il existe plusieurs modules python qui peuvent être récupérés, mais cette fois, j'utiliserai quelque chose appelé Beautiful Soup.

Installez avec Beautiful Soup avec pip.

$ pip install beautifulsoup4

La belle soupe est essentiellement utilisée comme suit.

import urllib2
from bs4 import BeautifulSoup

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

Veuillez consulter le document officiel pour plus de détails. http://www.crummy.com/software/BeautifulSoup/bs4/doc/

Cette fois, nous n'utilisons que soup.get_text (), soup.find_all (" a ") ʻet soup.get (" href ")`.

Enregistrer dans la base de données à l'aide de SQLAlchemy

SQLAlchemy est un mappeur OR, qui est pratique qui vous permet d'interagir avec la base de données sans l'écrire en SQL. Installons avec pip.

$ pip install sqlalchemy

Extraire des phrases d'Evernote

Maintenant que je suis prêt, je vais gratter.

Tout d'abord, créez une fonction qui extrait et renvoie uniquement la phrase après avoir spécifié l'url de la note.

def scrape_evernote(url):
    note_url = "file:///(Répertoire des notes)" + url.encode('utf-8')
    html = urllib2.urlopen(note_url)
    soup = BeautifulSoup(html)
    all_items = soup.get_text()

    return "".join(all_items)

Les trois premières lignes créent un objet BeautifulSoup. ʻAll_items = soup.get_text () pour obtenir le texte complet de l'URL de destination. Dans la partie suivante, les caractères qui peuvent être obtenus par get_text ()` sont inclus dans le tableau caractère par caractère, donc tous les tableaux sont combinés en une chaîne de caractères.

Enregistrez le texte extrait dans SQLite

Ensuite, créez une fonction pour enregistrer le texte extrait dans 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)

    #Créer une session
    Session = sqlalchemy.orm.sessionmaker(bind=engine)
    session = Session()

    #Obtenez l'URL de toutes les notes de l'index
    index_url = "file:///(Répertoire des notes)/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()

Commencez par créer Base. Créez ensuite un modèle de la note.

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

Cette fois, enregistrez simplement le titre et le contenu de la note.

Créez un emplacement de stockage et une session pour SQLite.

Après cela, récupérez le titre et l'url de chaque note dans ʻindex.html`. Liens vers chaque note dans index.html

<a href="URL de la note">Titre de la note</a>

Puisqu'il est configuré comme ʻindex_soup.find_all ("a") , toutes les balises sont acquises. Étant donné que chaque balise est stockée sous forme de tableau, retirez-la et récupérez l'url et le titre de la destination du lien à partir de la balise a. Extrayez le texte de cette URL en utilisant le scrape_evernote ()` créé précédemment. Enfin, validez et enregistrez dans SQLite.

Ceci termine l'extraction.

Si vous souhaitez générer une sortie vers des données txt au lieu d'une sortie avec SQLite

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

    #Obtenez l'URL de toutes les notes de l'index
    index_url = "file:///(Répertoire des notes)/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()

Si oui, c'est possible. Bien sûr, vous pouvez également sortir au format csv.

Résumé

Je l'ai écrit au début, mais la procédure générale est

Il est devenu. Cette fois, il ne s'agissait que de phrases, mais les images sont également enregistrées dans un dossier portant le même nom que le titre de la note. Si vous l'utilisez bien, vous pouvez extraire toutes les images dans evernote.

Recommended Posts

Enregistrez le texte de toutes les notes Evernote dans SQLite à l'aide de Beautiful Soup et SQL Alchemy
J'ai essayé de notifier la mise à jour de "Hameln" en utilisant "Beautiful Soup" et "IFTTT"
J'ai essayé d'extraire et d'illustrer l'étape de l'histoire à l'aide de COTOHA
[Python3] Comprendre les bases de Beautiful Soup
Jouons avec Python Receive et enregistrez / affichez le texte du formulaire de saisie
Enregistrez le tableau numpy dans un fichier wav à l'aide du module wave
Méthodes fréquemment utilisées de sélénium et de belle soupe
Comment rechercher des données HTML à l'aide de Beautiful Soup
J'ai essayé de notifier la mise à jour de "Devenir romancier" en utilisant "IFTTT" et "Devenir un romancier API"
J'ai essayé d'extraire le texte du fichier image en utilisant Tesseract du moteur OCR
Utilisez l'API Spotify pour obtenir toutes les chansons des informations sur les chansons d'Arashi et vérifier l'index
Déterminer et traiter automatiquement l'encodage du fichier texte
Notes personnelles sur l'intégration de vscode et anaconda
L'histoire de l'utilisation de Circleci pour construire des roues Manylinux
Comment connaître le nombre de GPU de python ~ Remarques sur l'utilisation du multitraitement avec pytorch ~