Anonim

Ik run een website voor een klant waar ze een grote database met informatie weergeven die ze door de jaren heen nauwkeurig en langzaam hebben verzameld. Ze vinden hun gegevens op verschillende plaatsen op internet. Het is meer dan waarschijnlijk te wijten aan een scraper die pagina voor pagina door hun site gaat en de benodigde informatie naar een eigen database haalt. En in het geval u zich afvraagt, weten ze dat het hun gegevens zijn vanwege een enkel geplant stuk gegevens in elke categorie op hun site.

Ik heb hier de afgelopen dagen veel onderzoek naar gedaan en ik kan je vertellen dat er geen perfecte oplossing is. Ik heb echter verschillende dingen gevonden om dit voor hen een beetje moeilijker te maken. Dit heb ik geïmplementeerd voor de klant.

Ajaxified gepagineerde gegevens

Als u veel gepagineerde gegevens heeft en u uw gegevens pagineert door gewoon een ander nummer toe te voegen aan het einde van uw URL, bijvoorbeeld http://www.domain.com/category/programming/2 - Dan maakt u het werk van de rups dat veel eenvoudiger. Het eerste probleem is dat het zich in een gemakkelijk identificeerbaar patroon bevindt, dus het loslaten van een krabber op deze pagina's is heel eenvoudig. Tweede probleem, ongeacht de URL van de volgende pagina's in de categorie, er is meer dan waarschijnlijk een volgende en vorige link waar ze aan kunnen vastklikken.

Door de gepagineerde gegevens via JavaScript te laden zonder de pagina opnieuw te laden, maakt dit de taak voor veel scrapers aanzienlijk moeilijker. Google is pas recent zelf begonnen met het parseren van javascript op pagina. Er is weinig nadeel aan het herladen van de gegevens op deze manier. U biedt Google een paar minder pagina's om te indexeren, maar technisch gezien zouden gepagineerde gegevens toch allemaal via canonicalisatie naar de hoofdcategoriepagina moeten verwijzen. Ajaxify uw opgeroepen pagina's met gegevens.

Randomiseer sjabloonuitvoer

Schrapers worden vaak specifiek aangepast voor uw gegevens. Ze worden gekoppeld aan een bepaalde div-id of klasse voor de titel, de 3e cel in elke rij voor uw beschrijving, enz. Er is een gemakkelijk identificeerbaar patroon waarmee de meeste schrapers kunnen werken, aangezien de meeste gegevens uit dezelfde tabel komen, wordt weergegeven door dezelfde sjabloon. Maak uw div-id's en klassennamen willekeurig, voeg willekeurige lege tabelkolommen in met breedte 0. Toon uw gegevens in een tabel op de ene pagina, in opgemaakte divs en een combinatie op een andere sjabloon. Door uw gegevens voorspelbaar te presenteren, kunnen deze voorspelbaar en nauwkeurig worden geschraapt.

Honingpot

Dit is vrij netjes in zijn eenvoud. Ik ben deze methode op verschillende pagina's tegengekomen over het voorkomen van site-scraping.

  • Maak een nieuw bestand op uw server met de naam gotcha.html.
  • Voeg het volgende toe aan uw robots.txt-bestand:
    User-agent: *
    Disallow: /gotcha.html

    Dit vertelt alle robots en spiders die uw site indexeren om het bestand gotcha.html niet te indexeren. Elke normale webcrawler respecteert de wensen van uw robots.txt-bestand en heeft geen toegang tot dat bestand. dat wil zeggen Google en Bing. Misschien wilt u deze stap uitvoeren en 24 uur wachten voordat u naar de volgende stap gaat. Dit zorgt ervoor dat een crawler niet per ongeluk door u wordt geblokkeerd vanwege het feit dat deze al halverwege de crawl was toen u uw robots.txt-bestand bijwerkte.
  • Plaats een link naar gotcha.html ergens op uw website. Maakt niet uit waar. Ik zou echter in de voettekst aanbevelen om ervoor te zorgen dat deze link niet zichtbaar is, in CSS, weergeven: geen;
  • Registreer nu de IP / algemene informatie van de persoon die deze pagina heeft bezocht en blokkeer ze. Als alternatief kunt u een script bedenken om hen onjuiste en afvalgegevens te bezorgen. Of misschien een leuke persoonlijke boodschap van jou aan hen.

Gewone webviewers kunnen de link niet zien, dus er wordt niet per ongeluk op geklikt. Gerenommeerde crawlers (bijvoorbeeld Google) respecteren de wensen van uw robots.txt en bezoeken het bestand niet. Dus, de enige computers die over deze pagina zouden moeten struikelen, zijn die met kwaadaardige bedoelingen, of iemand die uw broncode bekijkt en willekeurig rondklikt (en ach als dat gebeurt).

Er zijn een aantal redenen waarom dit niet altijd werkt. Ten eerste werken veel schrapers niet zoals normale webcrawlers en ontdekken ze niet alleen de gegevens door elke link van elke pagina op uw site te volgen. Schrapers worden vaak gebouwd om op bepaalde pagina's te fixeren en alleen bepaalde structuren te volgen. Een schraper kan bijvoorbeeld op een categoriepagina worden gestart en vervolgens alleen worden gevraagd URL's te bezoeken met het woord / de gegevens in de naaktslak. Ten tweede, als iemand zijn scraper op hetzelfde netwerk als anderen uitvoert en er een gedeeld IP-adres wordt gebruikt, moet u het hele netwerk verbieden. Je zou inderdaad een zeer populaire website moeten hebben om dit een probleem te laten zijn.

Schrijf gegevens direct naar afbeeldingen

Zoek een kleiner gegevensveld, niet noodzakelijkerwijs lange reeksen tekst, omdat dit het opmaken van de pagina een beetje moeilijker kan maken. Voer deze gegevens uit in een afbeelding, ik heb er alle vertrouwen in dat er in zowat elke programmeertaal methoden zijn om dynamisch tekst naar een afbeelding te schrijven (in php, imagettftext). Dit is waarschijnlijk het meest effectief met numerieke waarden omdat getallen een veel onbeduidend SEO-voordeel bieden.

Alternatief

Dit was geen optie voor dit project. Een login vereisen na een bepaald aantal paginaweergaven, of een beperkte hoeveelheid gegevens weergeven zonder ingelogd te zijn. Dat wil zeggen, als u 10 kolommen hebt, geeft u alleen 5 aan niet-ingelogde gebruikers weer.

Maak deze fout niet

Probeer niet een oplossing te bedenken die is gebaseerd op de user-agent van de bot. Deze informatie kan gemakkelijk worden vervalst door een schraper die weet wat hij doet. De google bot kan bijvoorbeeld gemakkelijk worden geëmuleerd. U wilt Google waarschijnlijk niet verbieden.

Voorkomen van site-scraping