web scraping zeichen weglassen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
icebox
User
Beiträge: 8
Registriert: Samstag 29. März 2014, 20:39

hey leute kann mir einer helfen :-)

Code: Alles auswählen

import urllib.request
import re
htmlfile = urllib.request.urlopen("http://www.plus500.de/Instruments/BTCUSD?gclid=CPH-mq76q70CFa3LtAod-FgAAQ")
htmltext = htmlfile.read()
regex = b'<span id="ctl00_ContentPlaceMain1_LabelBuyPrice">(.+?)</span>'
pattern = re.compile(regex)
price = re.findall(pattern, htmltext)
print(price)
undzwar^^ der gibt das so aus [b'503.68']

ich hätte es gerne so 503.68 so das ich damit später rechnen kann als variable :-)
Zuletzt geändert von Anonymous am Samstag 29. März 2014, 21:00, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
BlackJack

@icebox: Ich weiss jetzt nicht so recht was der Titel des Beitrags bedeuten soll, denn da ist doch gar kein Zeichen zum weg lassen. In der Liste ist ein `bytes`-Objekt mit den Bytewerten die als ASCII interpretiert die Zeichenfolge 503.68 ausmachen. Das musst Du halt in eine Zahl umwandeln.

Allerdings würde ich an Deiner Stelle erst mal das Vererbeiten von HTML mit regulären Ausdrücken sein lassen. Für so etwas gibt es HTML-Parser. Zum Beispiel BeautifulSoup oder `lxml.html`.

Auch wenn in Python 3.x die `urllib` etwas aufgeräumt wurde, würde ich trotzdem das externe `requests`-Paket empfehlen.
icebox
User
Beiträge: 8
Registriert: Samstag 29. März 2014, 20:39

sry mir sind die begriffe noch nicht so gängig wie wandel ich das in eine reine zahl denn um

danke ;-)
BlackJack

@icebox: Grundlagentutorial zu den grundlegenden Datentypen durcharbeiten. ;-) In der Python-Dokumentation gibt es zum Beispiel ein Tutorial.
icebox
User
Beiträge: 8
Registriert: Samstag 29. März 2014, 20:39

das ist politsch uncorect hab das damit probiert aber das geht nicht

>>> "Äpfel".encode('utf-8')
b'\xc3\x84pfel'

aber mit decode das bleibt gleich

-.-
BlackJack

@icebox: Was haben die Äpfel denn jetzt mit dem Problem zu tun eine Bytekette in eine Gleitkommazahl umzuwandeln?
icebox
User
Beiträge: 8
Registriert: Samstag 29. März 2014, 20:39

das ist der teil aus der Documentation den du meintest oder nicht ^^

sind äpfel hier meine liste mit meinen bytes
BlackJack

@icebox: Nein das war nicht das was ich meinte. `bytes.decode()` und `str.encode()` wandeln zwischen Byteketten und Zeichenketten um, aber Du willst ja eine Bytekette in eine Gleitkommazahl umwandeln. Steht tatsächlich nicht explizit im Tutorial, jedenfalls weder beim Abschnitt über Zahlen noch bei dem über Zeichenketten. Aber das Gleitkommazahlen den Typ `float` haben steht da.
icebox
User
Beiträge: 8
Registriert: Samstag 29. März 2014, 20:39

ich weis das es float ist was ich brauche double oder float ist das ist in c# c++ java wahrscheinlich auf dem jupiter unter jupiter c# auch dennoch ist der still von python koplett anders als bei anderen programmiersprachen. und deswegen da ich niemanden hab der mir helfen kann fragte ich hier.......

gruss ice
BlackJack

@icebox: Ähm, wie meinen? Gibt's den Satz (oder die Sätze?) auch in verständlich mit Zeichensetzung und in deutscher Grammatik?

Schau Dir die Dokumentation zu `float()` an.
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@icebox: wo steckst Du denn gerade fest? Verwendest Du inzwischen »lxml« um Probleme mit dem Encoding und Parsing zu umgehen?

Code: Alles auswählen

import lxml.html
htmltree = lxml.html.parse('http://www.plus500.de/Instruments/BTCUSD?gclid=CPH-mq76q70CFa3LtAod-FgAAQ')
for price in htmltree.xpath('//span[@id="ctl00_ContentPlaceMain1_LabelBuyPrice"]'):
    print float(price.text_content())
icebox
User
Beiträge: 8
Registriert: Samstag 29. März 2014, 20:39

hey die module würde ich auch gerne benutzten aber ich habe windows 7 und benutzte python 3 hab da nach lösungen gesucht aber war nicht erfolgreich

deswegen probiere ich es auf dem weg denn ich da oben programmiert habe

-.-
icebox
User
Beiträge: 8
Registriert: Samstag 29. März 2014, 20:39

bei python 2.7 ging es ich hatte da irgendwie alles einfach so einbinden können aber dachte python 3 sei neuer^^

also wenn ich mich schon mit python anfange zu beschäftigen, ist schon seltsame programmier sprache^^
BlackJack

@icebox: Für den produktiven Einsatz verwende ich Python 2.7. Bei 3.x gibt es ja sogar Diskussionen ob sich das überhaupt hält oder ob's stirbt oder so vor sich hin vegetiert, weil's kaum jemand benutzt.
icebox
User
Beiträge: 8
Registriert: Samstag 29. März 2014, 20:39

das habe ich befürchtet

nun erklärt sich auch warum man kaum informationen algemein über python 3 findet, wobei das internet von python 2.7 überschwemt ist..

dann wechel ich wieder zurück^^ lol
BlackJack

Mit `requests` und `bs4`:

Code: Alles auswählen

#!/usr/bin/env python
from __future__ import print_function
import bs4
import requests


def main():
    response = requests.get(
        'http://www.plus500.de/Instruments/BTCUSD',
        params={'gclid': 'CPH-mq76q70CFa3LtAod-FgAAQ'}
    )
    soup = bs4.BeautifulSoup(response.text)
    price = float(
        soup.find('span', id='ctl00_ContentPlaceMain1_LabelBuyPrice').text
    )
    print(price)


if __name__ == '__main__':
    main()
Antworten