"Scraping & maschinelles Lernen mit Python" Lernnotiz

Einführung

Lernnotizen aus den Kapiteln 1 bis 3 von "Scraping & Machine Learning with Python". Die Themen zum Scraping reichen von Kapitel 1 bis Kapitel 3. Das vierte und die folgenden Kapitel sind der Teil des maschinellen Lernens.

Kapitel 1

1-1. Daten herunterladen

Was ist die Urllib-Bibliothek?

Ein Paket von Modulen, die URLs verarbeiten. Unten finden Sie ein Beispiel für die Methode.

--urlretrieve () ・ ・ ・ Daten direkt herunterladen (Dateien werden lokal gespeichert) --urlopen () ・ ・ ・ In Erinnerung bleiben. Wenn Sie es per FTP erhalten möchten, ändern Sie einfach den Parameter https: //, der an urlopen () übergeben wurde, in ftp: //

Wenn Sie eine Anforderung mit get-Parametern senden möchten, erstellen Sie Schlüssel- / Wertparameterdaten mit Variablen vom Typ Wörterbuch.

Verwenden Sie das Modul urllib.parse, um Variablen per URL zu codieren. Fügen Sie die codierte Variable zur URL-Zeichenfolge hinzu (vergessen Sie nicht das "?" Dazwischen).

Importieren Sie das sys-Modul, um Befehlszeilenargumente abzurufen.

1-2. Kratzen mit schöner Suppe

Was ist schöne Suppe?

Eine Bibliothek, die HTML und XML analysiert. Daten können nicht heruntergeladen werden. Wenn Sie es herunterladen möchten, verwenden Sie urllib.

Was ist pip?

Python-Paketverwaltungssystem.

Was ist PyPI?

Abkürzung für Python Package Index.

Es gibt verschiedene Möglichkeiten, HTML-Elemente abzurufen

Wenn Sie die HTML-Struktur und die Grundlagen von CSS kennen, können Sie grundsätzlich alle Daten abrufen. Wenn sich die Seitenstruktur jedoch ändert, muss sie korrigiert werden.

1-3 Informationen zur CSS-Auswahl

Beispiel: Natsume Sosekis Seite von Aozora Bunko https://www.aozora.gr.jp/index_pages/person148.html

Die mit dem CSS-Selektor für das Li-Tag oben in der Arbeitsliste erzielten Ergebnisse sind wie folgt.

body > ol:nth-child(8) > li:nth-child(1)

n-tes Kind (n) ・ ・ ・ Bedeutung des n-ten Elements

