WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Parsa (https://www.wn.se/forum/showthread.php?t=5585)

aikon 2005-01-17 23:13

Har tittat lite på sajter som prisagenter och TV-tablåer och annat, som hämtar data från andra webbplatser.

Hur kodar man mest effektivt sånt? Har testat lite i php genom att öppna en url, läsa in den i en while-loop med fgets, och sedan välja ut information med php:s ereg-funktioner. Dessa använder ju regular expressions, men är de effektiva? Borde man göra det på något annat sätt med regexp?

Mitt sätt fungerar iofs bra, men är tveksam att jag gör det på effektivaste sättet.. :unsure: Har någon en exempelkodsnutt att bjussa på? ;)

N!cklas 2005-01-18 07:46

Citat:

Originally posted by aikon@Jan 17 2005, 23:13
Har någon en exempelkodsnutt att bjussa på? ;)
..i såna fall kan jag oxå tänka mig att snylta på den..

koala 2005-01-18 22:28

Dels är preg_* snabbare än ereg, och dels är perl snabbare än PHP på detta område. Detta var mina extremt stora kunskaper inom detta ämne. ;)

jimmie 2005-01-19 01:00

Citat:

Originally posted by koala@Jan 18 2005, 22:28
Dels är preg_* snabbare än ereg, och dels är perl snabbare än PHP på detta område. Detta var mina extremt stora kunskaper inom detta ämne. ;)
Helt rätt, PCRE (Perl Compatible Regular Expressions) är snabbare än POSIX.

För att hämta in sidan kan du använda file_get_contents, den funkar bra.

kers 2005-01-19 01:53

För att plocka data från andra siter skulle jag inte använda php - där lämpar sig perl (som är designat för textbehandling) eller c (som man kan kompliera) bättre.

att använda regex kan lätt bli en mardröm också - det är bättre att använda redan existerande moduler och libs för det, för perl så rekommenderar jag HTML::Parser eller HTML::TokeParser som är guld värda :)

jimmie 2005-01-19 08:03

Citat:

Originally posted by kers@Jan 19 2005, 01:53
För att plocka data från andra siter skulle jag inte använda php - där lämpar sig perl (som är designat för textbehandling) eller c (som man kan kompliera) bättre.

att använda regex kan lätt bli en mardröm också - det är bättre att använda redan existerande moduler och libs för det, för perl så rekommenderar jag HTML::Parser eller HTML::TokeParser som är guld värda :)

Regular expressions är ju busenkelt.

Dessutom är det tillräckligt snabbt, det är inte själva sökningen i filen som är flaskhalsen utan det är hämtningen av filen som ska sökas.

Här är ett litet test som jag gjorde precis på ett helt ooptimerat script samt ett helt ooptimerat regular expression.

Hätmning av fil(från datorbutiken.com): 0.8221 s

Hämta ut 56 poster med namn, länk samt pris: 0.0016 s , dvs 1.6 ms

Hämtningstiden är 513 gånger större, dvs 51 300% mer.

Det säger väl det mesta... En optimering av själva sökningen ger ingen reel prestanda(som märks).

Robert 2005-01-19 10:18

Jag har själv screenscrapat i mina dagar (länge sedan nu) men använde lite mer krångligare metoder.
Nu sitter jag på "andra sidan" och vill skydda en viss site från ss. Hur är bästa sättet att *försvåra* en ss? Alltså inte förhindra, för det går inte.

Jag tänkte alternera outputen på olika sätt (utan att störa funktionalitet och design), men frågan är hur en sådan alternering skulle göras för att försvåra regex och andra parsningar? Tilläggas ska att siten är i xhtml vilket faktiskt i sig borde förenkla viss typ av ss (xmlparsning etc). :angry:

Vad är det vanligaste att regexp går efter? Id'n? classnamn? n-te DIV'en i outputen?

nomicon 2005-01-19 10:26

Citat:

Originally posted by Robert@Jan 19 2005, 11:18
Jag har själv screenscrapat i mina dagar (länge sedan nu) men använde lite mer krångligare metoder.
Nu sitter jag på "andra sidan" och vill skydda en viss site från ss. Hur är bästa sättet att *försvåra* en ss? Alltså inte förhindra, för det går inte.

Jag tänkte alternera outputen på olika sätt (utan att störa funktionalitet och design), men frågan är hur en sådan alternering skulle göras för att försvåra regex och andra parsningar? Tilläggas ska att siten är i xhtml vilket faktiskt i sig borde förenkla viss typ av ss (xmlparsning etc). :angry:

Vad är det vanligaste att regexp går efter? Id'n? classnamn? n-te DIV'en i outputen?

Jag har sett att vissa siter lägger in ett skräptecken mellan varje ord (dvs där det är ett blanksteg) och gör det i samma färg som bakgrunden, så att det inte syns.. Försöker man markera och kopiera texten så får man med dessa tecken också... störigt! :D

Robert 2005-01-19 10:45

Citat:

Ursprungligen postat av nomicon
Citat:

Ursprungligen postat av Robert
Jag har själv screenscrapat i mina dagar (länge sedan nu) men använde lite mer krångligare metoder.
Nu sitter jag på "andra sidan" och vill skydda en viss site från ss. Hur är bästa sättet att *försvåra* en ss? Alltså inte förhindra, för det går inte.

Jag tänkte alternera outputen på olika sätt (utan att störa funktionalitet och design), men frågan är hur en sådan alternering skulle göras för att försvåra regex och andra parsningar? Tilläggas ska att siten är i xhtml vilket faktiskt i sig borde förenkla viss typ av ss (xmlparsning etc). :angry:

Vad är det vanligaste att regexp går efter? Id'n? classnamn? n-te DIV'en i outputen?

Jag har sett att vissa siter lägger in ett skräptecken mellan varje ord (dvs där det är ett blanksteg) och gör det i samma färg som bakgrunden, så att det inte syns.. Försöker man markera och kopiera texten så får man med dessa tecken också... störigt! :D

Då sessa skräptecken måste vara taggade på något sätt för att kunna ha en annan färg så är det alldeles för enkelt att plocka bort dem ur datat.

Kanske några extra "dummy" divar, alternerande class-namn för css-klasserna/eventuellt id-namn, samt lite "vaskning" av divarna kanske borde få 10% av de intresserade ss'arna att inte orka fortsätta. Mer sätt?

grazzy 2005-01-19 11:00

Använd olika namn på css-taggarna (slumpade dom baserat på dag tex).
Använd olika element, p, div, span ovs.
Lägg in vissa bokstäver som bilder.
Variera kodning latin-1/html-tecken.
Kolla efter konstiga user-agents och fråga användaren med tex en javascriptpopup om han är en användare innan man får se den riktiga sidan.
Släng in så att sidan den kör med redirects till sig själv ibland.
Koda alltihopa i rot13 som en javascriptvariabel och avkoda det sedan och skriv ut det.


Allt det här GÅR att knäcka.. men om man dessutom slumpar olika metoder mellan olika dagar... jag tror inte jag skulle orka / bry mig iaf :-)


Alla tider är GMT +2. Klockan är nu 12:33.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson