Seite 1 von 1

web scraping zeichen weglassen

Verfasst: Samstag 29. März 2014, 20:43
von icebox
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 :-)

Re: web scraping zeichen weglassen

Verfasst: Samstag 29. März 2014, 21:06
von 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.

Re: web scraping zeichen weglassen

Verfasst: Samstag 29. März 2014, 21:44
von icebox
sry mir sind die begriffe noch nicht so gängig wie wandel ich das in eine reine zahl denn um

danke ;-)

Re: web scraping zeichen weglassen

Verfasst: Samstag 29. März 2014, 21:53
von BlackJack
@icebox: Grundlagentutorial zu den grundlegenden Datentypen durcharbeiten. ;-) In der Python-Dokumentation gibt es zum Beispiel ein Tutorial.

Re: web scraping zeichen weglassen

Verfasst: Samstag 29. März 2014, 22:22
von icebox
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

-.-

Re: web scraping zeichen weglassen

Verfasst: Samstag 29. März 2014, 22:54
von BlackJack
@icebox: Was haben die Äpfel denn jetzt mit dem Problem zu tun eine Bytekette in eine Gleitkommazahl umzuwandeln?

Re: web scraping zeichen weglassen

Verfasst: Samstag 29. März 2014, 23:07
von icebox
das ist der teil aus der Documentation den du meintest oder nicht ^^

sind äpfel hier meine liste mit meinen bytes

Re: web scraping zeichen weglassen

Verfasst: Samstag 29. März 2014, 23:43
von 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.

Re: web scraping zeichen weglassen

Verfasst: Sonntag 30. März 2014, 12:58
von icebox
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

Re: web scraping zeichen weglassen

Verfasst: Sonntag 30. März 2014, 13:28
von 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.

Re: web scraping zeichen weglassen

Verfasst: Sonntag 30. März 2014, 13:34
von Sirius3
@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())

Re: web scraping zeichen weglassen

Verfasst: Sonntag 30. März 2014, 13:48
von icebox
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

-.-

Re: web scraping zeichen weglassen

Verfasst: Sonntag 30. März 2014, 13:50
von icebox
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^^

Re: web scraping zeichen weglassen

Verfasst: Sonntag 30. März 2014, 14:24
von 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.

Re: web scraping zeichen weglassen

Verfasst: Sonntag 30. März 2014, 14:39
von icebox
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

Re: web scraping zeichen weglassen

Verfasst: Sonntag 30. März 2014, 19:38
von 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()