Je voudrais écrire une introduction à la pratique du web scraping avec Python.
Sauf pour la partie générale, j'aimerais aller avec un style qui comprend par le sentiment.
Finalement, "Accédez au Nihon Keizai Shimbun toutes les heures et enregistrez le cours moyen de l'action Nikkei à ce moment-là en csv."
Je voudrais faire un programme.
C'est une note. Lisez-le attentivement. [Affaire de la bibliothèque centrale d'Okazaki City (Affaire Librahack) --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 des précautions pour le scraping Web
Langage: Python 2.7.12 Bibliothèques: urllib2, BeautifulSoup, csv, datetime, time
urllib2 est requis pour accéder à l'URL. BeautifulSoup est comme un analyseur XML qui ouvre les fichiers auxquels vous accédez et obtenez Cette bibliothèque est requise lorsque vous travaillez avec des fichiers csv. datetime est une bibliothèque pour obtenir l'heure
urllib2 est installé lorsque vous installez Python. Utilisez la commande pip pour installer Beautiful Soup
shell.sh
$ pip install beautifulsoup4
Tout d'abord, accédez au Nihon Keizai Shimbun avec Python et récupérez le HTML.
Après cela, transformez-le en une forme qui peut être manipulée par Beautiful Soup,
Le titre de la page est acquis à partir du formulaire qui peut être manipulé et sorti.
De plus, cette fois, il peut être difficile de comprendre l'image si vous n'obtenez que le titre de la page, donc j'aimerais obtenir l'élément titre et obtenir le titre à partir des éléments titre.
getNikkeiWebPageTitle.py
# coding: UTF-8
import urllib2
from bs4 import BeautifulSoup
#URL d'accès
url = "http://www.nikkei.com/"
#Html pour accéder à l'URL est retourné →<html><head><title>Actualités économiques, boursières, commerciales et politiques:Version électronique Nikkei</title></head><body....
html = urllib2.urlopen(url)
#Manipulez le HTML avec une belle soupe
soup = BeautifulSoup(html, "html.parser")
#Obtenez l'élément de titre →<title>Actualités économiques, boursières, commerciales et politiques:Version électronique Nikkei</title>
title_tag = soup.title
#Obtenir la chaîne d'élément → Actualités économiques, boursières, commerciales et politiques:Version électronique Nikkei
title = title_tag.string
#Élément de titre de sortie
print title_tag
#Titre de sortie sous forme de chaîne de caractères
print title
Cela renverra les résultats suivants:
shell.sh
$ python getNikkeiWebPageTitle.py
<title>Actualités économiques, boursières, commerciales et politiques:Version électronique Nikkei</title>
Actualités économiques, boursières, commerciales et politiques:Version électronique Nikkei
Au fait
print.py
print soup.title.string
Des résultats similaires peuvent également être obtenus dans ce cas.
Je pense que vous en avez une idée approximative.
L'objectif cette fois est "d'accéder au Nihon Keizai Shimbun toutes les heures et d'enregistrer le cours moyen de l'action Nikkei à ce moment-là en csv". Si vous vérifiez la procédure du programme
L'en-tête n'est pas utilisé pour csv.
Faisons le.
Tout d'abord, accédez à la page du cours moyen de l'action Nikkei.
La théorie consiste à rechercher l'URL vous-même à l'avance dans le navigateur.
Si vous le recherchez, vous pouvez le trouver sur la page "Nihon Keizai Shimbun-> Marché-> Stock".
J'utiliserai le programme précédent
getNikkeiHeikin.py
# coding: UTF-8
import urllib2
from bs4 import BeautifulSoup
#URL d'accès
url = "http://www.nikkei.com/markets/kabu/"
#Html pour accéder à l'URL est retourné →<html><head><title>Actualités économiques, boursières, commerciales et politiques:Version électronique Nikkei</title></head><body....
html = urllib2.urlopen(url)
#Manipulez le HTML avec une belle soupe
soup = BeautifulSoup(html, "html.parser")
#Titre de sortie sous forme de chaîne de caractères
print soup.title.string
Cela affichera le titre.
shell.sh
$ python getNikkiHeikin.py
>>Stock: Marché: version électronique Nikkei
Ensuite, obtenez le cours moyen de l'action Nikkei.
Ouvrons Nihon Keizai Shimbun> Marché> Bourse dans votre navigateur.
Le cours moyen de l'action Nikkei est indiqué du haut vers le bas de cette page.
Pour obtenir cela, nous devons trouver l'emplacement de ces données en HTML.
Faites un clic droit sur le cours moyen de l'action Nikkei et appuyez sur "Vérifier".
Alors je pense que l'écran ressemblera à ceci
Class = "mkc-stock_prices" dans l'élément span.
Maintenant vous connaissez la position.
Imprimons réellement avec Beautiful Soup.
getNikeiHeikin.py
# coding: UTF-8
import urllib2
from bs4 import BeautifulSoup
#URL d'accès
url = "http://www.nikkei.com/markets/kabu/"
#Html pour accéder à l'URL est retourné →<html><head><title>Actualités économiques, boursières, commerciales et politiques:Version électronique Nikkei</title></head><body....
html = urllib2.urlopen(url)
#Manipulez le HTML avec une belle soupe
soup = BeautifulSoup(html, "html.parser")
#Extraire tous les éléments span → Tous les éléments span sont renvoyés dans le tableau →[<span class="m-wficon triDown"></span>, <span class="l-h...
span = soup.find_all("span")
#Déclarez-le d'abord afin qu'il ne provoque pas d'erreur lors de l'impression.
nikkei_heikin = ""
#Classez tous les éléments de portée en quelques minutes="mkc-stock_prices"Cherchez celui qui est devenu
for tag in span:
#Les éléments pour lesquels la classe n'est pas définie sont des balises.get("class").pop(0)Évitez l'erreur avec try car cela entraînera une erreur car vous ne pouvez pas faire
try:
#Classe à partir du tag="n"Extrayez la chaîne de n caractères de. Étant donné que plusieurs classes peuvent être définies
#La fonction get est renvoyée sous forme de tableau. Donc, la fonction de tableau pop(0)Supprime le tout début de la séquence en
# <span class="hoge" class="foo"> → ["hoge","foo"] → hoge
string_ = tag.get("class").pop(0)
#Mkc dans la chaîne de classe extraite-stock_Vérifiez s'il est défini comme prix
if string_ in "mkc-stock_prices":
# mkc-stock_Puisque les prix sont définis, la chaîne de caractères entre les balises.Commencez par une chaîne
nikkei_heikin = tag.string
#Puisque l'extraction est terminée, je vais quitter pendant quelques minutes
break
except:
#Chemin → Ne rien faire
pass
#Affiche le cours moyen de l'action Nikkei extrait.
print nikkei_heikin
résultat
shell.sh
$ python getNikeiHeikin.py
>>18,513.12
L'explication du code est essentiellement insérée dans le commentaire
Pour exprimer le flux simplement
C'est un flux.
Le flux de ce programme peut être utilisé dans la plupart des situations L'avantage est que ce n'est pas si difficile et peut être appliqué dans la plupart des situations. En guise de mise en garde, si l'élément span change en un autre élément ou si le contenu de la classe change, il ne peut pas être généré.
Sortir ce résultat en csv et le répéter toutes les heures
getNikeiHeikin.py
# coding: UTF-8
import urllib2
from bs4 import BeautifulSoup
from datetime import datetime
import csv
import time
time_flag = True
#Laissez-le courir pour toujours
while True:
#Si la durée est différente de 59 minutes, attendez 58 secondes
if datetime.now().minute != 59:
#1 minute parce que ce n'est pas 59 minutes(58 secondes)Attendre un moment(誤差がないとは言い切れないので58 secondesです)
time.sleep(58)
continue
#Ouvrez csv en mode ajout → Ouvrez csv ici car il faut du temps pour ouvrir csv lorsque le fichier devient volumineux
f = open('nikkei_heikin.csv', 'a')
writer = csv.writer(f, lineterminator='\n')
#C'est 59 minutes, mais je ne peux pas sortir avant 59 secondes à des secondes d'intervalle pour mesurer au bon moment.
while datetime.now().second != 59:
#Attendez 1 seconde car ce n'est pas 00 secondes
time.sleep(1)
#Le processus se termine rapidement et se répète deux fois, alors attendez ici une seconde.
time.sleep(1)
#Créer un enregistrement à décrire en csv
csv_list = []
#Obtenez l'heure actuelle en année, mois, jour, heure, minute, seconde
time_ = datetime.now().strftime("%Y/%m/%d %H:%M:%S")
#Insérez l'heure dans la première colonne
csv_list.append(time_)
#URL d'accès
url = "http://www.nikkei.com/markets/kabu/"
#Html pour accéder à l'URL est retourné →<html><head><title>Actualités économiques, boursières, commerciales et politiques:Version électronique Nikkei</title></head><body....
html = urllib2.urlopen(url)
#Manipulez le HTML avec une belle soupe
soup = BeautifulSoup(html, "html.parser")
#Extraire tous les éléments span → Tous les éléments span sont renvoyés dans le tableau →[<span class="m-wficon triDown"></span>, <span class="l-h...
span = soup.find_all("span")
#Déclarez-le d'abord afin qu'il ne provoque pas d'erreur lors de l'impression.
nikkei_heikin = ""
#Classez tous les éléments de portée en quelques minutes="mkc-stock_prices"Cherchez celui qui est devenu
for tag in span:
#Les éléments pour lesquels la classe n'est pas définie sont des balises.get("class").pop(0)Évitez l'erreur avec try car cela entraînera une erreur car vous ne pouvez pas faire
try:
#Classe à partir du tag="n"Extrayez la chaîne de n caractères de. Étant donné que plusieurs classes peuvent être définies
#La fonction get est renvoyée sous forme de tableau. Donc, la fonction de tableau pop(0)Supprime le tout début de la séquence en
# <span class="hoge" class="foo"> → ["hoge","foo"] → hoge
string_ = tag.get("class").pop(0)
#Mkc dans la chaîne de classe extraite-stock_Vérifiez s'il est défini comme prix
if string_ in "mkc-stock_prices":
# mkc-stock_Puisque les prix sont définis, la chaîne de caractères entre les balises.Commencez par une chaîne
nikkei_heikin = tag.string
#Puisque l'extraction est terminée, je vais quitter pendant quelques minutes
break
except:
#Chemin → Ne rien faire
pass
#Le cours moyen de l'action Nikkei extrait est émis au fil du temps.
print time_, nikkei_heikin
#Enregistrez la moyenne Nikkei dans la deuxième colonne
csv_list.append(nikkei_heikin)
#Ajouter au csv
writer.writerow(csv_list)
#Fermer pour éviter la corruption de fichiers
f.close()
Parler dans un flux
Voilà pourquoi
Si vous continuez à faire cela, il accédera une fois par heure pour obtenir la moyenne Nikkei et l'enregistrer.
Vous pouvez tout faire en appliquant ceci
Par exemple, vous pouvez ajouter un panier à grande vitesse (appelé groupe de scripts) au moment de la vente sur une longue rivière en Amérique du Sud. .. ..
Je ne le recommande pas beaucoup
Puis!
Collection de techniques de scraping Web Python "Aucune valeur ne peut être obtenue" Prise en charge de JavaScript [10 000 requêtes par seconde!?] Scrapage Web explosif à partir du langage Go [Golang] [Pour les débutants] Re: Algorithme génétique partant de zéro [Intelligence artificielle]
Recommended Posts