[Python] Uklanjanje suvisnih karaktera

C, C++, Java, PHP, Ruby...

Moderator/ica: Moderatori/ce

Pravila foruma
U naslovu teme unutar uglatih zagrada navesti o kojem jeziku je riječ. Primjer: [Java]
Avatar
Bug
Postovi: 240
Pridružen/a: 18 lip 2009, 23:33
Spol: M
OS: Fedora 19, Debian 7

[Python] Uklanjanje suvisnih karaktera

Post Postao/la Bug »

Pozdrav.. Nemam nekog preteranog iskustva u Pythonu pa sam bas iz tog razloga krenuo da napravim neki mali crawler. I naravno naisao na problem zvani "regualr expression", citam dva dana RE zvanicnu dokumentaciju al nesto ne razumem izgleda...

Stvar je sledeca sa stranice trebam da uzmem tekst izmedju <div id="somediv"> pa do <div id="otherdiv">
i ja sam pokusao ovako al naravno nece
(hteo sam prvo jedan deo da uklonim pa onda drugi)

Kod: Označi sve

m = re.match(r"<div id=\"shareVideo\">", data)
m.group(0)
Kako bih mogao drugacije ovo da odradim?
Avatar
4ndY
Moderator
Postovi: 4060
Pridružen/a: 15 svi 2008, 18:05
Spol: M
OS: Fedora/KDE
Lokacija: Hamburg, DE
Kontakt:

Re: Python: Uklanjanje suvisnih karaktera

Post Postao/la 4ndY »

Bug je napisao/la: Kako bih mogao drugacije ovo da odradim?
Može se to riješiti RE-om, no ako parsaš HTML, preporučam ti neku, za tu namjenu specifičnu biblioteku:
http://www.crummy.com/software/BeautifulSoup/ - BeautifulSoup ili
http://code.google.com/p/html5lib/ - HTML5lib

Ja koristim u pravilu ovaj prvi, a tvoj problem bi riješio otprilike ovako:

Kod: Označi sve

soup = BeautifulSoup( html )
print str( soup.find( attrs={ "id" : "somediv" } ) )
A neutron walks into a bar; he asks the bartender, 'How much for a beer?' The bartender looks at him, and says 'For you, no charge.'
Avatar
jjj
Postovi: 1451
Pridružen/a: 04 lip 2009, 00:46
OS: Nepu Yvahk
Lokacija: Classyfied

Re: Python: Uklanjanje suvisnih karaktera

Post Postao/la jjj »

Podržavam 4ndyjevu preporuku i dodajem lxml na popis.

Što se regexpa tiče, oni su u Pythonu vrlo slični svim ostalim implementacijama, pa osim ako ti inače nisu problem/nešto novo, ne bi smio imati problema zbog Pythona.

Ako želiš sadržaj između ta dva taga, zašto u izrazu imaš samo prvi tag? To će matchati to što imaš u izrazu. Ili nešto propuštam?


Edit:
Zašto lxml?
Avatar
tartaglia
Postovi: 400
Pridružen/a: 13 sij 2009, 12:57
Spol: M
OS: openSuse 11.3
Lokacija: Zagreb

Re: Python: Uklanjanje suvisnih karaktera

Post Postao/la tartaglia »

m = re.match(r"<div id=\"shareVideo\">", data)
m.group(0)
re.match() ce nac samo pojavu paterna na pocetku stringa, za tvoju potrebu je bolje
re.search() ako ti treba samo prva pojava onog kaj trazis ili
re.findall() ako ti trebaju sve

znaci na prvu ovak nekak:
m=re.search('<div id="nav">(.*)<div id="body">',tekst, re.DOTALL)
m.group(1)
. znaci bilo koji znak osim \n, zato das re.DOTALL da pokupi sve
* nula ili vise takvik
() da mozes sa m.group(1) pokupit samo ovo između kaj te zanima

Inace, pravo ti vele ljudi, koristi modul ako ga vec ima
Avoid the Gates of Hell. Use Linux!
Avatar
Bug
Postovi: 240
Pridružen/a: 18 lip 2009, 23:33
Spol: M
OS: Fedora 19, Debian 7

Re: Python: Uklanjanje suvisnih karaktera

Post Postao/la Bug »

Takve sam odgovore i ocekivao :)
Probao ja BeautifulSoup ALI sa python-om 3 i naravno on pravio problema :S
Sad sam na 2.7 i sad ferca... sad jos moram da obradim podatak tipa da uklonim font i sl ...
:)
Hvala ljudi...naterali ste me da predjem na 2.7 i uradim na laksi nacin :) thanks


P.S jedno brzopotezno.. kad smo kod verzija.. ako budem citao neku knjigu da uzmem za v3 ili v2? v3 je novije ali bugovito to kontam...a dal je vredno ucenja?
Avatar
4ndY
Moderator
Postovi: 4060
Pridružen/a: 15 svi 2008, 18:05
Spol: M
OS: Fedora/KDE
Lokacija: Hamburg, DE
Kontakt:

Re: Python: Uklanjanje suvisnih karaktera

