2016-12-29 4 views
0

Ich beobachtete ein Tutorial zum Web-Parsing in Python. Dies ist der Code, um Live-Bestandsdaten zu erhalten. Und der Code läuft gut.Python, Web Parsing

import re 
    import urllib.request 

    # https://www.google.com/finance?q= 
    url = "https://www.google.com/finance?q=" 
    stock = input("Enter Your Stock : ") 
    url = url + stock 
    data = urllib.request.urlopen(url).read() 
    newData = data.decode('utf-8') 
    # meta itemprop="price" 
    m = re.search('meta itemprop="price"', newData) 
    start = m.start() 
    end = start + 50 
    newStock = newData[start:end] 
    m = re.search('content="', newStock) 
    start = m.end() 
    newStock1 = newStock[start:] 
    m = re.search('/', newStock1) 
    start = 0 
    end = m.end() - 3 
    final = newStock1[0:end] 
    print("The Value Of " + stock + " Is " + final) 

Aber ich nicht, diese beiden Teile in den Code verstehen:

start = m.start() 
    end = start + 50 # Why + 50 ? 

    start = 0 
    end = m.end() - 3 # Why - 3 ? 

Kann jemand mir eine Erklärung geben? Bitte näher

+0

Wo finden Sie dieses Tutorial? – Dmitry

+0

Es ist eigentlich ein Teil eines Kurses –

+1

Bitte stellen Sie einen Arbeitsbestand zur Verfügung. – ppasler

Antwort

0

Also, erste Frage:

start = m.start() 
end = start + 50 # Why + 50? 

Um leichter zu verstehen, warum die 50 ist, müssen Sie im Voraus ein bisschen schauen und ein wenig nach:

newData = data.decode('utf-8') 
# meta itemprop="price" 
m = re.search('meta itemprop="price"', newData) 
start = m.start() 
end = start + 50 
newStock = newData[start:end] 

Linie Zeile:

  • newData enthält die UTF-8-Darstellung der durchforsteten Seite (fo r Beispiel https://www.google.com/finance?q=aapl wenn wir versuchen, den Wert von Apple-Aktien zu erhalten).

  • m ist das Match-Objekt: Wo in newData das Auftreten von meta itemprop="price" beginnt, wo es + ein paar andere Informationen Enden (in der Dokumentation für detailliertere Informationen finden Sie unter: python2, python3)

  • start ist dann wird die Position in newData wo das Spiel beginnt

  • end wenn + 50 gestartet werden, da die angenommene maximale Länge des HTML-Elements ist der Preis enthält. Zum Beispiel, wenn ich auf Apple schaue, ist das: <meta itemprop="price" content="116.73" />, dessen Länge 42 Zeichen ist.

  • newStock wird nun sein meta itemprop="price" content="116.73" />

von hier auf die zweite Frage fort:

start = 0 
end = m.end() - 3 # Why - 3 ? 

Wie bei dem vorherigen Beispiel, lassen Sie uns ein bisschen mehr Kontext erhalten:

newStock = newData[start:end] 
m = re.search('content="', newStock) 
start = m.end() 
newStock1 = newStock[start:] 
m = re.search('/', newStock1) 
start = 0 
end = m.end() - 3 
final = newStock1[0:end] 

Zeile für Zeile:

  • Wir haben bereits erwähnt, dass newStock wird nun sein meta itemprop="price" content="116.73" />

  • m das Match-Objekt für die neue regex ist: wo in newStock das Auftreten von content=" beginnt, endet usw.

  • start ist die Ende des Spiels

  • newStock1 dann ist eine Teilkette von newStock die nach content=" mit dem ersten Zeichen beginnt und endet am Ende der Schnur, so newStock1 ist 116.73" />

  • ... ein letzter Regex!

  • start wird 0 zugewiesen aber tatsächlich verwendet wird, nicht mehr

  • end ist m.end() - 3, weil wir wissen, dass es genau drei Zeichen aus dem Ende der Zahl (der Wert der Aktie) bis zum / Zeichen (einschließlich des Zeichens): ", und /.

Hoffe, das hilft!

+0

Es hat mir sehr geholfen. Vielen Dank . Ich bin dankbar –