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 på forskjellige steder. Mer enn sannsynlig skyldes det at en skraper går gjennom sidenesiden etter side og utvider den informasjonen de trenger i en egen database. Og i tilfelle du lurer på, vet de at det er deres data på grunn av et enkelt plantet stykke data i hver kategori på deres nettsted.
Jeg har gjort mye forskning på dette de siste par dagene, og jeg kan fortelle deg at det ikke er en perfekt catch-all-løsning. Jeg har funnet flere ting å gjøre for å gjøre dette litt vanskeligere for dem. Dette er hva jeg implementerte for klienten.
Ajaxified paginated data
Hvis du har mye paginert data, og du paginerer dataene dine, bare ved å legge til et annet nummer på slutten av nettadressen din, dvs. http://www.domain.com/category/programming/2 - Da lager du crawlerens jobb så mye lettere. Første problemet er at det er et lett identifiserbart mønster, så det er enkelt å sette en skrape løs på disse sidene som kake. Andre problem, uavhengig av nettadressen til de påfølgende sidene i kategorien, mer enn sannsynlig vil det være en neste og forrige kobling for at de skal låses på.
Ved å laste inn de paginerte dataene gjennom javascript uten sidelastning, kompliserer dette jobben betydelig for mange skraper der ute. Google har nylig nylig begynt å analysere javascript på siden. Det er liten ulempe for å laste opp dataene som dette. Du gir noen få mindre sider for Google å indeksere, men teknisk sett bør paginert data alle peke til rotkategorisiden via kanonicalisering uansett. Ajaxify de sideordnede sidene med data.
Randomize template output
Skraper blir ofte tilpasset dine data spesielt. De vil låses på en bestemt div id eller klasse for tittelen, den tredje cellen i hver rad for beskrivelsen din. Det er et lett identifiserbart mønster for de fleste skraper for å jobbe med som de fleste dataene som kommer fra samme tabell, vises av samme mal. Randomize div ids og klassenavn, sett inn tomme tabell kolonner tilfeldig med 0 bredde. Vis dataene dine i et bord på en side, i stilte divs og en kombinasjon på en annen mal. Ved å presentere dataene dine forutsigbart, kan den skrapes forutsigbart og nøyaktig.
Honningkrukke
Dette er ganske pent i sin enkelhet. Jeg har kommet over denne metoden på flere sider om å forhindre at nettstedet skrapes.
- Opprett en ny fil på din server kalt gotcha.html.
- I robots.txt-filen legger du til følgende:
Bruker agent: *
Tillat: /gotcha.html
Dette forteller alle roboter og edderkopper der ute, indeksering av nettstedet ditt for ikke å indeksere filen gotcha.html. En hvilken som helst vanlig webcrawler vil respektere ønskene til robots.txt-filen din og ikke få tilgang til den filen. det vil si Google og Bing. Du kan faktisk faktisk implementere dette trinnet, og vente 24 timer før du går til neste trinn. Dette vil sikre at en robotsøker ikke ved et uhell bli blokkert av deg på grunn av at det allerede var gjennomsøking når du oppdaterte robots.txt-filen. - Legg en lenke til gotcha.html et sted på nettstedet ditt. Det spiller ingen rolle hvor. Jeg vil anbefale i footer, men sørg for at denne lenken ikke er synlig, i CSS, display: none;
- Nå logger du IP / generell informasjon til perp som besøkte denne siden og blokkerer dem. Alternativt kan du komme med et skript for å gi dem feil og søppeldata. Eller kanskje en fin personlig melding fra deg til dem.
Vanlige web-seere kan ikke se linken, så det kommer ikke ved et uhell å bli klikket. Anerkjennelige crawlere (Google for eksempel), vil respektere ønskene til robots.txt og ikke besøke filen. Så, de eneste datamaskinene som bør snuble over denne siden er de med ondsinnede intensjoner, eller noen ser kildekoden din og tilfeldigvis klikker rundt (og vel, hvis det skjer).
Det er noen grunner til at dette kanskje ikke alltid fungerer. For det første fungerer mange skraper ikke som vanlige webcrawlere, og oppdager ikke bare dataene ved å følge hvert link fra hver side på nettstedet ditt. Skraper er ofte bygget for å fikse på visse sider og følger bare visse strukturer. For eksempel kan en skraper startes på en kategoriside, og deretter bare beskjed om å besøke nettadresser med ordet / dataene i sluggen. For det andre, hvis noen kjører skraperen på samme nettverk som andre, og det er en felles IP som brukes, vil du forby hele nettverket. Du må ha en veldig populær nettside for at dette skal være et problem.
Skriv data til bilder på fluen
Finn et mindre felt med data, ikke nødvendigvis lange tekststrenger, da dette kan gjøre siden litt vanskeligere for styling. Utdata disse dataene inne i et bilde, jeg føler meg ganske trygg på at det finnes metoder i omtrent hvert programmeringsspråk for å skrive tekst til et bilde dynamisk (i php, imagettftext). Dette er trolig mest effektivt med numeriske verdier som tall gir en mye mer ubetydelig SEO fordel.
Alternativ
Dette var ikke et alternativ for dette prosjektet. Krever innlogging etter et visst antall sidevisninger, eller viser en begrenset mengde data uten å være logget inn. Hvis du har 10 kolonner, viser du bare 5 til brukere som ikke er innlogget.
Ikke gjør denne feilen
Ikke bry deg om å prøve å komme opp med en slags løsning basert på botens bruker-agent. Denne informasjonen kan lett bli spoofed av en skraper som vet hva de gjør. Google-boten for eksempel kan lett emuleres. Du vil sannsynligvis ikke forby Google.