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.
Bevor Sie mit dem Schaben beginnen, sollten Sie einige Dinge überprüfen und bei der Arbeit beachten.
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.
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.
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
Ü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
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.
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
Eine Seite wie diese wird angezeigt.
Lassen Sie uns die auf dieser Seite verwendeten HTML-Tags erläutern.
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.
Nachdem Sie die HTML-Tags verstanden haben, kratzen wir sie ab.
Das obige Verfahren ist das grundlegende Verfahren zum Schaben.
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.
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.
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.
Bitte beziehen Sie sich auf die folgende URL, da nicht genügend Zeit vorhanden ist, um hier detailliertere Formate einzuführen.
Wenn Sie mit diesem Programm die folgenden Ergebnisse erzielen, sind Sie erfolgreich.
neet-AI
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.
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.
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. ** ** **
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.
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.
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.
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.
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.
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