Helló!
Különböző publikus Facebook oldalak tartalmát kell elemezzem, Ehhez szeretnék kérni egy kis segítséget.
Így néz ki egy post lynx-vel kidumpolva:
Egymillióan a magyar sajtószabadságért
A szervezet egyben harcot hirdet az értékpluralizmus ellen, szerintük a fenti
értékekkel egyet nem értők a rossz, a károkozás, az erkölcstelenség, az
embertelenség és a hazugság képviselői, ezért a médiából cenzúrázni kellene
őket – hangsúlyozza a Magyar LMBT Szövetség közleménye.
See translation
A kirekesztés nem tudomány
gepnarancs.hu
A Magyar LMBT Szövetség tiltakozásának ad hangot, amiért Magyar
Családtudományi Társaság néven homofób, kirekesztő nézeteket
tudományos programként népszerűsíteni kívánó szervezet jött létre.
Különösen aggasztónak tartja, hogy a szervezet létrehozása fölött
állami szervek és vezetőik bábáskodtak.
(Submit) LikeUnlike · [BUTTON Input] (not implemented)_______ ·
Share · 27 February at 10:30 ·
+
+ 191 people like this.
+
+
o View all 85 comments
60 shares60 shares
+
Write a comment...__________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
Press Enter to post your comment.
Comment
Ebből szeretném kinyerni a "Egymillióan a magyar sajtószabadságért" és a "See translation" közötti részre (ez maga a post szövege).
A dátumra, ami az első Share és az új sor között van.
A likeok számára ami a "people like this." szöveg előtti szám.
A commentek számára ami a "View all XX comments" -ben lévő szám.
Valamint a megosztások számára ami a "shares" rész után van.
(Aztán nyilván, újra a következő poston.)
Ezt szeretném úgy rendezni hogy:
Post&Dátum&likok_száma&kommentek_száma&megosztások_száma&
Post&Dátum&likok_száma&kommentek_száma&megosztások_száma&
Hogyha tudna segíteni valaki azt nagyon megköszönném. :)
- 5314 megtekintés
Hozzászólások
es?
hol tartasz most?
hol akadtal el?
t
- A hozzászóláshoz be kell jelentkezni
sed-del és awk-val próbáltam kikanalazni a megfelelő részeket, de már a postok kinyerése is kidarcba fulladt.
- A hozzászóláshoz be kell jelentkezni
"awk-val próbáltam kikanalazni a megfelelő részeket, de már a postok kinyerése is kidarcba fulladt."
Pedig a post kinyerését azért egy rendkívül egyszerű feladatnak mondhatnánk:
awk 'NR > 1 { if ($0 == "See translation") exit; else print }'
A többi sem olyan bonyolult. Több egymást követő, a topiknyitóban megadott mintájú postokra, nem túl szépen, csak nagy vonalakban, de könnyen érthetően:
{
++PRC;
if (PRC <=1) next
if (SEE == 0)
if ($0 != "See translation")
printf "%s", $0
else
SEE = 1
else {
switch ($0) {
case /\+ [0-9]+ people like this.$/:
L = $2; next
case /^Share · .* ·.*/:
D = $0; gsub(/(^Share[^0-9]+|[^0-9]*$)/, "", D); next
case /^o View all [0-9]+ comments$/:
C = $4; next
case /^[0-9]+ shares[0-9]+ shares$/:
S = $1; next
case /^Comment$/:
PRC = 0; SEE = 0; print "&" D "&" L "&" C "&" S "&"; next
}
}
}
A fenti kód nem teljes, de el tudsz indulni belőle, és tovább tudod faragni, ha ragaszkodsz ehhez a nem éppen egyszerű Firefox->lynx->awk vonalhoz. Nyosigomboc írta alább, vannak ehhez céleszközök, nem biztos, hogy ez a módszer a célszerű.
- A hozzászóláshoz be kell jelentkezni
Ha már awk, ajánlom megfontolásra a méltánytalanul ritkán felvetődő tartományminta (eredetiben: range pattern) használatát.
Itt pl.:
NR==1,/^See translation/ {print}
külön szépsége, hogy a perlben létezik analógiája:
if (($.==1)../^See translation/) {print}
- A hozzászóláshoz be kell jelentkezni
Az meg pláne szépsége, hogy awk-ban fölösleges is az a {print} .
- A hozzászóláshoz be kell jelentkezni
Jaja, de itt nem mertem "lefelejteni".
- A hozzászóláshoz be kell jelentkezni
Ezt miert lynx dumpbol csinalod?
Mi a konkret URL? (hogy ugyanazon teszteljek)
Mihez kell segitseg?
--
R2D2 a filmtörténet legmocskosabb szájú karaktere.
Minden szavát kisípolták.
- A hozzászóláshoz be kell jelentkezni
Ez nem adja meg a postok url-jet, csak a profilt, ahol omlesztve vannak a postok a falon.
--
R2D2 a filmtörténet legmocskosabb szájú karaktere.
Minden szavát kisípolták.
- A hozzászóláshoz be kell jelentkezni
A FB-on nincs linkje a postoknak. A postok sorban szerepelnek egy JS-el gazdagon díszített oldalon. Azonosítója persze van az egyes postoknak (sőt, mindennek), de én nem ismerek módszert, amivel az egyes ID-hez tartozó postokat ki lehetne kanalazni. Már ha nincs erre - vagy nem ír erre valaki - app(ot), de azt az appot a figyelni kívánt oldal gazdájának engedélyezni kell, hogy hozzáférjen a postokhoz (is).
- A hozzászóláshoz be kell jelentkezni
Szoval te sem tudsz olyan URL-t, amin a szoveg a postnak megfelelo modon latszik, amivel tesztelni lehetne. Nem baj, majd Trollhättanben tovabbkepez Gabu.
--
R2D2 a filmtörténet legmocskosabb szájú karaktere.
Minden szavát kisípolták.
- A hozzászóláshoz be kell jelentkezni
Én úgy csináltam, hogy a Facebook falat "meghosszabbítottam" odáig amikortól kb kezdeném az elemzést, Firefox-val lementettem az oldalt, majd azt lynx --dump-pal hoztam ilyen formátumra.
Először a forráskódban akartam túrni de annyira kusza össze-visszaság van benne, hogy inkább ennél maradnék.
Elvileg a Facebook API-ja többé-kevésbé lehetőséget adna arra, hogy kinyerhető legyen egyesével a sok post de ez szerintem már bőségesen meghaladja a tudásomat.
- A hozzászóláshoz be kell jelentkezni
Próbáltad már a simplehtmldom-ot? Az FB forrásával az a baj, hogy több benne a JS mint a html, így picit macerás a dumpolása, de ha megvan egy html lap, akkor abban elég jól lehet vele bogarászni.
Amit én csinálnék: firefox, tools, web developer, inspect, ezzel ki tudod bogarászni, hogy melyik div-ben mit kell keresni, erre komplett példa van a manualban:
// Find all <li> in <ul>
foreach($html->find('ul') as $ul)
{
foreach($ul->find('li') as $li)
{
// do something...
}
}
- A hozzászóláshoz be kell jelentkezni
NINCS olyan URL. Ha megnézed a FB egy oldalának a forrását, akkor látni fogod, hogy 50% JS, ami kikalapálja a végleges oldalt, alig van benne hagyományos HTML rész. Gondolom így spórolnak a szerveroldali erőforrásokkal (vagy nem tudom, túl sok woodoo van benne :D).
Bár tényleg nem lett volna hátrány, ha a derék kérdező leírja, hogy miképp jutott el oda, ahol megtorpant.
- A hozzászóláshoz be kell jelentkezni
Na, és mégis van, ehehe. Kellett nekem okoskodni. És nem is olyan rém bonyolult kiszedni:
- kell a weblap dump
- abból ki kell szürcsölni a 'story_fbid%3D167903726660276"' stringet
- ebből az érdekes rész a 'story_fbid%3D' utáni ID
- amit a megfelelő URL végére biggyesztve kijön a vágyott URL:
http://www.facebook.com/sajtoszabadsagert/posts/167903726660276
Itt a '< span class="translationEligibleUserMessage" >' tartalma ami kell (legalábbis nálam)
Sajnos ezt az url-t se lehet lekarmolni wget-el, de talán rá lehet venni egy JS képes browsert, hogy nyomtasson, vagy mentse el a weblapot. De addig ez még nem nagy haladás, ugyanaz mint a főoldal, csak annyi a különbség, hogy minden post már eleve ki van bontva :(
- A hozzászóláshoz be kell jelentkezni
http://simplehtmldom.sourceforge.net/
Én ezzel csináltam blogelemzést, sík hüye vagyok a php-hez (is), mégis meg tudtam vele oldani.
- A hozzászóláshoz be kell jelentkezni
sub
- A hozzászóláshoz be kell jelentkezni
Nohát! Nem gondoltam volna, hogy az ilyesmi érdekel bárki mást. ;)
- A hozzászóláshoz be kell jelentkezni
Mostanaban elegge felkapott terulet lett, web scrapingnek hivjak, sok lib/framework keszult erre.
Amikor eloszor kellett ilyet csinalnom, meg nem voltak ennyire elterjedve, utana ugy kb. a 3. ilyen feladatomnal meguntam, es en is irtam egy ilyet (bar a kodjat tekintve eleg ronda lett).
--
R2D2 a filmtörténet legmocskosabb szájú karaktere.
Minden szavát kisípolták.
- A hozzászóláshoz be kell jelentkezni
A Calibre nevezetű programmal is meg lehet csinálni. Lehet kimeneti formátumnak txt-t választani, és parancssorból is futtatható, akár cronnal is. Egy recipe fájlt kell írnod, arra hogy mit akarsz kivágni, illetve hogy milyen legyen a kimeneti fájl felépítése. Sok ötletet lehet meríteni a már kész recipe fájlokból.
Bár, ha sem a recipe fájlokhoz, sem az awk-hoz nem értesz, akkor mindegy, hogy melyikben mélyedsz el.
-----
A kockás zakók és a mellészabások tekintetében kérdezze meg úri szabóját.
- A hozzászóláshoz be kell jelentkezni
Remelem, halad, de amugy - a perl-t nem pont erre talaltak ki?
En ertem hogy azota kavetfozni is tud, de mint ahogy weboldalt is lelkiismeret-furdalas nelkul fejlesztek php-ben, erre a perl tokeletesen alkalmas lehet.
- A hozzászóláshoz be kell jelentkezni
Sziasztok
Adott 1 sor amiben vagy van e-mail cím vagy nincs. Az a cél, hogyha van, akkor az e-mail címet ki tudjam emelni, hogy változóba tegyem.
Az e-mail cím előtt és után legalább 1 szóköz van.
Nem tudom, meg lehet-e valósítani valami trükkel?
- A hozzászóláshoz be kell jelentkezni
A rövid válasz az, hogy igen, meg lehet.
A picit hosszabb választ a kívánt nyelv hiányában most nem tudom közölni, de egy sokkal hosszabb választ tudok mutatni: http://www.regular-expressions.info/email.html
- A hozzászóláshoz be kell jelentkezni
Köszönöm, később hasznos lesz, most viszont azt hiszem egy meglepően egyszerű, favágós módszerrel sikerült megoldani:)
IFS=" "; for k in `cat lista.txt`; do echo $k | grep "@";
- A hozzászóláshoz be kell jelentkezni
grep -o '[^ ]*\@[^ ]*' lista.txt
- A hozzászóláshoz be kell jelentkezni