Scraping avec Python - Obtenir le prix de base d'une fiducie d'investissement de Yahoo! Finance

À propos de cet article

J'expliquerai comment obtenir le prix de base de la fiducie d'investissement de Yahoo! Finance en utilisant le web scraping en utilisant Python et lxml.

** [Ajout] Le raclage des données de Yahoo! Finance semble être interdit par les règles, veuillez donc utiliser une méthode alternative. ** ** Scraping with Python - Obtenir le prix de base des fiducies d'investissement à partir du site Web de l'Investment Trusts Association

environnement

Windows10 x64 Python 2.7.11 lxml 3.5.0

modifier l'historique

2016/1/16

--Changé pour transmettre l'URL directement à lxml.html.parse (). Suppression de l'importation de urllib2.

procédure

Vérifiez la position des données que vous souhaitez acquérir

Le but du web scraping étant d'extraire du texte à une position spécifique dans HTML / XML, vérifiez d'abord la position des données cibles. Pour le moment, la fonction de vérification de Chrome est facile à utiliser. (Voir ci-dessous)

Utilisation de base des outils de développement Chrome (vérifier les éléments)

Cliquez avec le bouton droit sur la page et sélectionnez Valider. (Vous pouvez également utiliser Ctrl + Maj + I) Ensuite, un élément HTML apparaîtra dans la moitié droite de l'écran, et lorsque vous sélectionnez une balise, la partie correspondante à l'écran sera inversée. Nous utiliserons cela pour creuser plus profondément jusqu'au point où nous pouvons identifier les données que nous voulons acquérir.

Dans le cas de Yahoo! Finance, la hiérarchie est la suivante. `

Voici le prix standard ` ## Écrivez la position des données que vous souhaitez obtenir dans XPath XPath est un format pour représenter la position d'un contenu arbitraire dans un document HTML / XML. Faites un clic droit dans Chrome-> Copier-> Copier Xpath Vous pouvez obtenir le XPath avec. (Voir ci-dessous)

Facile à obtenir XPath de n'importe quel nœud avec juste la révolution Chrome Maybe

Cette fois, je veux tous les éléments td de la table sous l'élément div de id = main, donc j'ai fait comme suit. //*[@id="main"]/div/table//td

Obtenez du HTML avec parser () et extrayez les éléments requis avec XPath

À partir de maintenant, nous le ferons en Python. Passez l'url à lxml.html.parser () pour obtenir HTML_Elements et en extraire les éléments spécifiés par XPath. Enfin, organisez le modèle et affichez-le sous forme de liste de modèles [Date, prix de base, actif net total]. La date était finalement une chaîne du modèle aaaammjj.

getNAV.py


# -*- coding: utf-8 -*-
# python 2.7
import lxml.html
import datetime

def getNAV(fundcode, sy, sm, sd, ey, em, ed):
    #Poussez l'argument dans dict
    d = dict(fundcode=fundcode, sy=sy, sm=sm, sd=sd, ey=ey, em=em, ed=ed)

    #Décompressez dict pour générer une URL
    url = 'http://info.finance.yahoo.co.jp/history/?code={fundcode} \
        &sy={sy}&sm={sm}&sd={sd}&ey={ey}&em={em}&ed={ed}&tm=d'.format(**d)

    #Obtenez ElementTree
    tree = lxml.html.parse(url)

    #Date,Prix de base,Appliquer map et utf tout en obtenant tous les éléments de l'actif net-8 Conversion et suppression des virgules
    contents = map(lambda html: html.text.encode('utf-8').replace(',',''), tree.xpath('//*[@id="main"]/div/table//td'))

    #Parce que c'est une liste[[date, price, cap], [date, price, cap], ...]Divisez avec
    res = []
    for i in range(0, len(contents)-1, 3):
        date = datetime.datetime.strptime(contents[i], '%Y année%m mois%jour j').strftime('%Y%m%d')
        price = int(contents[i+1])
        cap = int(contents[i+2])
        res.append([date, price, cap])

    return res

if __name__ == '__main__':
    #Poussez les paramètres dans le dict
    args = dict(fundcode='64311104', sy='2015', sm='12', sd='1', ey='2015', em='12', ed='20')
    #Passez tout le dict et décompressez
    print getNAV(**args)

Articles référencés

lxml - Processing XML and HTML with Python Astuces pour gratter avec lxml [Python] Scraping notes with lxml

Recommended Posts