Forum >> Programmazione Python >> Web e Reti >> problema ad estrapolare un determinato dato da file HTML

Pagina: 1

Buongiorno a tutti sono nuovo sul forum, è da qualche mese che mi sto cimentando con il linguaggio Python, premetto che da neofita ho iniziato studiandomi il libro "programmazione pratica per principianti assoluti" con risultati soddisfacenti.
Vi scrivo e chiedo consulto a voi per un problema che da 3 settimane a questa parte non riesco a trovare soluzione anche documentandomi sul web, e ve lo espongo:

il mio progetto consiste nel analizzare una determinata pagina web ed estrarre solo un determinato valore, per esempio come se in questa pagina web del forum io volessi solo isolare la parola "comunità" ed escludere tutto il resto.

La Sorgente è la seguente:

import bs4 as bs

import urllib.request


sito = urllib.request.urlopen('https://www.bitstamp.net/api/v2/ticker/xrpeur/')

soup = bs.BeautifulSoup(sito,'lxml')

def stampa():

stampa = print(soup.find_all('p'))

stampa()


il risultato nel shell è il seguente:


[<p>{"high": "0.27779", "last": "0.27700", "timestamp": "1551799846", "bid": "0.27700", "vwap": "0.27019", "volume": "6871114.35515104", "low": "0.26500", "ask": "0.27781", "open": "0.26598"}</p>]

>>>


ora a me servirebbe isolare solo il dato "last": 0.27700 e scartare tutto il resto,per la precisione mi serve isolare solo il valore numerico (0.27700), solo che non riesco a trovare una soluzione

premetto inoltre che il valore in questione è volubile, quindi cambia da un momento all'altro senza preavviso, ma a questo me non importa.




Vi ringrazio per le eventuali spiegazioni.


--- Ultima modifica di Ilgrabboz in data 2019-03-05 16:37:21 ---
mah sai, da come lo fai vedere, quello è un semplice paragrafo di testo puro. Quindi BS a quel punto ti molla, come ovvio che sia. Devi isolare il valore come lo cercheresti in una qualsiasi stringa di testo... splitta, usa "find", gli indici, anche in più passaggi finché non hai isolato il tuo numero.
Ok fino a qui hai confermato i ragionamenti che mi ero fatto ovvero che bs mi lascia come giusto che sia, ma con lo split posso dire quale stringa (o lettera/numero) eliminare senza eliminare i caratteri che si ripetono??
Per la precisione supponiamo che ho questa stringa

"ABCDABCD"

Io posso dire di eliminare (quindi non mandare in stampa) la lettera B nella seconda posizione ma non la B nella sesta posizione per far sì che stampi un risultato simile? "A_CDABCD"




Naturalmente mi documenteró ma volevo sapere così da riuscire a studiarmi bene la funzione che mi hai suggerito
Mah, insomma, usa split, usa gli indici, usa quel che serve. Al limite parsa tutto carattere per carattere. Cerca di capire qual è la struttura e prova a ingegnarti. Se la struttura è quello che hai fatto vedere, direi che è banale. Se splitti per "," ricavi una stringa del tipo "last: "56498168". Se splitti questa per ":" ottieni un numero chiuso tra virgolette. Se togli le virgolette, ottieni un numero (espresso ancora come stringa). Se casti a int questo, ottieni un numero vero. Non mi sembra difficile così a occhio e croce.
Sì effettivamente come lo spieghi tu non sembra difficile, domani provo con calma.
Ti ringrazio per le tue risposte

# Aggiornamento:

ho usatp la funzione split(), l 'unico problema che ora riscontro è il seguente:

Sorgente:

import bs4 as bs
import urllib.request
import requests
import string

URL = urllib.request.urlopen('https://www.bitstamp.net/api/v2/ticker/xrpeur/').read()
soup = bs.BeautifulSoup(URL, 'lxml')
price = soup.find_all('p')
for paragraph in price:
a = paragraph.string
b = a.split("h""i""g""h") # elimina la parola "high"
print(b)


Risultato del shell:


['{"', '": "0.28115", "last": "0.27900", "timestamp": "1551887389", "bid": "0.27860", "vwap": "0.27770", "volume": "7494799.05097886", "low": "0.27340", "ask": "0.27900", "open": "0.27759"}']

il problema che non riesco a far eliminare le restanti parole tipo "timestamp" - "bid" ecc ecc e far rimanere la sola parola "last": con il relativo valore numerico


qualche suggerimento?



-AGGIORNAMENTO 2:


Risolto tutto provando e riprovando e studiando. Grazie comunque



--- Ultima modifica di Ilgrabboz in data 2019-03-07 19:17:35 ---


Pagina: 1



Esegui il login per scrivere una risposta.