2 Stimmen

Python-Code zum Durchsuchen einer Url

Hey, also versuche ich, den aktuellen Ölpreis zu ermitteln und dann ein paar Berechnungen für eine Hausarbeit anzustellen. Ich habe Probleme, die Zahlen zu finden, die ich auf der Website brauche. Hier ist mein Code

    # Module oilcost.py to compute the delivery cost for home heating oil.
# Assume your delivery company charges a 10% fee on top of the price 
# per gallon.  The module should take one command line argument 
# indicating the number of gallons needed and should output the 
# total cost.

import sys
import re
import urllib

def getOilPrice(url):
    f = urllib.urlopen(url)
    html=f.read()
    f.close()
    match = re.search(r'<span class="dailyPrice">( d+.? d+)</span>', html)
    return match.group(1) if match else '0'

def outputPrice(oilprice, gallons, total):
    print 'The current oil price is $ %s' %oilprice

def main():
    url = 'http://www.indexmundi.com/commodities/?commodity=heating-oil'
    oilprice = float(getOilPrice(url))     # Create this method
    gallons = float(sys.argv[1])                      # Get from command line
    total = (gallons * 1.1) * oilprice
    outputPrice(oilprice, gallons, total)  # Create this method
if __name__ == '__main__':
    main()

Kann mir jemand sagen, was ich falsch mache?

2voto

Das Parsen von HTML ist nicht ungefährlich; aber für die Zwecke der Hausaufgaben ist das vielleicht nicht so wichtig; Dies ist eine gute Gelegenheit, etwas über reguläre Ausdrücke zu lernen.

auf der Linie:

match = re.search(r'<span class="dailyPrice">( d+.? d+)</span>', html)
#                                              ^    ^

Sie haben einige d die auf den wörtlichen Buchstaben d . könnten Sie möglicherweise gemeint haben \d (das ist ein Backslash)?

1voto

beerbajay Punkte 18384

Ihre Regex stimmt nicht mit dem Inhalt der Seite überein. Sie haben:

( d+.? d+)

Aber die Seite hat:

3.23

Ihre Regex passt auf: ein Leerzeichen, gefolgt von einem oder mehreren d Zeichen, gefolgt von einem beliebigen optionalen Zeichen, gefolgt von einem Leerzeichen, gefolgt von einem oder mehreren d Zeichen. Das könnte besser funktionieren:

(\d+(\.\d+)?)

Das heißt: eine oder mehrere Ziffern, gefolgt von einer fakultativen Gruppe, bestehend aus einem Literal . Zeichen und eine oder mehrere Ziffern.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X