Scraping mit Python - Den Grundpreis eines Investment Trusts von Yahoo! Finance erhalten

Über diesen Artikel

Ich werde erklären, wie Sie den Basispreis für Investment Trust von Yahoo! Finance durch Web-Scraping mit Python und lxml erhalten.

** [Ergänzung] Daten-Scraping von Yahoo! Finance scheint durch die Regeln verboten zu sein. Verwenden Sie daher bitte eine alternative Methode. ** ** ** Scraping mit Python - Abrufen des Grundpreises von Investment Trusts aus dem Web der Investment Trusts Association

Umgebung

Windows10 x64 Python 2.7.11 lxml 3.5.0

Geschichte verändern

2016/1/16

Verfahren

Überprüfen Sie die Position der Daten, die Sie erfassen möchten

Da der Zweck des Web-Scrapings darin besteht, Text an einer bestimmten Position in HTML / XML zu extrahieren, überprüfen Sie zunächst die Position der Zieldaten. Derzeit ist die Überprüfungsfunktion von Chrome einfach zu verwenden. (Siehe unten)

Grundlegende Verwendung von Chrome-Entwicklertools (Elemente überprüfen)

Klicken Sie mit der rechten Maustaste auf die Seite und wählen Sie Validieren. (Sie können auch Strg + Umschalt + I verwenden.) Dann wird in der rechten Bildschirmhälfte ein HTML-Element angezeigt. Wenn Sie ein Tag auswählen, wird der entsprechende Teil auf dem Bildschirm invertiert. Wir werden dies nutzen, um tiefer zu graben, bis wir die Daten identifizieren können, die wir erfassen möchten.

Im Fall von Yahoo! Finance lautet die Hierarchie wie folgt. `

Hier ist der Standardpreis ` ## Schreiben Sie die Datenposition, die Sie in XPath erhalten möchten XPath ist ein Format zur Darstellung der Position beliebiger Inhalte in einem HTML / XML-Dokument. Klicken Sie mit der rechten Maustaste auf Chrome-> Kopieren-> Xpfad kopieren Sie können den XPath mit bekommen. (Siehe unten)

Einfach, XPath von jedem Knoten mit nur Chrome Maybe Revolution zu erhalten

Dieses Mal möchte ich alle td-Elemente der Tabelle unter dem div-Element von id = main haben, also habe ich Folgendes getan. //*[@id="main"]/div/table//td

Holen Sie sich HTML mit parser () und extrahieren Sie die erforderlichen Elemente mit XPath

Von hier an machen wir das in Python. Übergeben Sie die URL an lxml.html.parser (), um HTML_Elements abzurufen und die von XPath angegebenen Elemente daraus zu extrahieren. Ordnen Sie das Modell schließlich an und geben Sie es als Liste des Modells [Datum, Basispreis, Gesamtnettovermögen] aus. Das Datum war schließlich eine Zeichenfolge des yyyymmdd-Modells.

getNAV.py


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

def getNAV(fundcode, sy, sm, sd, ey, em, ed):
    #Schieben Sie das Argument ins Diktat
    d = dict(fundcode=fundcode, sy=sy, sm=sm, sd=sd, ey=ey, em=em, ed=ed)

    #Entpacken Sie dict, um eine URL zu generieren
    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)

    #Holen Sie sich ElementTree
    tree = lxml.html.parse(url)

    #Datum,Grundpreis,Wenden Sie map und utf an, während Sie alle Elemente des Nettovermögens abrufen-8 Konvertierung und Entfernung von Kommas
    contents = map(lambda html: html.text.encode('utf-8').replace(',',''), tree.xpath('//*[@id="main"]/div/table//td'))

    #Weil es eine Liste ist[[date, price, cap], [date, price, cap], ...]Teilen mit
    res = []
    for i in range(0, len(contents)-1, 3):
        date = datetime.datetime.strptime(contents[i], '%Y Jahr%m Monat%d Tag').strftime('%Y%m%d')
        price = int(contents[i+1])
        cap = int(contents[i+2])
        res.append([date, price, cap])

    return res

if __name__ == '__main__':
    #Schieben Sie die Parameter in das Diktat
    args = dict(fundcode='64311104', sy='2015', sm='12', sd='1', ey='2015', em='12', ed='20')
    #Übergeben Sie das ganze Diktat und packen Sie es aus
    print getNAV(**args)

Artikel, auf die verwiesen wird

lxml - Processing XML and HTML with Python Tipps zum Scraping mit lxml [Python] Notizen mit lxml kratzen

Recommended Posts