Webcrawler

Door Roel911 op woensdag 3 februari 2016 21:21 - Reacties (16)
Categorie: SE, Views: 2.904

Hallo iedereen!

Ik ben een webcrawler in C++ aan het maken. Natuurlijk er zijn al veel (opensource) projecten en de discussie of C++ hier de perfecte taal voor is, wil ik niet aangaan. Maar 1 ding staat voor mij vast, het is ontzettend leuk en leerzaam om dit te ontwikkelen.

Mogelijkheden hoe een zoekmachine een URL toevoegt:
- Links uit beginpagina, die weer aan de te crawlen sites wordt toegevoegd.
- Gebruikers die een site voorleggen aan de te crawlen URL.
- De brute-force methode; ga een hele hoop mogelijke URL´s af.
- Er zijn nog meer manieren, zoals het gebruik van een woordenboek, het uitvoeren van javascript op de opgehaalde pagina en andere zoekmachines raadplegen.

De brute-force methode ben ik voor gegaan, omdat dit (voor mij) makkelijker te ontwikkelen is. Uiteindelijk is het uiteraard het beste om alle drie de genoemde methodes the implementeren.

Volgens https://www.sidn.nl/a/kennis-en-ontwikkeling/statistieken zijn er eind december 2015 > 5,6 miljoen .nl domeinnamen in gebruik. Niet op elk domein staat een website, maar laten we dit aanhouden als potentieel maximum. Mijn crawler heeft van het potentieel maximum 1/27 van de index van .nl-domeinen gecrawled. Hierin zijn alle domeinnamen tot en met 5 tekens uitgeprobeerd. Elk domein had 3 seconden de tijd om te reageren, anders zou de totale crawl te lang duren. Van de .com domeinnamen (totaal > 100 miljoen) heb ik er op deze manier > 2 miljoen opgehaald.

De performance van DNS is erg belangrijk, vandaar dat ik deze crawls op een VPS draaide. Ik heb libcurl gebruikt voor het DNS- en HTTP-gedeelte. De huidige versie (alpha) slaat de pagina´s op als losse bestanden, wat zowel Windows als Linux niet grappig vinden. Connecten met een database staat op de to-do list, evenals het ondersteunen van robots.txt en sitemap.xml

Uiteindelijk wil ik een soort index-indexer maken dat van elk domein ter wereld (behalve wellicht de nieuwe domeinnamen zoals http://mooie.auto) de index, robots.txt en sitemap.nl ophaalt, indexeert en een gui. Hiemee kunnen gebruikers of andere bots dan weer leuke/nuttige zaken doen.

Wat vinden jullie ervan?

Reacties


Door Tweakers user GertW, donderdag 4 februari 2016 07:06

Interessant! :) Keep me posted! Ik ben er ook eens mee bezig geweest, maar dan PHP icm Curl, dit ging ook wel goed.

Door Tweakers user -RetroX-, donderdag 4 februari 2016 07:58

Heb je unicode domeinnamen ook getest?

Door Tweakers user Roel911, donderdag 4 februari 2016 11:59

GertW schreef op donderdag 04 februari 2016 @ 07:06:
Interessant! :) Keep me posted! Ik ben er ook eens mee bezig geweest, maar dan PHP icm Curl, dit ging ook wel goed.
Dankjewel! Ga ik doen! PHP is ook een handige taal. Uiteindelijk maakt de taal niet uit, zolang je maar bereikt wat je ermee wilt doen :) Ik ben benieuwd wat je gebouwd hebt :)

Door Tweakers user Roel911, donderdag 4 februari 2016 12:20

-RetroX- schreef op donderdag 04 februari 2016 @ 07:58:
Heb je unicode domeinnamen ook getest?
Bedankt voor je vraag! Dit moet ook zeker in het ´user-submission-form´ komen! Unicode domeinnamen heb ik niet getest. De reden is: de crawl zou dan te lang duren. Elk tegen van a-z, 0-9, ´-´ en ´_´ is gebruikt. Dit zijn in totaal 38 tekens. De crawl is dus 38^5+38^4+38^3+38^2+38 mogelijkheden afgegaan.

Door Tweakers user Flippylosaurus, donderdag 4 februari 2016 17:16

*bookmarked*
Als je vrijwilligers met servers zoekt om dit te doen: ik sta klaar :)

