[Riješeno] Kako iz 1500 *.html file izvući sve description u *.txt file

[Riješeno] Kako iz 1500 *.html file izvući sve description u *.txt file

offline
  • IvanC 
  • Ugledni građanin
  • Pridružio: 30 Jun 2009
  • Poruke: 403

Kao što se može iz naslova zaključiti imam preko 1500 files koji se nalaze u nekom glavnom folderu a u njemu sub-folderi

Zna li netko postoji li programčić koji će iz svakog *.html file kopirati description u tekstualni file npr: descriptions.txt
Main Folder *1.html *2.html ...  - subfolder1    *1.html    *2.html    ...         - sub-sub-folder1    *1.html    *2.html    ...  - subfolder2 *1.html *2.html ... itd
U txt file mi treba lista koja bi sadržavala
naziv foldera - naziv file - description

naravno ako je ovo izvedivo.
programčić bi trebao sadržavati izbornu formu tj. da pita
- gdje se nalazi main folder?
- sadrži li foldere?

description u dotičnim files izgleda ovako
<meta name="Description" content="Excel 2003, funkcije financijske - ACCRINTM, Vraća stečenu kamatu za vrijednosnicu koja isplaćuje kamatu po dospijeću">
znači program treba u HTML file pronaći dotičnu liniju koda i iz nje kopirati samo description koji je između navodnika =>>>>
content="??????????????" Znači u ovom slučaju description su upitnici
ima li rješenja ovom problemu ili netko zna već gotov free program koji bi to mogao odraditi?

hvala unaprijed.



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Pridružio: 14 Feb 2008
  • Poruke: 12391

Da li je description linija uvek na istom mestu u svakom html fajlu?
Ukoliko jeste, najlakše rešenje ti je da učitaš fajl i izvučeš tačnu liniju u novi string. Dobićeš string koji dalje možeš da očistiš i odstraniš ono što ti ne treba i dobiješ čist description. Dalje taj string koristiš kao dodatak u imenu novom tekst fajlu ili kako god.

Uzevši u obzir da je ovo aplikacija za tvoje potrebe neće biti problem upotreba resursa, ja sam učitavao txt fajlove od po par GB kroz par sekundi kada sam vršio neke tekstove pa verujem da ni taj tvoj html fajl neće biti problem kada ga uvučeš.



offline
  • PHP Developer
  • Pridružio: 02 Okt 2005
  • Poruke: 546

evo u php pocetak pa vi malo doradite
<?php $path = "/var/www/"; $ite=new RecursiveDirectoryIterator($path); foreach (new RecursiveIteratorIterator($ite) as $filename=>$cur) {    if (preg_match("/\.html$/",$filename)){       echo "\r\n$filename ";       $text = file_get_contents($filename);       preg_match('/meta.name=.description..content="(.*?)"/im',$text,$maches);       if(count($maches)>1){          echo $maches[1];       }    } } ?>

offline
  • IvanC 
  • Ugledni građanin
  • Pridružio: 30 Jun 2009
  • Poruke: 403

Srki94 ::Da li je description linija uvek na istom mestu u svakom html fajlu?Uh, i mislio sam da će ovo možda biti problem. Nisam siguran da jeste ali u dosta files je. U nekim files je možda liniju dvije ispod ili iznad ali nisam siguran Sad

