Web Scraping mit Python (Aktienkurs)

Was ist Web Scraping?

Scraping ist eine Technik, mit der ** beliebige Informationen von Websites gesucht und extrahiert werden **. Neben dem Abrufen von Daten im Web können Sie auch die Struktur analysieren.

Vor dem Web Scraping

Bevor Sie mit dem Schaben beginnen, sollten Sie einige Dinge überprüfen und bei der Arbeit beachten.

  1. Ob die API existiert Wenn es einen Dienst gibt, der API bereitstellt, verwenden Sie diesen, um die Daten abzurufen. Wenn Sie immer noch Probleme wie unzureichende Daten haben, sollten Sie das Scraping in Betracht ziehen.

  2. In Bezug auf die Verwendung der erfassten Daten Seien Sie vorsichtig, wenn Sie die erfassten Daten verwenden. Dies liegt daran, dass die Daten aus der Erfassungsquelle eine andere als Ihre eigene Arbeit sind und Sie sie berücksichtigen müssen, damit sie nicht im Widerspruch zum Urheberrecht stehen.

Vervielfältigung für den privaten Gebrauch (Artikel 30) http://www.houko.com/00/01/S45/048.HTM#030

Vervielfältigung zur Informationsanalyse usw. (Artikel 47-7) http://www.houko.com/00/01/S45/048.HTM#047-6

Darüber hinaus sind im Folgenden drei besonders problematische Rechte aufgeführt.

  1. Urheberrecht:

Das Herstellungsrecht ist eines der im Urheberrecht enthaltenen Rechte und in Artikel 21 des Urheberrechtsgesetzes festgelegt. (Artikel 21 "Der Autor hat das ausschließliche Recht, das Werk zu kopieren.") Wiedergabe bedeutet Kopieren, Aufzeichnen / Aufzeichnen, Drucken / Fotografieren, Kopieren (Kopieren), elektronisches Lesen mit einem Scanner und Speichern. Referenz: https://www.jrrc.or.jp/guide/outline.html

  1. Anpassungsrecht:

