implement abstract crawler