simple solution: you get three 32-bit random values (os.urandom(96)), and simply ignore 30 bits of the last 32 bits you get
better solution: you get a 33 random 32-bit values, put them in a buffer, take the lowest 66 bit (using bitwise operations, &), and then shift your index into the buffer. For the next random value, you take the next 66 bit from your buffer through bitwise operations.

Also make sure you actually need all your randomness to come from the operating system. This is usually not the case. In most practical applications, you seed your pseudo-random number generator once with random values from your OS, and then have a very cheap way of generating sufficiently random/secure random numbers. It depends on what you build!
But especially for things like session tokens, you don't need incredibly cryptographically secure values - take a (properly) seeded PRNG, get sufficiently many bits, append a secret salt to the end, run a SHA-256 hash on it, get a session token that cannot be guessed, and knowledge of one would not allow you to infer any other valid tokens.
I am writing an experimental code that generates random tokens using os.urandom, I was wondering how do I generate a 66 bit random token.? 66 bit is 8.25 bytes and it does not take floating numbers. I specifically need 66 bit how do i do it?
how do i use bits insted of bytes in (os.urandom(32)