Door Tweakers user commentator, vrijdag 5 februari 2016 00:23

interessant. Worden plaatjes ook opgehaald? En Flash bestanden? En video's?

Door Tweakers user Roel911, vrijdag 5 februari 2016 13:00

Flippylosaurus schreef op donderdag 04 februari 2016 @ 17:16:
*bookmarked*
Als je vrijwilligers met servers zoekt om dit te doen: ik sta klaar :)
Dankjewel! Momenteel zou de 38^6 mogelijkheden afgaan handig zijn. Ik stuur je van het weekeind een PM :)

Door Tweakers user Roel911, vrijdag 5 februari 2016 13:02

commentator schreef op vrijdag 05 februari 2016 @ 00:23:
interessant. Worden plaatjes ook opgehaald? En Flash bestanden? En video's?
Bedankt! Momenteel worden alleen index bestanden opgehaald.

Door Tweakers user cyberstalker, vrijdag 5 februari 2016 15:55

Roel911 schreef op donderdag 04 februari 2016 @ 11:59:
[...]

Dankjewel! Ga ik doen! PHP is ook een handige taal. Uiteindelijk maakt de taal niet uit, zolang je maar bereikt wat je ermee wilt doen :) Ik ben benieuwd wat je gebouwd hebt :)
Nou ja, een taal als PHP lijkt me voor een project als dit erg ongeschikt omdat het erg lastig is om non-blocking te programmeren.

In C heb je libev(ent), wat met niet al te veel moeite met cURL kan werken. Op die manier kun je duizenden requests simultaan laten lopen. Alle requests achter elkaar laten lopen zou het geheel onwerkbaar langzaam maken.

Door Tweakers user Aphelion, zaterdag 6 februari 2016 08:53

Ik moet ineens denken aan een multiple instance oplossing op AWS met een queue er tussen. Dan is snelheid niet meer het probleem maar eerder de euro's.

Door Tweakers user SBTweaker, zaterdag 6 februari 2016 23:29

Dit is meer indexeren dan crawlen, crawlen dan zoekt je programma naar link en 'crawled' door de paginas om de links te vinden.

Door Tweakers user Milmoor, zondag 7 februari 2016 14:55

Vergeet niet te kijken of er een robots.txt is. Wel zo netjes.

Door Tweakers user Fawn, zondag 7 februari 2016 19:12

Niet elke site is hier even happig op.
Ik ben een poosje gebanned op tweakers omdat ik een iets te fanatieke crawler op deze site had getest.

Door Tweakers user -RetroX-, maandag 8 februari 2016 08:38

cyberstalker schreef op vrijdag 05 februari 2016 @ 15:55:
[...]
Nou ja, een taal als PHP lijkt me voor een project als dit erg ongeschikt omdat het erg lastig is om non-blocking te programmeren.
Kan met PHP ook wel (http://docs.php.net/manual/en/book.pthreads.php). Kost alleen iets meer moeite om goed de gevolgen van een bepaalde actie te overdenken, maar dat is in C/C++ niet anders.

Nieuwe PHP versies (PHP 5.6 en later) maken al gebruik van technieken als OPcache etc die je PHP compilen naar Opcode. Resource technisch is PHP niet veel zwaarder dan C.

Je keuze voor C++ is prima maar je zet PHP net iets te makkelijk weg zo.

Door Tweakers user Roel911, zondag 21 februari 2016 21:27

commentator schreef op vrijdag 05 februari 2016 @ 00:23:
interessant. Worden plaatjes ook opgehaald? En Flash bestanden? En video's?
In mijn versie niet, echter: ik heb een vraag uit staan bij het YACY-forum hoe de huidige URL's geimporteerd kunnen worden in hun distributed zoekmachine, zodat de data nu al nuttig kan worden.

Door Tweakers user Roel911, zondag 21 februari 2016 21:35

Aphelion schreef op zaterdag 06 februari 2016 @ 08:53:
Ik moet ineens denken aan een multiple instance oplossing op AWS met een queue er tussen. Dan is snelheid niet meer het probleem maar eerder de euro's.
Mijn doel is een systeem te maken dat voor- en door gebruikers werkt. Vergelijkbaar met DuckDuckGo, dus zonder reclame en tracking, met een funding model net als Wikipedia (dus gratis te gebruiken, maar optioneel te sponsoren om het project te steunen).

Reageren is niet meer mogelijk