Anonim

Jag driver en webbplats för en klient där de visar en stor databas med information som de har samlat in exakt och långsamt under åren. De hittar sina data på nätet på olika platser. Mer än troligt är det på grund av att en skrapa går igenom deras sida sida för sida och extraherar den information de behöver i en egen databas. Och om du undrar, de vet att det är deras data på grund av en enda planterad datainformation i varje kategori på deras webbplats.

Jag har gjort en hel del forskning om detta de senaste dagarna, och jag kan säga er att det inte finns en perfekt fångstlösning. Jag har hittat flera saker att göra för att göra det lite svårare för dem dock. Det här är vad jag implementerade för klienten.

Ajaxified paginerade data

Om du har många paginerade data och du paginerar dina data genom att bara lägga till ett annat nummer till slutet av din URL, dvs. http://www.domain.com/category/programming/2 - Sedan gör du sökrobotens jobb så mycket lättare. Det första problemet är att det är i ett lätt identifierbart mönster, så det är enkelt som en cirkel att lossa en skrapa på dessa sidor. Det andra problemet, oavsett webbadress för de följande sidorna i kategorin, mer än troligt skulle det finnas en nästa och föregående länk för dem att låsa fast vid.

Genom att ladda de paginerade uppgifterna via javascript utan att ladda om sidan komplicerar detta jobbet avsevärt för många skrapor där ute. Google började bara nyligen själv analysera javascript på sidan. Det är liten nackdel med att läsa in uppgifterna så här. Du tillhandahåller några mindre sidor för Google att indexera, men tekniskt sett bör paginerade data alla peka på rotkategorisidan via kanonisering. Ajaxify dina sidor med data.

Slumpmässig mallutmatning

Skrapor anpassas ofta något för dina data specifikt. De kommer att kopplas till en viss div ID eller klass för titeln, den tredje cellen i varje rad för din beskrivning, etc. Det finns ett lätt identifierbart mönster för de flesta skrapare att arbeta med eftersom de flesta data som kommer från samma tabell, visas med samma mall. Slumpa upp dina div-id och klassnamn, sätt in tomma tabellkolumner slumpmässigt med 0 bredd. Visa dina data i en tabell på en sida, i formade div och en kombination på en annan mall. Genom att presentera dina data förutsägbart kan de skrapas förutsägbart och korrekt.

Honungsburk

Detta är ganska snyggt i sin enkelhet. Jag har stött på den här metoden på flera sidor om att förhindra skrapning av webbplatser.

  • Skapa en ny fil på din server som heter gotcha.html.
  • Lägg till följande i din robots.txt-fil:
    Användaragent: *
    Disallow: /gotcha.html

    Detta berättar för alla robotar och spindlar där ute som indexerar din webbplats för att inte indexera filen gotcha.html. Alla normala webbsökare respekterar önskningarna i din robots.txt-fil och kommer inte åt den filen. dvs Google och Bing. Du kanske faktiskt vill implementera detta steg och vänta 24 timmar innan du går till nästa steg. Detta kommer att säkerställa att en sökrobot inte av misstag blockeras av dig på grund av att det redan var mitt i genomsökningen när du uppdaterade din robots.txt-fil.
  • Placera en länk till gotcha.html någonstans på din webbplats. Det spelar ingen roll var. Jag rekommenderar i sidfoten, men se till att den här länken inte syns, i CSS, display: ingen;
  • Logga nu IP / allmän information för perp som besökte den här sidan och blockera dem. Alternativt kan du komma med ett skript för att förse dem med felaktiga och skräpdata. Eller kanske ett trevligt personligt meddelande från dig till dem.

Vanliga webbläsare kan inte se länken, så det kommer inte att klickas av misstag. Anmärkningsbara sökrobotar (till exempel Google) kommer att respektera dina robots.txts önskemål och inte besöka filen. Så, de enda datorer som borde snubbla över den här sidan är de med skadliga avsikter, eller någon som tittar på din källkod och slumpmässigt klickar runt (och oj ja om det händer).

Det finns några orsaker till att detta inte alltid fungerar. Först fungerar inte många skrapare som vanliga webbsökare och upptäcker inte bara uppgifterna genom att följa varje länk från varje sida på din webbplats. Skrapor byggs ofta för att fixa in på vissa sidor och följer endast vissa strukturer. Till exempel kan en skrapa startas på en kategorisida och sedan bara få besked om att besöka URL: er med ordet / data i snigeln. För det andra, om någon kör sin skrapa i samma nätverk som andra, och det finns en delad IP som används, kommer du att förbjuda hela nätverket. Du måste ha en mycket populär webbplats för att detta ska vara ett problem.

Skriv data till bilder på resan

Hitta ett mindre datafält, inte nödvändigtvis långa textsträngar eftersom det kan göra stylingen på sidan lite svårare. Skriv ut dessa data inuti en bild, jag känner mig helt säker på att det finns metoder på nästan varje programmeringsspråk för att skriva text till en bild dynamiskt (i php, imagettftext). Detta är förmodligen mest effektivt med numeriska värden eftersom siffror ger en mycket mer obetydlig SEO-fördel.

Alternativ

Detta var inte ett alternativ för detta projekt. Kräver en inloggning efter en viss sidvisningar eller visar en begränsad mängd data utan att vara inloggad. Dvs om du har 10 kolumner, visar bara 5 för användare som inte är inloggade.

Gör inte det här misstaget

Bry dig inte om att försöka komma med någon form av lösning baserad på bot-användarens agent. Denna information kan lätt förfalskas av en skrapa som vet vad de gör. Google botten till exempel kan lätt emuleras. Du vill mer än troligt inte förbjuda Google.

Förhindrar skrotning av webbplatser