Erste Schritte mit Python Web Scraping Practice

Ich möchte eine Einführung in die Praxis des Web Scraping mit Python schreiben.

Mit Ausnahme des allgemeinen Teils möchte ich einen Stil wählen, der das Fühlen versteht.

Dinge die zu tun sind

Schließlich: "Greifen Sie stündlich auf den Nihon Keizai Shimbun zu und notieren Sie den durchschnittlichen Nikkei-Aktienkurs zu diesem Zeitpunkt in CSV."

Ich möchte ein Programm machen.

Hinweis

Es ist eine Notiz. Lesen Sie es sorgfältig. [Fall der Zentralbibliothek der Stadt Okazaki (Librahack-Fall) - Wikipedia](https://ja.wikipedia.org/wiki/%E5%B2%A1%E5%B4%8E%E5%B8%82%E7%AB%8B % E4% B8% AD% E5% A4% AE% E5% 9B% B3% E6% 9B% B8% E9% A4% A8% E4% BA% 8B% E4% BB% B6) Liste der Vorsichtsmaßnahmen für das Web-Scraping

Was benutzt du

Sprache: Python 2.7.12 Bibliotheken: urllib2, BeautifulSoup, csv, datetime, time

urllib2 ist erforderlich, um auf die URL zuzugreifen. BeautifulSoup ist wie ein XML-Parser, der die Dateien öffnet, auf die Sie zugreifen und die Sie erhalten Diese Bibliothek wird benötigt, wenn Sie mit CSV-Dateien arbeiten. datetime ist eine Bibliothek zum Abrufen von Zeit

Bibliotheksinstallation

urllib2 wird installiert, wenn Sie Python installieren. Verwenden Sie den Befehl pip, um Beautiful Soup zu installieren

shell.sh


$ pip install beautifulsoup4

Lassen Sie uns den Seitentitel von Nihon Keizai Shimbun als Ausgangspunkt nehmen!

Greifen Sie zunächst mit Python auf den Nihon Keizai Shimbun zu und holen Sie sich den HTML-Code.

Machen Sie es danach zu einer Form, die von Beautiful Soup verarbeitet werden kann.

Der Seitentitel wird aus dem Formular abgerufen, das verarbeitet und ausgegeben werden kann.

Auch dieses Mal kann es schwierig sein, das Bild zu verstehen, wenn Sie nur den Titel der Seite erhalten. Daher möchte ich das Titelelement und den Titel aus den Titelelementen erhalten.

getNikkeiWebPageTitle.py


# coding: UTF-8
import urllib2
from bs4 import BeautifulSoup

#URL für den Zugriff
url = "http://www.nikkei.com/"

#HTML für den Zugriff auf die URL wird zurückgegeben →<html><head><title>Wirtschafts-, Aktien-, Geschäfts- und politische Nachrichten:Nikkei elektronische Version</title></head><body....
html = urllib2.urlopen(url)

#Behandeln Sie HTML mit schöner Suppe
soup = BeautifulSoup(html, "html.parser")

#Holen Sie sich das Titelelement →<title>Wirtschafts-, Aktien-, Geschäfts- und politische Nachrichten:Nikkei elektronische Version</title>
title_tag = soup.title

#Elementzeichenfolge abrufen → Wirtschafts-, Aktien-, Geschäfts- und politische Nachrichten:Nikkei elektronische Version
title = title_tag.string

#Titelelement ausgeben
print title_tag

#Titel als Zeichenfolge ausgeben
print title

Wenn Sie dies tun, werden die folgenden Ergebnisse zurückgegeben:

shell.sh


$ python getNikkeiWebPageTitle.py
<title>Wirtschafts-, Aktien-, Geschäfts- und politische Nachrichten:Nikkei elektronische Version</title>
Wirtschafts-, Aktien-, Geschäfts- und politische Nachrichten:Nikkei elektronische Version

Apropos

print.py


print soup.title.string

Ähnliche Ergebnisse können auch in diesem Fall erhalten werden.

Ich denke, Sie haben eine ungefähre Vorstellung davon.

Trainieren!

Das Ziel dieses Mal ist es, "stündlich auf den Nihon Keizai Shimbun zuzugreifen und den durchschnittlichen Aktienkurs von Nikkei zu diesem Zeitpunkt in CSV aufzuzeichnen". Wenn Sie den Programmablauf überprüfen

  1. Rufen Sie die Seite mit den durchschnittlichen Nikkei-Aktienkursen des Nihon Keizai Shimbun auf und holen Sie sich den HTML-Code
  2. Ermitteln Sie den durchschnittlichen Aktienkurs von Nikkei mit Beautiful Soup
  3. Beschreiben Sie Datum, Uhrzeit und den durchschnittlichen Aktienkurs von Nikkei in einem Datensatz in csv

Header wird nicht für CSV verwendet.

Machen wir das.

Greifen Sie auf die Seite mit den durchschnittlichen Aktienkursen von Nikkei zu

Rufen Sie zunächst die Seite mit dem durchschnittlichen Aktienkurs von Nikkei auf.

Die Theorie ist, die URL im Voraus selbst im Browser nachzuschlagen.

Wenn Sie es nachschlagen, finden Sie es auf der Seite "Nihon Keizai Shimbun-> Market-> Stock".

Ich werde das vorherige Programm verwenden

getNikkeiHeikin.py


# coding: UTF-8
import urllib2
from bs4 import BeautifulSoup

#URL für den Zugriff
url = "http://www.nikkei.com/markets/kabu/"

#HTML für den Zugriff auf die URL wird zurückgegeben →<html><head><title>Wirtschafts-, Aktien-, Geschäfts- und politische Nachrichten:Nikkei elektronische Version</title></head><body....
html = urllib2.urlopen(url)

#Behandeln Sie HTML mit schöner Suppe
soup = BeautifulSoup(html, "html.parser")

#Titel als Zeichenfolge ausgeben
print soup.title.string

Dies gibt den Titel aus.

shell.sh


$ python getNikkiHeikin.py
>>Lagerbestand: Markt: Nikkei elektronische Version

Nikkei durchschnittliche Aktienkursakquisition

Als nächstes erhalten Sie den durchschnittlichen Aktienkurs von Nikkei.

Lassen Sie uns Nihon Keizai Shimbun> Markt> Aktie in Ihrem Browser öffnen.

Der durchschnittliche Aktienkurs von Nikkei ist von oben nach unten auf dieser Seite aufgeführt.

Um dies zu erreichen, müssen wir den Speicherort dieser Daten in HTML finden.

Klicken Sie mit der rechten Maustaste auf den durchschnittlichen Aktienkurs von Nikkei und klicken Sie auf "Überprüfen".

Dann denke ich, dass der Bildschirm so aussehen wird

スクリーンショット 2016-12-01 17.59.17.png

Class = "mkc-stock_prices" im span-Element.

Jetzt kennen Sie die Position.

Lassen Sie uns tatsächlich mit Beautiful Soup drucken.

getNikeiHeikin.py


# coding: UTF-8
import urllib2
from bs4 import BeautifulSoup

#URL für den Zugriff
url = "http://www.nikkei.com/markets/kabu/"

#HTML für den Zugriff auf die URL wird zurückgegeben →<html><head><title>Wirtschafts-, Aktien-, Geschäfts- und politische Nachrichten:Nikkei elektronische Version</title></head><body....
html = urllib2.urlopen(url)

#Behandeln Sie HTML mit schöner Suppe
soup = BeautifulSoup(html, "html.parser")

#Alle Span-Elemente extrahieren → Alle Span-Elemente werden im Array zurückgegeben →[<span class="m-wficon triDown"></span>, <span class="l-h...
span = soup.find_all("span")

#Deklarieren Sie es zuerst, damit beim Drucken kein Fehler auftritt.
nikkei_heikin = ""
#Klasse von allen Span-Elementen für Minuten="mkc-stock_prices"Suchen Sie nach dem, der geworden ist
for tag in span:
    #Elemente, für die keine Klasse festgelegt ist, sind Tags.get("class").pop(0)Vermeiden Sie den Fehler mit try, da dies zu einem Fehler führt, da dies nicht möglich ist
    try:
        #Klasse vom Tag="n"Extrahieren Sie die n-Zeichenfolge von. Da können mehrere Klassen gesetzt werden
        #Die Funktion get gibt als Array zurück. Also die Array-Funktion Pop(0)Entfernt den Anfang der Sequenz um
        # <span class="hoge" class="foo">  →   ["hoge","foo"]  →   hoge
        string_ = tag.get("class").pop(0)

        #Mkc in der extrahierten Klassenzeichenfolge-stock_Überprüfen Sie, ob es als Preise festgelegt ist
        if string_ in "mkc-stock_prices":
            # mkc-stock_Da die Preise festgelegt sind, wird die Zeichenfolge in Tags eingeschlossen.Beginnen Sie mit einer Zeichenfolge
            nikkei_heikin = tag.string
            #Da die Extraktion abgeschlossen ist, werde ich für Minuten beenden
            break
    except:
        #Pfad → Nichts tun
        pass

#Gibt den extrahierten durchschnittlichen Nikkei-Aktienkurs aus.
print nikkei_heikin

Ergebnis

shell.sh


$ python getNikeiHeikin.py
>>18,513.12

Die Erklärung des Codes wird grundsätzlich in den Kommentar eingefügt

Um den Fluss einfach auszudrücken

  1. Gehen Sie zu Nihon Keizai Shimbun> Markt> Aktien und holen Sie sich HTML
  2. Da der durchschnittliche Aktienkurs von Nikkei von Span-Elementen umgeben ist, werden alle Span-Elemente in HTML extrahiert.
  3. Stellen Sie sicher, dass "mkc-stock_prices" für jedes span-Element auf class gesetzt ist.
  4. Wenn die festgelegte Klasse gefunden wurde, rufen Sie den Wert mit .string ab und beenden Sie ihn für Minuten
  5. Drucken Sie den erhaltenen Wert

Es ist ein Fluss.

Der Ablauf dieses Programms kann in den meisten Situationen verwendet werden Der Vorteil ist, dass es nicht so schwierig ist und in den meisten Situationen angewendet werden kann. Wenn sich das span-Element in ein anderes Element ändert oder sich der Inhalt der Klasse ändert, kann es nicht ausgegeben werden.

Wiederholen und CSV-Ausgabe

Geben Sie dieses Ergebnis an csv aus und wiederholen Sie es jede Stunde

getNikeiHeikin.py


# coding: UTF-8
import urllib2
from bs4 import BeautifulSoup
from datetime import datetime
import csv
import time

time_flag = True

#Lass es für immer laufen
while True:
    #Wenn die Zeit nicht 59 Minuten beträgt, warten Sie 58 Sekunden
    if datetime.now().minute != 59:
        #1 Minute, weil es nicht 59 Minuten sind(58 Sekunden)Warten Sie eine Weile(誤差がないとは言い切れないので58 Sekundenです)
        time.sleep(58)
        continue
    
    #Öffnen Sie csv im Append-Modus → Öffnen Sie csv hier, da das Öffnen von csv einige Zeit in Anspruch nimmt, wenn die Datei groß wird
    f = open('nikkei_heikin.csv', 'a')
    writer = csv.writer(f, lineterminator='\n')

    #Es sind 59 Minuten, aber ich kann erst in Sekundenschnelle nach 59 Sekunden aussteigen, um zur richtigen Zeit zu messen.
    while datetime.now().second != 59:
            #Warten Sie 1 Sekunde, da es nicht 00 Sekunden sind
            time.sleep(1)
    #Der Vorgang wird schnell abgeschlossen und zweimal wiederholt. Warten Sie hier eine Sekunde.
    time.sleep(1)

    #Erstellen Sie einen Datensatz, der in csv beschrieben werden soll
    csv_list = []

    #Holen Sie sich die aktuelle Zeit in Jahr, Monat, Tag, Stunde, Minute, Sekunde
    time_ = datetime.now().strftime("%Y/%m/%d %H:%M:%S")
    #Fügen Sie die Zeit in die erste Spalte ein
    csv_list.append(time_)

    #URL für den Zugriff
    url = "http://www.nikkei.com/markets/kabu/"

    #HTML für den Zugriff auf die URL wird zurückgegeben →<html><head><title>Wirtschafts-, Aktien-, Geschäfts- und politische Nachrichten:Nikkei elektronische Version</title></head><body....
    html = urllib2.urlopen(url)

    #Behandeln Sie HTML mit schöner Suppe
    soup = BeautifulSoup(html, "html.parser")

    #Alle Span-Elemente extrahieren → Alle Span-Elemente werden im Array zurückgegeben →[<span class="m-wficon triDown"></span>, <span class="l-h...
    span = soup.find_all("span")

    #Deklarieren Sie es zuerst, damit beim Drucken kein Fehler auftritt.
    nikkei_heikin = ""
    #Klasse von allen Span-Elementen für Minuten="mkc-stock_prices"Suchen Sie nach dem, der geworden ist
    for tag in span:
        #Elemente, für die keine Klasse festgelegt ist, sind Tags.get("class").pop(0)Vermeiden Sie den Fehler mit try, da dies zu einem Fehler führt, da dies nicht möglich ist
        try:
            #Klasse vom Tag="n"Extrahieren Sie die n-Zeichenfolge von. Da können mehrere Klassen gesetzt werden
            #Die Funktion get gibt als Array zurück. Also die Array-Funktion Pop(0)Entfernt den Anfang der Sequenz um
            # <span class="hoge" class="foo">  →   ["hoge","foo"]  →   hoge
            string_ = tag.get("class").pop(0)

            #Mkc in der extrahierten Klassenzeichenfolge-stock_Überprüfen Sie, ob es als Preise festgelegt ist
            if string_ in "mkc-stock_prices":
                # mkc-stock_Da die Preise festgelegt sind, wird die Zeichenfolge in Tags eingeschlossen.Beginnen Sie mit einer Zeichenfolge
                nikkei_heikin = tag.string
                #Da die Extraktion abgeschlossen ist, werde ich für Minuten beenden
                break
        except:
            #Pfad → Nichts tun
            pass

    #Der extrahierte durchschnittliche Nikkei-Aktienkurs wird im Laufe der Zeit ausgegeben.
    print time_, nikkei_heikin
    #Notieren Sie den Nikkei-Durchschnitt in der zweiten Spalte
    csv_list.append(nikkei_heikin)
    #Zu csv hinzufügen
    writer.writerow(csv_list)
    #Schließen, um eine Beschädigung der Datei zu verhindern
    f.close()

Im Fluss sprechen

  1. Warten Sie bis n: 00
  2. Öffnen Sie csv
  3. Datensatz erstellen
  4. Holen Sie sich Nikkei durchschnittlichen Aktienkurs
  5. Zum Datensatz hinzufügen
  6. Schreiben Sie den Datensatz in csv

Deshalb

Wenn Sie dies weiterhin tun, wird einmal pro Stunde darauf zugegriffen, um den Nikkei-Durchschnitt zu ermitteln und aufzuzeichnen.

Sie können alles tun, indem Sie dies anwenden

Beispielsweise können Sie zum Zeitpunkt des Verkaufs in einem langen Fluss in Südamerika einen Wagen mit hoher Geschwindigkeit (sogenannte Skriptgruppe) hinzufügen. .. ..

Ich empfehle es nicht sehr

Dann!

Auch hier

Sammlung von Python-Web-Scraping-Techniken "Es gibt keinen Wert, der nicht abgerufen werden kann" JavaScript-Unterstützung [10.000 Anfragen pro Sekunde !?] Explosives Web-Scraping beginnend mit der Sprache Go [Golang] [Für Anfänger] Betreff: Genetischer Algorithmus ab Null [Künstliche Intelligenz]

Recommended Posts

Erste Schritte mit Python Web Scraping Practice
Erste Schritte mit Python-Webanwendungen
1.1 Erste Schritte mit Python
Erste Schritte mit Python
Üben des Web-Scrapings mit Python und Selen
Web Scraping mit Python + JupyterLab
Erste Schritte mit Python Django (1)
Erste Schritte mit Python Django (4)
Erste Schritte mit Python Django (3)
Einführung in Python Django (6)
Web Scraping Anfänger mit Python
Erste Schritte mit Python Django (5)
Erste Schritte mit Python Responder v2
Web Scraping mit Python Erster Schritt
Ich habe versucht, WebScraping mit Python.
Erste Schritte mit Python für PHPer-Klassen
Erste Schritte mit genetischen Python-Algorithmen
Erste Schritte mit Python 3.8 unter Windows
Erste Schritte mit Python für PHPer-Funktionen
Scraping mit Python
Scraping mit Python
Erste Schritte mit Python3 # 1 Grundkenntnisse erlernen
WEB-Scraping mit Python (für persönliche Notizen)
[Persönlicher Hinweis] Scraping von Webseiten in Python3
Pferderennseite Web Scraping mit Python
Erste Schritte mit Python für PHPer-Super Basics
Erste Schritte mit Dynamo von Python Boto
Einfaches Web-Scraping mit Python und Ruby
[Für Anfänger] Versuchen Sie Web Scraping mit Python
[FastAPI] Erste Schritte mit FastAPI, einem ASGI-Webframework von Python
Django 1.11 wurde mit Python3.6 gestartet
Scraping in Python (Vorbereitung)
Versuchen Sie es mit Python.
Erste Schritte mit Android!
Scraping mit Python + PhantomJS
Erste Schritte mit apache2
Erste Schritte mit Django 1
Einführung in die Optimierung
Erste Schritte mit Numpy
Erste Schritte mit Spark
Schaben mit Selen [Python]
Scraping mit Python + PyQuery
Erste Schritte mit Pydantic
Erste Schritte mit Jython
Scraping von RSS mit Python
Erste Schritte mit Django 2
Erste Schritte mit Python mit 100 Klopfen bei der Sprachverarbeitung
Führen Sie das WEB-Scraping regelmäßig mit AWS-Lambda + Python + Cron aus
[Übersetzung] Erste Schritte mit Rust für Python-Programmierer
Einführung in Tornado (1): Python Web Framework mit Tornado gestartet
Erste Schritte mit AWS IoT in Python
Web Scraping mit Python (Wettervorhersage)
Web Scraping mit Python (Aktienkurs)