Jeg driver en hjemmeside til en klient, hvor de viser en stor database med oplysninger, som de har samlet præcist og langsomt gennem årene. De finder deres data på tværs af internettet på forskellige steder. Mere end sandsynligt skyldes det en scraper, der går gennem deres side side ved side og udvinder de oplysninger, de har brug for i en egen database. Og hvis du lurer på, ved de, at det er deres data på grund af et enkelt plantet stykke data i hver kategori på deres websted.
Jeg har lavet meget forskning på dette i løbet af de sidste par dage, og jeg kan fortælle dig, at der ikke er en perfekt catch-all-løsning. Jeg har fundet flere ting at gøre for at gøre dette lidt sværere for dem dog. Dette er hvad jeg implementerede for klienten.
Ajaxificerede paginerede data
Hvis du har mange paginerede data, og du paginerer dine data ved blot at tilføje et andet nummer til slutningen af din webadresse, det vil sige http://www.domæne.com/kategori/programmering/2 - Så laver du crawlerens job meget lettere. Første problem er, at det er i et let identificerbart mønster, så det er nemt at sætte en scraper løs på disse sider som tærte. Andet problem, uanset webadressen på de efterfølgende sider i kategorien, ville der sandsynligvis være et næste og forrige link til, at de kunne låses til.
Ved at indlæse de paginerede data gennem javascript uden en sideindlæsning, komplicerer dette betydeligt jobbet for mange scrapers derude. Google har for nylig for nylig begyndt at analysere javascript på side. Der er ringe ulempe ved at genindlæse dataene her. Du giver et par mindre sider til Google for at indeksere, men teknisk set skal paginerede data alligevel pege på rodkategorisiden via canonicalization. Ajaxify dine paged sider med data.
Randomize template output
Skrabere bliver ofte let tilpasset til dine data specifikt. De vil låses til en bestemt div id eller klasse for titlen, den 3. celle i hver række til din beskrivelse osv. Der er et let identificerbart mønster for de fleste scrapers at arbejde med som de fleste data, der kommer fra det samme bord, vises med samme skabelon. Randomize dine div ids og klassenavne, indsæt tomt tabel kolonner tilfældigt med 0 bredde. Vis dine data i en tabel på en side, i stilte divs og en kombination på en anden skabelon. Ved at præsentere dine data forudsigeligt kan den skrabes forudsigeligt og præcist.
Honningkrukke
Dette er ret pænt i sin enkelhed. Jeg har stødt på denne metode på flere sider om at forhindre site-skrabning.
- Opret en ny fil på din server kaldet gotcha.html.
- Tilføj din følgende robots.txt-fil:
Brugeragent: *
Disallow: /gotcha.html
Dette fortæller alle robotterne og edderkopperne derude indekserer dit websted for ikke at indeksere filen gotcha.html. Enhver normal webcrawler vil respektere dine robots.txt-filers ønsker og ikke få adgang til den pågældende fil. dvs. Google og Bing. Du kan faktisk implementere dette trin og vente 24 timer før du går til næste trin. Dette sikrer, at en crawler ikke ved et uheld bliver blokeret af dig på grund af at det allerede var gennemsøgning, da du opdaterede din robots.txt-fil. - Placer et link til gotcha.html et eller andet sted på din hjemmeside. Det er ligegyldigt hvor. Jeg vil anbefale i footer, men sørg for, at dette link ikke er synligt, i CSS, display: none;
- Log nu IP / General informationen til den perp, der besøgte denne side og blokere dem. Alternativt kan du komme med et script for at give dem forkerte og skraldespecifikationer. Eller måske en dejlig personlig besked fra dig til dem.
Regelmæssige webviewere kan ikke se linket, så det bliver ikke tilfældigt klikket. Anerkendte crawlere (Google for eksempel) vil respektere dine robots.txt ønsker og ikke besøge filen. Så de eneste computere, der skal snuble på tværs af denne side, er dem med ondsindede hensigter, eller nogen ser din kildekode og tilfældigt klikker rundt (og ok, hvis det sker).
Der er et par grunde, der måske ikke altid fungerer. For det første fungerer mange scrapers ikke som normale webcrawlere, og opdager ikke bare dataene ved at følge hvert link fra hver side på dit websted. Skrabere er ofte bygget til at rette ind på visse sider og kun følge visse strukturer. For eksempel kan en scraper startes på en kategoriside og derefter kun besked om at besøge webadresser med ordet / dataene i sluggen. For det andet, hvis nogen kører deres scraper på samme netværk som andre, og der er en fælles IP, der bruges, vil du have forbud hele netværket. Du skulle have en meget populær hjemmeside for at dette kunne være et problem.
Skriv data til billeder i luften
Find et mindre dataområde, ikke nødvendigvis lange tekststreng, da det kan gøre stylingen lidt vanskeligere. Uddata disse data inde i et billede, jeg føler mig helt sikker på, at der findes metoder på næsten hvert programmeringssprog for at skrive tekst til et billede dynamisk (i php, imagettftext). Dette er sandsynligvis mest effektivt med numeriske værdier, da tal giver en langt mere ubetydelig SEO fordel.
Alternativ
Dette var ikke en mulighed for dette projekt. Kræver et login efter en vis mængde sidevisninger eller viser en begrænset mængde data uden at være logget ind. Hvis du har 10 kolonner, skal du kun vise 5 til brugere, der ikke er logget ind.
Gør ikke denne fejl
Lad være med at forsøge at komme op med en slags løsning baseret på botens bruger-agent. Disse oplysninger kan let forfalskes af en skraber, der ved, hvad de laver. Google bot for eksempel kan nemt emuleres. Du vil sandsynligvis ikke forbyde Google.