Jeg driver et nettsted for en klient der de viser en stor database med informasjon som de har samlet nøyaktig og sakte gjennom årene. De finner dataene sine på nettet forskjellige steder. Mer enn sannsynlig skyldes det at en skraper går gjennom siden deres side for side og trekker ut informasjonen de trenger i en egen database. Og i tilfelle du lurer på, vet de at det er dataene deres på grunn av et enkelt plantet stykke data i hver kategori på nettstedet deres.
Jeg har forsket mye på dette de siste dagene, og jeg kan fortelle deg at det ikke er en perfekt løsning for å fange alt. Jeg har funnet flere ting å gjøre for å gjøre dette litt vanskeligere for dem. Dette er hva jeg implementerte for klienten.
Ajaxified paginerte data
Hvis du har mye paginert data, og du paginerer dataene dine ved å bare legge til et annet nummer på slutten av nettadressen, dvs. http://www.domain.com/category/programming/2 - Så lager du crawler jobben så mye enklere. Det første problemet er at det er i et lett identifiserbart mønster, så det er enkelt å lage en skrape løs på disse sidene. Det andre problemet, uavhengig av URL-adressen til de påfølgende sidene i kategorien, vil det sannsynligvis være en neste og forrige kobling for dem å låse på.
Ved å laste inn de paginerte dataene gjennom javascript uten omlasting av sider, kompliserer dette jobben betydelig for mange skrapere der ute. Google startet bare nylig selv med å analysere javascript på siden. Det er liten ulempe å laste inn dataene som dette. Du gir noen få mindre sider for Google å indeksere, men teknisk sett skal paginerte data alle peke til rotkategorisiden via kanonisering. Ajaxify sidene dine med data.
Tilfeldig malutgang
Skrapere vil ofte tilpasses litt for dine data. De vil låse seg til et bestemt div ID eller klasse for tittelen, den tredje cellen i hver rad for beskrivelsen din, etc. Det er et lett identifiserbart mønster for de fleste skrapere å jobbe med som de fleste data som kommer fra samme tabell, vises med samme mal. Tilfeldig div-ID og klassenavn, sett inn tomme tabellkolonner tilfeldig med 0 bredde. Vis dataene dine i en tabell på en side, i stilte divisjoner og en kombinasjon på en annen mal. Ved å presentere dataene dine forutsigbart, kan de skrapes forutsigbart og nøyaktig.
Honningkrukke
Dette er ganske pent i sin enkelhet. Jeg har kommet over denne metoden på flere sider om å forhindre skraping av nettsteder.
- Lag en ny fil på serveren din som heter gotcha.html.
- Legg til følgende i robots.txt-filen:
Bruker agent: *
Ikke tillatt: /gotcha.html
Dette forteller alle robotene og edderkoppene der ute som indekserer nettstedet ditt for ikke å indeksere filen gotcha.html. Enhver vanlig webcrawler vil respektere ønskene til robots.txt-filen din og ikke få tilgang til den filen. dvs. Google og Bing. Det kan være lurt å faktisk implementere dette trinnet, og vent i 24 timer før du går til neste trinn. Dette vil sikre at en gjennomsøker ikke ved et uhell blir blokkert av deg på grunn av det faktum at det allerede var midt i gjennomgangen da du oppdaterte robots.txt-filen. - Plasser en lenke til gotcha.html et sted på nettstedet ditt. Spiller ingen rolle hvor. Jeg vil anbefale i bunnteksten, men sørg for at denne lenken ikke er synlig, i CSS, visning: ingen;
- Nå logger du IP / generell informasjon til perpene som besøkte denne siden og blokkerer dem. Alternativt kan du komme med et skript for å gi dem uriktige data og søppeldata. Eller kanskje en fin personlig melding fra deg til dem.
Vanlige nettlesere vil ikke kunne se lenken, så den vil ikke klikkes ved et uhell. Anerkjente crawlers (for eksempel Google) vil respektere ønskene til robots.txt og ikke besøke filen. Så, de eneste datamaskinene som skal snuble over denne siden er de med ondsinnede intensjoner, eller noen som ser på kildekoden din og klikker tilfeldig rundt (og å, hvis det skjer).
Det er noen årsaker til at dette ikke alltid fungerer. For det første fungerer ikke mange skrapere som vanlige websøkere, og oppdager ikke bare dataene ved å følge hver lenke fra hver side på nettstedet ditt. Skrapere er ofte bygget for å fikse på visse sider og følger bare visse strukturer. For eksempel kan en skraper startes på en kategoriside, og bare få beskjed om å besøke nettadresser med ordet / dataene i sneglen. For det andre, hvis noen kjører skraperen sin i det samme nettverket som andre, og det er en delt IP som brukes, vil du ha forbud mot hele nettverket. Du må ha et veldig populært nettsted for at dette skal være et problem.
Skriv data til bilder mens du er på farten
Finn et mindre datafelt, ikke nødvendigvis lange tekststrenger, da dette kan gjøre stylingen på siden litt vanskeligere. Skriv ut disse dataene inne i et bilde, jeg føler meg ganske trygg på at det finnes metoder på omtrent hvert programmeringsspråk for å skrive tekst til et bilde dynamisk (i php, imagettftext). Dette er sannsynligvis mest effektivt med tallverdier ettersom tall gir en mye mer ubetydelig SEO-fordel.
Alternativ
Dette var ikke et alternativ for dette prosjektet. Krever innlogging etter en viss sidevisning, eller viser en begrenset mengde data uten å være logget inn. Dvs. hvis du har 10 kolonner, viser du bare 5 til brukere som ikke er logget inn.
Ikke gjør denne feilen
Ikke bry deg om å prøve å komme på en slags løsning basert på brukeragenten til bot. Denne informasjonen kan lett bli forfalsket av en skraper som vet hva de gjør. Google-bot for eksempel kan enkelt emuleres. Du vil sannsynligvis ikke forby Google.