Auf der Arbeitsseite wird das Tag \

    nicht anderweitig verwendet. In diesem Fall kann der Teil ol: nth-child (8) weggelassen werden.

    Wenn Sie einen eleganten CSS-Selektor schreiben, können Sie ein bestimmtes Element auf einmal abrufen.

    ** Es ist wichtig, sich das Format des Selektors zu merken. Entspricht dem Erinnern an reguläre Ausdrücke ** </ font>

    Das Merkmal der find () -Methode besteht darin, dass mehrere Bedingungen gleichzeitig angegeben werden können.

    Es ist auch möglich, Elemente in Kombination mit regulären Ausdrücken zu extrahieren.

    1-4. Laden Sie den gesamten Link herunter

    Wenn das Verknüpfungsziel des Tags \ ein relativer Pfad ist, konvertieren Sie es mit der Methode urllib.parse.urljoin () in einen absoluten Pfad.

    Um das Ganze herunterzuladen, müssen Sie den Link rekursiv herunterladen.

    Importieren Sie das Modul re, um reguläre Ausdrücke zu verwenden.

    Kapitel 2

    2-1. Download von Websites, für die eine Anmeldung erforderlich ist

    Ein Paket namens Anfragen ist praktisch für den Zugriff mit Cookies.

    Starten Sie eine Sitzung mit der Methode request.session ().

    Verwenden Sie das Entwicklertool des Browsers, um die beim Anmelden gesendeten Daten zu überprüfen.

    Überprüfen Sie auf der Registerkarte "Netzwerk" der Entwicklertools. Um die übermittelten Formulardaten anzuzeigen, aktivieren Sie "Formulardaten" auf der Registerkarte "Kopfzeile".

    2-2. Scraping über den Browser

    "Selen" ist bekannt als Tool zur Fernsteuerung eines Webbrowsers.

    Wenn Sie es ohne Kopf (ohne Bildschirmanzeige) über die Befehlszeile verwenden, wird der Browser nicht einzeln gestartet.

    Neben Chrome, Firefox, Opera usw. können auch iOS- und Android-Browser betrieben werden.

    Wenn Sie mit Selen zugreifen, entspricht dies dem Zugriff mit einem Browser, sodass Sie die Sitzung nicht verwalten müssen.

    Mit Selen kann man ziemlich viel machen. Die meisten menschlichen Operationen im Browser können automatisch ausgeführt werden.

    Wenn Sie die Methode execute_script () verwenden, können Sie außerdem ein beliebiges js ausführen.

    Vorteile von Selen

    • Sie können DOM-Elemente in HTML-Seiten frei bearbeiten → Sie können beispielsweise dekorative Elemente entfernen, die nicht mit dem Element zusammenhängen, das Sie im Voraus erwerben möchten.
    • Sie können die Javascript-Funktion auf der Seite jederzeit aufrufen. → Sie können beliebige Daten auf der Seite abrufen

    2-3. Dojo abkratzen

    Da Wikipedia das Crawlen verbietet, ist direktes Scraping NG. Es gibt eine Site, auf der Sie stattdessen Speicherauszugsdaten abrufen können. Verwenden Sie diese Daten.

    
    for row in result:
        print("," .join(row))
    

    Über die Methode von BeautifulSoup

    --find_all () ・ ・ ・ Wenn Sie der Methode eine Liste geben, können Sie mehrere Tags gleichzeitig abrufen. --find_elements_by_css_selector () elements ・ elements "Elemente" und ** Plural **, also mehrere Elemente gleichzeitig erhalten --find_element_by_css_selector () element ・ element "Element" und ** Singularform **, also immer nur ein Element gleichzeitig. Wenn Sie diese Methode mit der Absicht aufrufen, mehrere zu erfassen, handelt es sich nicht um einen Grammatikfehler, sie funktioniert jedoch nicht wie erwartet. Seien Sie also vorsichtig.

    Sie können einen Screenshot auch mit der Methode browser.save_screenshot () erstellen. Dies ist nützlich, wenn Sie wissen möchten, wie der tatsächliche Bildschirm im Headless-Modus aussieht.

    Es gibt viele Teile des Schabens, die nur durch tatsächliches Testen verstanden werden können. Überlegen Sie, welche Art von Operation möglich ist, während Sie den tatsächlichen Bildschirm (HTML) analysieren.

    ** Es ist wichtig, die Struktur der Site zu verstehen. Außerdem sind CSS-Kenntnisse erforderlich. ** </ font>

    2-4 Datenerfassung über die Web-API

    Was ist die Web-API (Web Application Programming Interface)?

    Eine Funktion einer Site wird veröffentlicht, damit sie von außen verwendet werden kann. Kommunizieren Sie über HTTP-Kommunikation und erfassen Sie Daten im XML- oder JSON-Format.

    Beachten Sie, dass sich die Spezifikationen der Web-API aufgrund der Benutzerfreundlichkeit der Betriebsseite ändern können.

    format () Methode

    Ein Teil der Zeichenfolge kann später als variabler Wert geändert werden.

    (Beispiel)

    
    str = "hogehoge{name}fugafuga"
    str.format(name="Eric Clapton")
    

    Was ist ein Lambda-Ausdruck?

    ** Funktionsname = Lambda Argument: Inhalt verarbeiten ** Eine Funktion, die im Format geschrieben werden kann. (Beispiel)

    
    k2c = lambda k: k - 273.5
    

    2-5. Cron und regelmäßiges Krabbeln

    MacOS und Linux verwenden einen Daemon-Prozess namens "cron". Verwenden Sie "Task Scheduler" unter Windows.

    Was ist ein Daemon?

    Ein Programm, das sich in einem UNIX-basierten Betriebssystem im Hauptspeicher befindet und eine bestimmte Funktion bietet. Eine Art Hintergrundprozess, der unabhängig von Benutzeroperationen verarbeitet wird.

    ** Periodische Hauptverarbeitung **

    1. Datenerfassung
    2. Sicherung, Protokollsicherung
    3. Überwachung von Leben und Tod

    Um cron einzustellen, führen Sie den Befehl "crontab" aus und bearbeiten Sie die dort geöffnete Datei. Wenn Sie cron auf einem Mac bearbeiten möchten, ist der Nano-Editor praktisch.

    2-6 Schaben mit Scrapy

    Was ist Scrapy?

    Ein Rahmen zum Crawlen und Schaben.

    ** Grundlegender Arbeitsablauf **

    1. Erstellen Sie ein Projekt mit dem Befehl Scrapy
    2. Schreiben Sie die Spider-Klasse, um einen Crawling- und Datenerfassungsprozess zu erstellen
    3. Führen Sie Scrapy über die Befehlszeile aus

    Erstellen Sie eine Unterklasse, die die Spider-Klasse erbt. Der Ort ist das Spinnenverzeichnis.

    Hauptmethoden der Spinnenklasse

    --parse () ・ ・ ・ Beschreibt den Analyseprozess des Textes, der nach der Datenerfassung ausgeführt werden soll. --css () ・ ・ ・ Extrahieren Sie DOM-Elemente mit dem CSS-Selektor --extract () ・ ・ ・ Liefert mehrere darin enthaltene Elemente im Listenformat --extract_first () ・ ・ ・ Eine Methode, die das erste im Ergebnis enthaltene Element zurückgibt

    Beispiel für einen Scrapy-Ausführungsbefehl

    scrapy crawl soseki --nolog
    

    Wenn "--nolog" beschrieben wird, wird das Operationsprotokoll weggelassen. Wenn nicht angehängt, wird das Betriebsprotokoll an die Konsole ausgegeben.

    Der Rückgabewert der Methode ist Yield. Die Regel ist, nach Rendite statt nach Rendite zurückzukehren.

    • Bedeutung des Ertrags: gebären, bringen, gebären, Ursache

    Was ist eine kratzende Schale?

    Eine Shell, die Scrapy interaktiv ausführen kann. Dies ist nützlich, wenn Sie überprüfen möchten, ob Daten mit dem CSS-Selektor korrekt erfasst werden können.

    2-7. Laden Sie alle Werke von Natsume Soseki mit Scrapy herunter

    Ein Befehl zum Erstellen einer Unterklasse der Spider-Klasse.

    scrapy genspider soseki3 www.aozora.gr.jp
    

    Die parse () -Methode wird automatisch aufgerufen, nachdem die in start_urls angegebene URL abgerufen wurde.

    Verwenden Sie die Methode response.follow (), um die verknüpfte Seite abzurufen.

    Verwenden Sie zum Herunterladen der Datei die Methoderapy.Request (). Sie können die Methode nach Abschluss der Verarbeitung im Rückrufparameter angeben.

    2-8 Laden Sie eine dynamische Website mit Scrapy und Selen herunter

    Scrapy kann seine Funktionalität durch die Einführung von Middleware erweitern. Der Mechanismus kann eingeführt werden, um Selen einzubauen.

    ** Format wenn angegeben ** (Name des Projektverzeichnisses). (Name der Middleware-Datei). (Name der Middleware-Klasse)

    
    #Beispiel für die Registrierung von Middleware
    custom_settings = {
        "DOWNLOADER_MIDDLEWARES": {
            "sakusibbs.selenium_middleware.SeleniumMiddleware": 0
        }
    }
    

    Die Methode start_requests () ist eine Methode, die die Verarbeitung definiert, die unmittelbar vor der Anforderung automatisch ausgeführt wird.

    Kapitel 3

    3-1. Webdaten liegen in verschiedenen Formaten vor

    Es gibt zwei Arten von Daten, die im Web verteilt werden: Textdaten und Binärdaten.

    • Textdaten Formatbeispiel: Textdatei, XML, JSON, YAML, CSV Textdaten müssen unter Berücksichtigung des Zeichencodes und der Codierung programmiert werden.

    --Binärdaten Formatbeispiel: Bild (PNG, JPEG, GIF usw.), Excel-Format Die Datengröße ist kleiner als die Textdaten.

    Bitte beachten Sie, dass die URL der Daten zur Katastrophenverhütung von Yokohama City im Buch geändert wurde. Stand 22. Oktober 2020: https://www.city.yokohama.lg.jp/kurashi/bousai-kyukyu-bohan/bousai-saigai/bosai/data/data.files/0006_20180911.xml

    Beachten Sie, dass beim Parsen von XML mit BeautifulSoup alle Großbuchstaben in Kleinbuchstaben konvertiert werden.

    (Beispiel)

    
    <LocationInformation>
    	<Type>Regionale Katastrophenschutzbasis</Type>
    	<Definition>Es ist eine Basis, die mit einem Ort für die Evakuierung der betroffenen Bewohner, Informationsübertragung und -übertragung sowie Speicherfunktionen ausgestattet ist.</Definition>
    	<Name>Rohweizen Grundschule</Name>
    	<Address>4-15 Rohe Gerste, Tsurumi-ku, Stadt Yokohama, Präfektur Kanagawa-1</Address>
    	<Lat>35.49547584</Lat>
    	<Lon>139.6710972</Lon>
    	<Kana>Namamugi Shogakko</Kana>
    	<Ward>Tsurumi Ward</Ward>
    	<WardCode>01</WardCode>
    </LocationInformation>
    

    Wenn Sie "Standortinformationen" aus den oben genannten Daten erhalten möchten, ist dies wie folgt.

    Falsch :oup.find_all ("LocationInformation"): Richtig :oup.find_all ("Standortinformationen"):

    Wenn Sie mit Excel-Dateien arbeiten, installieren Sie xlrd zusätzlich zu openpyxl.

    3-2. Über die Datenbank

    Python unterstützt verschiedene DBs. SQLite ist in die Standardbibliothek integriert und kann sofort durch Importieren von sqlite3 verwendet werden.

    in Buch P160 ist falsch.

    Die Installation ist im Voraus erforderlich, um MySQL verwenden zu können. Installation mit apt-get in einer Linux-Umgebung. Für Mac und Windows ist es praktisch, MAMP zu installieren, das auch das MySQL-Verwaltungstool "phpMyAdmin" enthält.

    Unterschied in der Angabe variabler Elemente in SQL.

    --SQLite ...? --MySQL ・ ・ ・% s

    Was ist MongoDB?

    Eine der Dokumenttypdatenbanken. Das relationale Datenbankverwaltungssystem (RDBMS) erfordert eine Schemadefinition mit CREATE TABLE, für die Dokumenttypdatenbank ist jedoch keine Schemadefinition erforderlich.

    Was ist TinyDB?

    Eine Bibliothek zur Verwendung dokumentenorientierter Datenbanken. Es ist einfacher von Python als MongoDB zu verwenden. (MongoDB erfordert die Installation von MongoDB selbst, aber TinyDB kann verwendet werden, indem das Paket mit pip installiert wird.)

    Wenn Sie mit Daten einer bestimmten Größe arbeiten, ist MongoDB besser geeignet.

    Recommended Posts