Ik heb een lijstje met urls welke ik wil spideren.
En ik heb een lijstje met url parts welke ik wel of niet mag spideren zoals de robots.txt aangeeft.
Nu kan ik natuurlijk voor elke url die ik wil spideren de robots.txt rules ophalen/uit cache vissen, en zo kijken of die url allowed is, maar dit is niet erg efficient als je het mij vraagt. Zeker omdat urls met betrekking tot de zelfde robots.txt niet achter elkaar opgehaald worden, en er dus constant van rules geswitched moet worden.
Omdat ik niet omgekeerd kan querien naar de database met rules "select allowed from rules where urlrule == stukje van inputurl" is het per URL niet sneller op te lossen dan dat.
Een andere oplossing is als volgt:
Zodra ik een link vindt, zet ik de checked variabele op NO/null.
En zodra ik dan toe ben aan het spideren van die link (en hij staat nog op null), check ik alle files van dat domain die nog op null staan (mits er rules/een robots.txt is natuurlijk), en zet ik bij alle links van dat domein op allow,of disallow afhankelijk wat de robots.txt me verteld.
Doordat ik nu vanuit de rules kan zoeken (meer urls dan rules), kan ik met de volgende query redelijk snel alle urls vinden.
select id from urls where domain=X and url like 'rule%' and checked=null
Hierdoor kan ik vrij simpel voldoen aan robots.txt.
Al met al zou dit aardig moeten werken, maar toch blijft het een beetje een ranzige oplossing. zeker omdat ik constant nieuwe urls van een domain zou kunnen blijven ontvangen, en zo dus constant bovenstaande handlingen op een beperkt groepje urls blijf uitvoeren. Heeft iemand een beter/sneller idee?
En ik heb een lijstje met url parts welke ik wel of niet mag spideren zoals de robots.txt aangeeft.
Nu kan ik natuurlijk voor elke url die ik wil spideren de robots.txt rules ophalen/uit cache vissen, en zo kijken of die url allowed is, maar dit is niet erg efficient als je het mij vraagt. Zeker omdat urls met betrekking tot de zelfde robots.txt niet achter elkaar opgehaald worden, en er dus constant van rules geswitched moet worden.
Omdat ik niet omgekeerd kan querien naar de database met rules "select allowed from rules where urlrule == stukje van inputurl" is het per URL niet sneller op te lossen dan dat.
Een andere oplossing is als volgt:
Zodra ik een link vindt, zet ik de checked variabele op NO/null.
En zodra ik dan toe ben aan het spideren van die link (en hij staat nog op null), check ik alle files van dat domain die nog op null staan (mits er rules/een robots.txt is natuurlijk), en zet ik bij alle links van dat domein op allow,of disallow afhankelijk wat de robots.txt me verteld.
Doordat ik nu vanuit de rules kan zoeken (meer urls dan rules), kan ik met de volgende query redelijk snel alle urls vinden.
select id from urls where domain=X and url like 'rule%' and checked=null
Hierdoor kan ik vrij simpel voldoen aan robots.txt.
Al met al zou dit aardig moeten werken, maar toch blijft het een beetje een ranzige oplossing. zeker omdat ik constant nieuwe urls van een domain zou kunnen blijven ontvangen, en zo dus constant bovenstaande handlingen op een beperkt groepje urls blijf uitvoeren. Heeft iemand een beter/sneller idee?
openkat.nl al gezien?