Vés al contingut

Tema de Viquipèdia:La taverna/Tecnicismes

Darrera edició del resum per Pere prlpz 16:49, 23 des 2015 fa 8 anys

Caràcters d'escapament amb Python

Yuanga (discussiócontribucions)

Bones! Des de fa uns dies estic en la fase de disseny d'un bot que ens ajudi a xuclar informació d'una pàgina web per crear infotaules per a minerals, gràcies a l'aportació inicial d'en @Pere prlpz.

M'he trobat amb un dubte que sóc incapaç de resoldre, i és que la majoria de paràmetres me'ls està agafant prou bé excepte un parell, en concret "descobriment" i "diafanitat". Algú sabria dir-me què estic fent malament? Podeu veure el codi a la pàgina del bot. Gràcies!

Poso aquí el codi també:

descobriment = ''
if re.search('<div class="mindatath">Year of Discovery:</div><div class="mindatam2">.*</div>',textarbre):
    descobriment=re.findall('<div class="mindatath">Year of Discovery:</div><div class="mindatam2">(.*)</div>',textarbre)[0].strip()
    print "descobriment: ",descobriment
Yuanga (discussiócontribucions)

Pel que he pogut veure, quan

re.search('')

busca una etiqueta d'enllaç <a> no dóna problemes; només quan el text que busca no conté l'etiqueta d'enllaç és quan no mostra resultats. Espero que això serveixi per ajudar a treure l'entrellat.

Pere prlpz (discussiócontribucions)

Veient una mostra de pàgina del mindat a http://www.mindat.org/min-96.html i el seu codi html, que és el que el programa fa servir (la variable textarbre), crec que el problema és amb les cometes, perquè a la pàgina hi veig <div class='mindatath'> en comptes de <div class="mindatath">, tot i que fa servir <div class="mindatam2">. Introduir una cadena que conté " i ' a la vegada amb Python s'ha de fer a trossos, però és possible. Jo provaria de fer:

descobriment = ''

if re.search("<div class='mindatath'>Year of Discovery:</div>"+'<div class="mindatam2">.*</div>',textarbre):

    descobriment=re.findall("<div class='mindatath'>Year of Discovery:</div>"+'<div class="mindatam2">(.*)</div>',textarbre)[0].strip()

    print "descobriment: ",descobriment


O sigui, la cadena la faig concatenant-ne dues amb el signe de sumar. La primera conté ' però no és problema perquè està delimitada amb ", i la segona conté " però no és problema perquè està delimitada amb '.

O sigui, per delimitar cadenes ' i " són caràcters equivalents en Python, però segueixen essent dos caràcters diferents en comparar el contingut de les dues cadenes.

Vriullop (discussiócontribucions)

El mateix, amb el caràcter d'escapament:

re.findall("<div class='mindatath'>Year of Discovery:</div><div class=\"mindatam2\">(.*)</div>", textarbre)

O al revès:

re.findall('<div class=\'mindatath\'>Year of Discovery:<div class="mindatam2">(.*)</div>', textarbre)
Yuanga (discussiócontribucions)

Gràcies @Pere prlpz i @Vriullop però no m'ha funcionat. He aconseguit treure la data de "descobriment" canviant el codi d'aquesta manera:

descobriment = ''
    if re.search('Year of Discovery:</div><div class="mindatam2">....</div>',textarbre):
        descobriment=re.findall('Year of Discovery:</div><div class="mindatam2">(....)</div>',textarbre)[0].strip()
        print "descobriment: ",descobriment

Però només serveix per aquest paràmetre (ja que conec el seu patró), amb "diafanitat" continua sense funcionar, per exemple.

Yuanga (discussiócontribucions)

Solucionat, en el cas de la "diafanitat" ho he resolt escapant els parèntesi. Gràcies novament, seguim endavant!