Ovo što si mi pojasnio je za svaku pohvalu ali ja to baš ne razumijem jer nisam programer (već čisti korisnik koji zna napraviti par klikova i postaviti path). U obzir bi došla čak i opcija da u *.txt izvuče cijelu liniju koda pa bi ja kroz Excel pokušao odstraniti višak.
folder_name - file_name - <meta name .....
|_MeD_| ::evo u php pocetak pa vi malo doradite Hvala ti ali ja to ne mogu doraditi jer kao što sam napomenuo nisam programer (trebao bi mi cijeli tutorijal step by step da bi ja to odradio Wink
pitanje: što da radim s ovim kodom i kako odraditi ono što mi treba (ako ti nije komplicirano pojašnjavati)

btw: dečki hvala na javljanju, no za sada ostaje kao na početku Crying or Very sad
ima li netko možda *.exe (pošto je ovo osobni problem a ne univerzalni)

offline
  • dr_Bora  Male
  • Anti Malware Fighter
    Rank 2
  • Pridružio: 24 Jul 2007
  • Poruke: 12280
  • Gde živiš: Höganäs, SE

Probaj ovo: https://www.mycity.rs/must-login.png


Znači, odradi drag & drop foldera sa html file-ovima na skriptu i ona će da se prošeta kroz ceo folder (i subfoldere) i iz svih html file-ova da pokuša da izvuče description.

U istom folderu gde je skripta će biti kreiran i file "Descriptions from html.txt".

Primer:

Citat:Lista html file-ova sa opisima u folderu: E:\Anti-Malware\Project - MCShield\Monitor\Signatures

E:\Anti-Malware\Project - MCShield\Monitor\Signatures\_MCShield_www\index.html - MCShield-Antimalware usb protection
E:\Anti-Malware\Project - MCShield\Monitor\Signatures\_MCShield_www\download\index.html -


Ovaj drugi nema description, je l' (isto će da se dogodi ako skripta ne nađe desc. zato što je formatiranje html-a traljavo odrađeno).



Zamisli da ovde stoji disclaimer... Razz



Edit: imaj na umu da ovo može da potraje. Samo strpljivo. Dobićeš obaveštenje kada bude gotovo.

offline
  • IvanC 
  • Ugledni građanin
  • Pridružio: 30 Jun 2009
  • Poruke: 403

dr_Bora ::Znači, odradi drag & drop foldera sa html file-ovima na skriptu i ona će da se prošeta kroz ceo folder (i subfoldere) i iz svih html file-ova da pokuša da izvuče description.ma što da pokuša? već da odradi upravo ono što treba. Što da ti kažem osim veliko Hvala.

btw: u koliko bi želio izvući samo keywords pretpostavljam da mogu samo zamijeniti ovu liniju kodanPos1 = InStr(1, sLine, "name=""description"" content=""", vbTextCompare)sa ovom linijom nPos1 = InStr(1, sLine, "name=""keywords"" content=""", vbTextCompare)

ali ako bi htio izvući TITLE kako onda ide linija koda jer nemam ovaj dio taga "name"?
pozdrav

offline
  • dr_Bora  Male
  • Anti Malware Fighter
    Rank 2
  • Pridružio: 24 Jul 2007
  • Poruke: 12280
  • Gde živiš: Höganäs, SE

IvanC ::btw: u koliko bi želio izvući samo keywords pretpostavljam da mogu samo zamijeniti ovu liniju kodanPos1 = InStr(1, sLine, "name=""description"" content=""", vbTextCompare)sa ovom linijom nPos1 = InStr(1, sLine, "name=""keywords"" content=""", vbTextCompare)

Nije dovoljno (nisam se baš toliko potrudio oko skripte Smile). Dve linije niže imaš:

nPos2 = nPos1 + 28

Ovih 28 je dužina ovoga dole (tj. ofset od pozicije gde je string pronađen do pozicije gde ono što tebe zanima počinje):

name="Description" content="

pa bi za keywords trebalo da upišeš broj 25.

         nPos1 = InStr(1, sLine, "name=""description"" content=""", vbTextCompare)          If nPos1 > 0 Then             nPos2 = nPos1 + 25

Ovo radi (testirano).


IvanC ::ali ako bi htio izvući TITLE kako onda ide linija koda jer nemam ovaj dio taga "name"?
pozdrav


Znači, string koji koristiš za prepoznavanje linije je <title> pa prva izmena mora da bude:

nPos1 = InStr(1, sLine, "<title>", vbTextCompare)

Ovime si dobio poziciju znaka < u <title>.

Sledeći korak je da se pomeriš u napred na poziciju gde počinje tekst koji ti želiš:

nPos2 = nPos1 + 7

Na kraju uklanjamo višak teksta sa kraja linije. Ranije je to bilo:

sLine = Replace(sLine, """/>", "") da bi uklonio "/> a sada će biti:

sLine = Replace(sLine, "</title>", "")


+ Kompletna procedura






Naravno, alternativa je da se ovo odradi na ispravan način i da ne moraš da menjaš skriptu svaki put:

+ Kompletan kod


Ovime bi trebalo da možeš izvući bilo koju liniju... I da, jasno mi je da sam ovo mogao odmah da uradim umesto da mudrujem bez potrebe. Razz

offline
  • IvanC 
  • Ugledni građanin
  • Pridružio: 30 Jun 2009
  • Poruke: 403

dr_Bora ::I da, jasno mi je da sam ovo mogao odmah da uradim umesto da mudrujem bez potrebe.Da bi čovjek riječi rekao. Svaka čast dr_Bora. Radi odlično. Uštedio si mi vremena. Ostalo ću ja kroz Excel posložiti.
I hvala još jednom tebi i dečkima na javljanju i pomoći.
pozdrav

Ko je trenutno na forumu
 

Ukupno su 793 korisnika na forumu :: 18 registrovanih, 1 sakriven i 774 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: darkangel, goxin, havoc995, ILGromovnik, ivica976, KOV, Krvava Devetka, Kubovac, ljubacv, mikrimaus, milenko crazy north, RJ, royst33, sabros, saputnik plavetnila, strela, wizzardone, šumar bk2