Post Postao/la 4ndY »

Bug je napisao/la: P.S jedno brzopotezno.. kad smo kod verzija.. ako budem citao neku knjigu da uzmem za v3 ili v2? v3 je novije ali bugovito to kontam...a dal je vredno ucenja?
v2 - bez puno razmišljanja, pogotovo ako tek učiš python i to isključivo zbot toga što je Internet pun primjera za v2, a v3 još nije zaživjela... Lako poslije, kad naučiš v2, pređeš na v3. ;)
A neutron walks into a bar; he asks the bartender, 'How much for a beer?' The bartender looks at him, and says 'For you, no charge.'
Avatar
Bug
Postovi: 240
Pridružen/a: 18 lip 2009, 23:33
Spol: M
OS: Fedora 19, Debian 7

Re: Python: Uklanjanje suvisnih karaktera

Post Postao/la Bug »

hvala na odgovoru 4ndY

jos jedno pitanje (da ne otvaram novu temu za jedno kratko pitanje)
kad uradim lista.sorted()
on mi poredja ['tags-1.txt', 'tags-10.txt', 'tags-2.txt', 'tags-3.txt', 'tags-4.txt', 'tags-5.txt']
kako da ga "opametim" da je tags-10.txt najveci broj? Ja razumem zasto on tako izbacuje...al mene interesuje jel moguc to izbeci? A ne mogu/ne smem da dodajem nulu kod jednocifrenih brojeva...
Avatar
4ndY
Moderator
Postovi: 4060
Pridružen/a: 15 svi 2008, 18:05
Spol: M
OS: Fedora/KDE
Lokacija: Hamburg, DE
Kontakt:

Re: Python: Uklanjanje suvisnih karaktera

Post Postao/la 4ndY »

Bug je napisao/la: jos jedno pitanje (da ne otvaram novu temu za jedno kratko pitanje)
kad uradim lista.sorted()
on mi poredja ['tags-1.txt', 'tags-10.txt', 'tags-2.txt', 'tags-3.txt', 'tags-4.txt', 'tags-5.txt']
kako da ga "opametim" da je tags-10.txt najveci broj? Ja razumem zasto on tako izbacuje...al mene interesuje jel moguc to izbeci? A ne mogu/ne smem da dodajem nulu kod jednocifrenih brojeva...
Imaš više rješenja za ovo.
Prvo je "ručno" - da očitaš taj broj iz stringa (npr. regexpom) i onda sortiraš normalno po brojevima.
Druge mogućnosti su da pogledaš što ti nudi metoda sorted():
http://docs.python.org/library/functions.html#sorted
http://wiki.python.org/moin/HowTo/Sorting/

Ovo s cmp-om se svodi na prvo rješenje - moraš napisati funkciju koja će razlikovati dvije stavke liste na način koji želiš.

Javi ako zapneš...
A neutron walks into a bar; he asks the bartender, 'How much for a beer?' The bartender looks at him, and says 'For you, no charge.'
Avatar
jjj
Postovi: 1451
Pridružen/a: 04 lip 2009, 00:46
OS: Nepu Yvahk
Lokacija: Classyfied

Re: Python: Uklanjanje suvisnih karaktera

Post Postao/la jjj »

4ndY je napisao/la:
Bug je napisao/la: P.S jedno brzopotezno.. kad smo kod verzija.. ako budem citao neku knjigu da uzmem za v3 ili v2? v3 je novije ali bugovito to kontam...a dal je vredno ucenja?
v2 - bez puno razmišljanja, pogotovo ako tek učiš python i to isključivo zbot toga što je Internet pun primjera za v2, a v3 još nije zaživjela... Lako poslije, kad naučiš v2, pređeš na v3. ;)
Istina, no ipak (s vremenom, kada osjećaš da si svladao v2 dovoljno dobro) pogledaj razlike u v3 - nisu prevelike, a dobar dio najvećih/važnijih projekata ili prelazi ili namjerava prijeći na v3.
Avatar
Bug
Postovi: 240
Pridružen/a: 18 lip 2009, 23:33
Spol: M
OS: Fedora 19, Debian 7

Re: Python: Uklanjanje suvisnih karaktera

Post Postao/la Bug »

Ok, smislio sam lakse resenje.. posto sam svakako hteo da proveravam jel fajl postoji pa da izbegnem regexp setio se da ima os.path.exists pa tako proverim fajl...mnogo lakse nego da sam izvlacio brojeve i sl...

e sad sam napravio da to lepo radi ...ostalo mi jos jedna stvar za koju mi treba ideja...
scripta ce se pokretati preko ssh-a (a i preko cron job-a) kako bi ja mogao najbolje da napravim da je mogu stopirati u slucaju da mi je potrebno(ima da radi danima treba 250k + stranica da obradi, pa da je ne cekam da ona zavrsi)
Mogao bi da ubijem ID procesa, ali kako tu da priskocim?
Nisam nikad to radio pa nema ni neku ideju...


P.s modovi ajd molim vas naziv teme da promenite u nesto korisnije "python: wanna be programer" i sl :)
Odgovori