pythonita | Unsorted

Telegram-канал pythonita - Python Italia

3046

Network: @flamesnetwork

Subscribe to a channel

Python Italia

Se tutti i field sono fatti in un modo unico allora puoi parsare con una regex, altrimenti puoi avere un valore che può essere assegnato a diversi field e non ci puoi fare nulla, credo

Читать полностью…

Python Italia

no ma quella ok, interessa sapere se puoi avere un field (della riga) mancante e il successivo o uno dei successivi presenti

Читать полностью…

Python Italia

Se é cosi vai di regex come dicevano prima

Читать полностью…

Python Italia

Allora con il generatore dovrebbe uscire molto carino perché puoi direttamente chiamare next sul generatore e in automatico se non c'è niente ti dà None così non é solo molto più efficiente perchè non allochi e non fai operazioni extra ma ottieni anche l'informazione di quali field sono presenti e quali no, quelli che non ci sono saranno None perchè é quello che ritorna se chiami next su un generatore vuoto

Читать полностью…

Python Italia

Per capirci, mi ha dato questo:

from bs4 import BeautifulSoup
from bs4.element import Tag, NavigableString

html = """
<td>18:00<br><span style="font-size:10px">28 days</span></td>
<td> TEXT1 <br><span style="font-size:10px">TEXT2</span></td>
"""

soup = BeautifulSoup(html, "html.parser")
td_list = soup.find_all("td")

def parse_td(td):
    # testi dentro gli <span>
    span_texts = [s.get_text(strip=True) for s in td.find_all("span")]

    # testi fuori dallo span: scorri i contenuti figli e prendi solo le NavigableString
    outer_parts = []
    for node in td.contents:
        # se è una stringa (NavigableString) -> strip e aggiungi
        if isinstance(node, NavigableString):
            text = node.strip()
            if text:
                outer_parts.append(text)
        # se è un Tag diverso dallo span (es. <b>, <i>, ecc.), estrai il suo testo
        elif isinstance(node, Tag) and node.name != "span":
            text = node.get_text(" ", strip=True)
            if text:
                outer_parts.append(text)

    outer_text = " ".join(outer_parts)  # unisci parti separate da spazi
    return outer_text, span_texts

for td in td_list:
    outer, spans = parse_td(td)
    print("Outer:", outer)
    print("Spans:", spans)
    print("---")

Читать полностью…

Python Italia

Ci darò un occhio appena torno a casa, ho provato a mandarlo anche a gpt ma non ho ricevuto risposte utili

Читать полностью…

Python Italia

Aggiungici poi che la data è un normale tr posto sulla tabella e scorrendola si incontrano date di giorni precedenti

Читать полностью…

Python Italia

Esatto, ma stavo cercando, che magari c'era un metodo che era più adatto, perchè comunque lui per fare quella roba sta già iterando sulle stringhe singole, quindi il metodo prende già la lista di strighe(che ti serve a te) le concatena e te le dà, poi tu devi sconcatenarle per riottenere qualcosa che aveva già prima, non ha senso computazione totalmente inutile

Читать полностью…

Python Italia

no certo ma a te servono i singoli valori giusto? non ti serve la sola stringa intera(?)

Читать полностью…

Python Italia

spe, td.get_text(" ", True) é una stringa con gli spazi come separatore e rappresenta una riga?

quindi é nel formato:

"{orario} {titolo} {desc} ..."?

E tu vuoi evitare di prendere orario nel loop di td perchè lo conosci già prima che inizi quel loop?

Читать полностью…

Python Italia

Che sono campi con qualcosa a discapito di " "

Читать полностью…

Python Italia

Al momento sto provando con un

td.get_text(" ", True)


Dove td è ovviamente

for td in tr.find_all("td")


E sto provando ad ovviare al mio problema così

Читать полностью…

Python Italia

Quello che vedo io è solo un pattern che ricorda un orario/durata

Читать полностью…

Python Italia

Basta uno strip, ma comunque la cosa migliore é evitare direttamente questo check nel loop (che dovrà fare per ogni elemento, ma gli serve solo per il primo elemento) se sai che é il primo con uno slice lo skippi

Читать полностью…

Python Italia

Se la prima cella di ogni riga contiene sempre l'orario si esclude a priori facilmente con una regex

Читать полностью…

Python Italia

<td class="123"></td>
<td>...</td>

Oddio ci sono casi così, sì

Читать полностью…

Python Italia

ti faccio vedere una riga completa aspetta

Читать полностью…

Python Italia

ah però io ho assunto che sono sempre in ordine, e se ne manca uno poi gli altri che seguono non ci sono, ma sarebbe un problema che avresti anche con get_text.

Puoi avere una cosa come:

orario titolo desc

Quindi quando vai a vedere i child ottieni:

orario desc

?

Читать полностью…

Python Italia

Esatto, ora non ricordo preciso se 8 o 7 ma dubito cambi di troppo la cosa

Читать полностью…

Python Italia

E hai anche una length di questa lista che varia da 4 a 8 giusto?

Читать полностью…

Python Italia

Se usassi td.strings ? da doc dice che ritorna solo NavigableString (che mi pare é quello che ti interessa, e CData e le yelda quindi dovrebbe essere un generatore, puoi usare direttamente questo, filtrando con isistanceof

Читать полностью…

Python Italia

Eh sì, purtroppo sta tabella è fatta anche male senza classi o altro e ho anche il fastidio che non tutti sono span ma diventano <a> (a caso) quindi non posso filtrare per quello

Читать полностью…

Python Italia

Neanche quello è un problema, mi basta usare split con lo spazio in quel caso

Читать полностью…

Python Italia

Però fare pulizia di quella stringa non penso sia troppo rallentante

Читать полностью…

Python Italia

Scusami? Una tabella nella tabella?

Читать полностью…

Python Italia

con fissi intendi che é uguale per ogni td in tr.find_all("td")?

Читать полностью…

Python Italia

Tecnicamente dovrebbe essere

Orario | Titolo | Desc | ... |
Ogni riga ha generalmente 8 campi anche se altri sono 4, quelli fissi sono sempre i primi 3 di cui il primo è inutile dato che coincide con la partenza del cron

Читать полностью…

Python Italia

Lo sai tu che deve matchare solo questo

Читать полностью…

Python Italia

oddio, non é un po' esagerato? deve solo matchare esattamente "18:00", la cosa migliore sarebbe che prendere lo slice dell'iterabile e saltare il primo elemento, che é quello che contiene il 18:00

Читать полностью…

Python Italia

mh credo che farò così, in effetti non ci avevo pensato

Читать полностью…
Subscribe to a channel