Übersetzungs- und Anpassungsrechte sind Urheberrechte in Artikel 27 des Urheberrechtsgesetzes. Artikel 27 besagt, dass "der Autor das ausschließliche Recht hat, das Werk zu übersetzen, zu arrangieren, zu transformieren oder anzupassen, einen Film zu machen und auf andere Weise anzupassen" ("Copyright Information Center" http. (Von //www.cric.or.jp/db/article/a1.html#021) ist klar angegeben. Im Gegenteil, dies ohne die Erlaubnis des Autors zu tun, ist eine Urheberrechtsverletzung. Referenz: http://www.iprchitekizaisan.com/chosakuken/zaisan/honyaku_honan.html

  1. Öffentliches Übertragungsrecht:

Das öffentliche Übertragungsrecht ist ein Urheberrechtsrecht gemäß Artikel 23 des Urheberrechtsgesetzes. In diesem Artikel 23: "Der Autor hat das Recht, das Werk öffentlich zu übertragen (einschließlich der Ermöglichung der Übertragung bei automatischer öffentlicher Übertragung)." "Der Autor hat das Recht." Es hat das Recht, die mit dem Empfangsgerät an die Öffentlichkeit übertragenen Arbeiten öffentlich zu übermitteln. " Referenz: http://www.iprchitekizaisan.com/chosakuken/zaisan/kousyusoushin.html

Beachten Sie auch die obigen Punkte und stellen Sie sicher, dass der von Ihnen geschriebene Code den Server nicht überfordert, wenn Sie tatsächlich Scraping durchführen. Übermäßiger Zugriff belastet den Server und wird als Angriff angesehen. Im schlimmsten Fall ist der Dienst möglicherweise für einen bestimmten Zeitraum nicht verfügbar. Darüber hinaus gibt es Fälle, in denen einer der Benutzer aufgrund eines Zugriffsfehlers im System festgenommen wurde. Verwenden Sie ihn daher im Rahmen des gesunden Menschenverstandes. https://ja.wikipedia.org/wiki/岡崎市立中央図書館事件

Lassen Sie uns in diesem Sinne weitermachen.

HTML-Grundlagen

Es ist nützlich, die Grundlagen von HTML zu kennen, wenn Sie das Web-Scraping üben. Der Grund ist, dass ** die in HTML verwendeten Tags (\ , \

, \

) angegeben werden, um die Daten abzurufen **.

Lassen Sie mich Ihnen ein Beispiel geben.

sample.html


<html>
<head>
  <title>neet-AI</title>
</head>
<body>
<div id="main">
  <p>neet-Klicken Sie hier für den AI-Link</p>
  <a href="https://neet-ai.com">neet-AI</a>
</div>
</body>
</html>

Wenn Sie sich den obigen Code in Ihrem Browser ansehen

スクリーンショット 2017-06-17 20.24.26.png

Eine Seite wie diese wird angezeigt.

Lassen Sie uns die auf dieser Seite verwendeten HTML-Tags erläutern.

HTML-Tag-Liste

Verlinke den Namen Erläuterung
<html></html> Ein Tag, das explizit angibt, dass dies HTML-Code ist
<head></head> Repräsentiert grundlegende Seiteninformationen (Zeichencode und Seitentitel).
<title></title> Repräsentiert den Seitentitel.
<body></body> Repräsentiert den Hauptteil der Seite.
<div></div> Das Tag selbst hat keine Bedeutung, wird jedoch häufig verwendet, um es als einen Inhalt zu beschreiben.
<p></p> Der von diesem Tag eingeschlossene Satz wird jetzt als ein Absatz dargestellt.
<a></a> Stellt einen Link zu einer anderen Seite dar.

Es gibt viele andere Typen als die oben beschriebenen Tags. Überprüfen Sie jedes Mal, wenn Sie herausfinden, welche Art von Tag Sie möchten.

Grundlagen des Web-Scrapings

Nachdem Sie die HTML-Tags verstanden haben, kratzen wir sie ab.

Grundlegende Schritte zum Web Scraping

  1. Holen Sie sich eine Webseite
  2. Suchen Sie programmgesteuert nach dem angegebenen Tag und extrahieren Sie es (Scraping).
  3. Formatieren und speichern oder zeigen Sie die durch Scraping erhaltenen Daten an

Das obige Verfahren ist das grundlegende Verfahren zum Schaben.

Bibliothek zu verwenden

Beim Web-Scraping mit Python werden verschiedene Bibliotheken verwendet.

Anfragen Wird verwendet, um eine Webseite zu erhalten.

BeautifulSoup4 Analysieren Sie die erfasste Webseite, suchen Sie nach Tags und formatieren Sie die Daten.

Wir werden Web Scraping mit der oben genannten Bibliothek durchführen.

Bereit, in Python zu kratzen

Bevor Sie kratzen können, müssen Sie den HTML-Code der Webseite in Python abrufen.

get_html.py


import requests

response = requests.get('http://test.neet-ai.com')
print(response.text)

Lassen Sie uns jede Zeile erklären.

response = requests.get('http://test.neet-ai.com')

Diese Zeile übernimmt den HTML-Code von http://test.neet-ai.com. Der abgerufene HTML-Code wird in die Antwortvariable übernommen.

print(response.text)

Die variable Antwort kann in Beautiful Soup nicht ohne Text verwendet werden.

Scraping Seitentitel

title_scraping.py


import requests
from bs4 import BeautifulSoup

response = requests.get('http://test.neet-ai.com')
soup = BeautifulSoup(response.text,'lxml')
title = soup.title.string
print(title)

Sehen ist Glauben, schauen wir uns das Programm an. Bis zur 4. Zeile entspricht dies "Vorbereiten des Scrapings mit Python". Das Scraping-Programm beginnt in der 5. Zeile. Erklären wir also jede Zeile.

soup = BeautifulSoup(response.text,'lxml')

Hier wird eine Variable namens Suppe vorbereitet, damit die abgerufenen HTML-Daten gelöscht werden können. Die 'lxml'in Klammern bedeuten ** "Ich werde response.text mit einem Tool namens lxml konvertieren" **.

title = soup.title.string

Wenn Sie die abgerufenen HTML-Daten konvertieren können, können Sie die angegebenen Daten extrahieren, indem Sie sie mit einem festen Typ von BeautifulSoup angeben.

Lassen Sie uns Schritt für Schritt durch dieses Programm gehen. Es sieht so aus, als würde ** in der Suppenvariablen nach dem Tag-Titel gesucht und die Zeichenfolge im Titel-Tag im String-Format ausgegeben **. Dies ist programmatisch etwas schwierig zu verstehen, daher ist es möglicherweise besser, es intuitiv zu verstehen. Es ist schwer zu verstehen, wie es ist, also würde ich es begrüßen, wenn Sie es sich wie folgt vorstellen könnten.

スクリーンショット 2017-06-07 20.08.13.png

Bitte beziehen Sie sich auf die folgende URL, da nicht genügend Zeit vorhanden ist, um hier detailliertere Formate einzuführen.

Schönes Suppendokument

Wenn Sie mit diesem Programm die folgenden Ergebnisse erzielen, sind Sie erfolgreich.

neet-AI

Scraping Links

Zunächst wird das Tag \ \ verwendet, um einen Link in HTML darzustellen. In diesem Fall können Sie das Zeichenfolgenformat nicht verwenden, da Sie die URL in einem a-Tag abrufen möchten.

get_link.py


import requests
from bs4 import BeautifulSoup

response = requests.get('http://test.neet-ai.com')
soup = BeautifulSoup(response.text,'lxml')
link = soup.a.get('href')
print(link)

** Sie können die verknüpfte href mit einer Funktion namens get () abrufen. ** ** ** Beachten Sie, dass die Funktion get () nützlich ist und in Zukunft häufig verwendet wird.

Mehrere Links verschrotten

Die Seite, auf die ich mich bisher bezog, hatte nur eine mit einem Tag. Wie kratzt man eine Seite mit mehreren Tags? Lassen Sie uns zunächst das vorherige Programm auf einer Seite mit mehreren Tags ausführen. Lassen Sie uns die URL der Zeile ändern, die die Seite erhält.

link_get.py


import requests
from bs4 import BeautifulSoup

response = requests.get('http://test.neet-ai.com/index2.html')
soup = BeautifulSoup(response.text,'lxml')
link = soup.a.get('href')
print(link)

Wenn ich es starte, sehe ich nur den Need-AI-Link. Dies liegt daran, dass nur das erste Tag extrahiert wird, das inoup.a.get ('href') gefunden wurde. Wenn Sie alle Tags extrahieren möchten, ist dies wie folgt.

link_all_get.py


import requests
from bs4 import BeautifulSoup

response = requests.get('http://test.neet-ai.com/index2.html')
soup = BeautifulSoup(response.text,'lxml')
links = soup.findAll('a')
for link in links:
   print(link.get('href'))

Lassen Sie uns jede Zeile erklären.

links = soup.findAll('a')

Hier ** werden alle Tags extrahiert und einmal in die Liste der Links eingefügt. ** ** **

for link in links:
   print(link.get('href'))

Da es sich um einen Listentyp handelt, können Sie ihn einzeln bedienen, indem Sie ihn mit for drehen. Sie können jede URL mithilfe der Funktion get () für die Linkvariable abrufen, die betrieben werden kann. ** Denken Sie an diese Methode, bei der Sie alle Tags einmal abrufen und mit drehen, damit Sie sie bedienen können **, da Sie sie in Zukunft häufig verwenden werden.

Schaben vom Schaben

Wenn Sie leicht gehen ** URL-Scraping auf der Seite → fordert das erhaltene URL-Ziel an → Scraping erneut ** Es ist wie es ist. Dies ist einfach, solange Sie die grundlegende Grammatik von Python haben. Rufen Sie dann die URL ab, indem Sie von https://test.neet-ai.com/index3.html kratzen, und es ist die URL https :: Lassen Sie uns //test.neet-ai.com/index4.html kratzen, um die Twitter- und Facebook-Links zu erhalten.

python:scraping_to_scraping.py:


import requests
from bs4 import BeautifulSoup

#Erstes Schaben
response = requests.get('http://test.neet-ai.com/index3.html')
soup = BeautifulSoup(response.text,'lxml')
link = soup.a.get('href') 

#Zweites Schaben
response = requests.get(link)
soup = BeautifulSoup(response.text,'lxml')
sns = soup.findAll('a')
twitter = sns[0].get('href')
facebook = sns[1].get('href')

print(twitter)
print(facebook)

Durch mehrmaliges Anfordern und Scraping ** können Sie Websites und Seiten durchsuchen. ** ** **

Scraping mit ID oder Klasse

Bisher enthielten Tags keine ID oder Klasse. Auf einer typischen Site wird jedoch eine ID oder Klasse im Tag festgelegt, um das Webdesign zu vereinfachen oder die Lesbarkeit des Programms zu verbessern. Nur weil eine ID oder Klasse festgelegt ist, wird das Scraping nicht viel schwieriger. ** Im Gegenteil, es kann einfacher sein **, wenn Sie sagen "Ich möchte nur diesen Inhalt kratzen!".

index5.html


<html>
<head>
<title>neet-AI</title>
</head>
<body>
<div id="main">
  <a id="neet-ai" href="https://neet-ai.com">neet-AI</a>
  <a id="twitter" href="https://twitter.com/neetAI_official">Twitter</a>
  <a id="facebook" href="https://www.facebook.com/Neet-AI-1116273381774200/">Facebook</a>
</div>
</body>
</html>

Angenommen, Sie haben eine Site wie die oben beschriebene. Wie Sie anhand des Tags a sehen können, wird allen eine ID zugewiesen. Wenn Sie zu diesem Zeitpunkt die Twitter-URL erhalten möchten, können Sie so schreiben.

twitter_scra.py


import requests
from bs4 import BeautifulSoup

response = requests.get('http://test.neet-ai.com/index5.html')
soup = BeautifulSoup(response.text,'lxml')
twitter = soup.find('a',id='twitter').get('href')

print(twitter)

Sie können es leicht erhalten, indem Sie den ID-Namen als zweiten der Suche angeben.

Als nächstes machen wir es zu einer Klasse.

index6.html


<html>
<head>
<title>neet-AI</title>
</head>
<body>
<div id="main">
  <a class="neet-ai" href="https://neet-ai.com">neet-AI</a>
  <a class="twitter" href="https://twitter.com/neetAI_official">Twitter</a>
  <a class="facebook" href="https://www.facebook.com/Neet-AI-1116273381774200/">Facebook</a>
</div>
</body>
</html>

twitter_scra_clas.py


import requests
from bs4 import BeautifulSoup

response = requests.get('http://test.neet-ai.com/index6.html')
soup = BeautifulSoup(response.text,'lxml')
twitter = soup.find('a',class_='twitter').get('href')

print(twitter)

Beachten Sie, dass Klasse _ **, nicht ** Klasse. Dies liegt daran, dass die Klasse im Voraus als reserviertes Wort (ein Wort, das in den Sprachspezifikationen eine besondere Bedeutung hat) in Python registriert wird. Um dies zu vermeiden, hätte der Ersteller der BeautifulSoup-Bibliothek einen Unterstrich hinzugefügt.

Web-Scraping-Anwendung

Die Grundlagen des Web-Scraping sind bisher HTML-Seiten, die das Web-Scraping erleichtern sollen. ** Allgemeine Websites sind jedoch nicht für das Scraping konzipiert, sodass sie eine sehr komplexe Struktur haben können **.

Da es so kompliziert ist, sind neben dem Scraping neben dem Scraping auch andere Kenntnisse wie die Eigenschaften von Webseiten erforderlich.

In der erweiterten Version können Sie komplizierte Websites bis zu einem gewissen Grad kratzen, wenn Sie den Dreh raus haben. Lassen Sie uns also das Know-how in der erweiterten Version erweitern.

Jedes Mal debuggen

Beim Scraping gibt es viele Situationen, in denen die URL und das URL-Ziel erneut gelöscht werden. In diesem Fall ** versuchen Sie nicht, ein Programm sofort zu erstellen, sondern debuggen Sie jedes Mal, wenn Sie ein Scraping-Programm erstellen **. Wenn Sie debuggen und alle URLs angezeigt werden, erstellen Sie anschließend ein Scraping-Programm. Dies kann für die Programmierung im Allgemeinen zutreffen.

Verwenden Sie die Kommunikationsmerkmale der Webseite

Diese Technik ist praktisch. Nehmen wir als Beispiel nifty news.

Beispielsweise gibt es eine Seite, die von IT-Kategorie aufgerufen werden kann. Drücken wir die zweite Taste, um die Seite umzublättern.

Wenn Sie sich die URL noch einmal ansehen, https://news.nifty.com/technology/2 Es wird sein.

Als nächstes gehen wir zur dritten Seite.

Die URL auf der dritten Seite lautet wie folgt. https://news.nifty.com/technology/3

Wie jeder weiß, der eine serverseitige Entwicklung durchgeführt hat, meistens beim Erstellen von seitenweisen Seiten ** Aktualisieren Sie die Seite, indem Sie die Anzahl der Seiten am Ende der URL und der Parameter eingeben. ** ** **

Wenn Sie diesen Mechanismus verwenden, können Sie Seiten umblättern, indem Sie einfach die Zahlen in der ** URL ersetzen. ** ** **

Versuchen Sie, das Ende auf Ihre Lieblingsnummer zu ändern. Ich denke, Sie können zu dieser Nummer springen. (Obwohl es Grenzen gibt)

Versuchen wir, ein Programm zu erstellen, das die Suchergebnisse von der 1. bis zur 10. Seite des Programms kratzt.

paging_scraping.py


import requests
from bs4 import BeautifulSoup

for page in range(1,11):
           r = requests.get("https://news.nifty.com/technology/"+str(page))
           r.encoding = r.apparent_encoding
           print(r.text)

Es sieht aus wie das. Diese Technik ist nützlich, wenn Sie Suchergebnisse oder serialisierte URLs löschen.

Kennen Sie die Grenzen

Ich glaube, ich habe früher mit der URL in "Verwenden der Kommunikationseigenschaften der Webseite" gespielt, aber wenn ich ohne Kenntnis des Limits geschabt habe, ** werden keine oder 404 Daten angezeigt. Es wird sein **. Um dies zu verhindern, kennen Sie die Seitenbeschränkungen manuell oder automatisch im Voraus und integrieren Sie sie in Ihr Programm.

Web-Scraping-Praxis

Nachdem Sie nun die Grundlagen und Tipps kennen, können Sie eine große Datenmenge automatisch auf der Website abkratzen.

Lassen Sie uns den durchschnittlichen Aktienkurs von Nikkei für 10 Jahre von der Website abrufen, die Aktienkursdaten verteilt, und diese in die CSV-Datei schreiben. Grundlegende URL http://k-db.com/indices/I101/1d/

Beispielprogramm

import csv
import requests
import time
from bs4 import BeautifulSoup

f = open('stock.csv','w')
writer = csv.writer(f)
for year in range(2007,2017+1):
        r = requests.get("http://k-db.com/indices/I101/1d/%s"%year)
        soup = BeautifulSoup(r.text)
        trs = soup.tbody.findAll('tr')
        for tr in trs:
                row = []
                for td in tr.findAll('td'):
                        row.append(td.text)
                writer.writerow(row)
        time.sleep(1)
f.close()

10 Jahre Scraping für alle Marken

import csv 
import requests
import time
from bs4 import BeautifulSoup


r = requests.get("http://k-db.com/indices/")
soup = BeautifulSoup(r.text)
tickers = soup.tbody.findAll('td',class_='l')

for t in tickers:
        f = open('%s.csv'%t.text,'w')
        writer = csv.writer(f)
        #print(t.a.get('href'))
        for year in range(2007,2008+1):
                r = requests.get("http://k-db.com/%s/1d/%s"%(t.a.get('href'),year))
                print("http://k-db.com%s/1d/%s"%(t.a.get('href'),year))
                soup = BeautifulSoup(r.text)
                trs = soup.tbody.findAll('tr')
                for tr in trs:
                        row = []
                        for td in tr.findAll('td'):
                                row.append(td.text)
                        writer.writerow(row)
                time.sleep(1)
        f.close()

Recommended Posts

Web Scraping mit Python (Aktienkurs)
Web Scraping mit Python (Wettervorhersage)
Lassen Sie uns mit Python Image Scraping durchführen
Web Scraping mit Python + JupyterLab
Holen Sie sich Lager mit Python
Web Scraping Anfänger mit Python
Web Scraping mit Python Erster Schritt
Ich habe versucht, WebScraping mit Python.
Scraping mit Python
Scraping mit Python
Erste Schritte mit Python Web Scraping Practice
Laden Sie japanische Aktienkursdaten mit Python herunter
[Persönlicher Hinweis] Scraping von Webseiten in Python3
Pferderennseite Web Scraping mit Python
Erste Schritte mit Python Web Scraping Practice
Lassen Sie uns MySQL-Daten mit Python bearbeiten
Erstellen Sie ein Webframework mit Python! (1)
Üben des Web-Scrapings mit Python und Selen
Einfaches Web-Scraping mit Python und Ruby
Erstellen Sie ein Webframework mit Python! (2)
[Für Anfänger] Versuchen Sie Web Scraping mit Python
Scraping in Python (Vorbereitung)
Führen Sie das WEB-Scraping regelmäßig mit AWS-Lambda + Python + Cron aus
Versuchen Sie es mit Python.
Scraping mit Python + PhantomJS
Holen Sie sich Aktienkursdaten mit Quandl API [Python]
Schaben mit Selen [Python]
Scraping mit Python + PyQuery
Scraping von RSS mit Python
Analysieren Sie preisgünstige Informationen zu Amazon-Geschenkgutscheinen mit Web Scraping & R mit Python
Datenanalyse zur Verbesserung von POG 1 ~ Web Scraping mit Python ~
Schnelles Web-Scraping mit Python (unterstützt das Laden von JavaScript)
Python-Anfänger bleiben beim ersten Web-Scraping stecken
[Zeitreihen mit Handlung] Dynamische Visualisierung mit Handlung [Python, Aktienkurs]
Ich habe versucht, mit Python zu kratzen
Mach Django mit CodeStar (Python3.6.8, Django2.2.9)
Schaben mit Selen + Python Teil 1
Schaben mit Chromedriver in Python
Festliches Scraping mit Python, Scrapy
Mach Django mit CodeStar (Python3.8, Django2.1.15)
Speichern Sie Bilder mit Web Scraping
Scraping mit Selen in Python
Einfaches Web-Scraping mit Scrapy
Aktienkursprognose mit Tensorflow
Scraping mit Tor in Python
Web-API mit Python + Falcon
Schreiben wir Python mitinema4d.
Web Scraping mit Selenium (Python)
Python: Aktienkursprognose Teil 2
Lassen Sie uns R-CNN mit Sklearn-theano machen
Schaben mit Selen + Python Teil 2
Lassen Sie uns Git-Cat mit Python bauen
Optimieren Sie die Websuche mit Python
Webanwendung mit Python + Flask ④
Python: Aktienkursprognose Teil 1