How do the mining pools obtain the transaction information required to create a new block? Do they communicate with the network directly, or perhaps through a Bitcoin client, like bitcoind?
The Bitcoin client tracks transactions that can validly be included in a block. Mining pool controllers issue a
getwork command to the client to get work units to give to their miners. The client includes as many valid, normal transactions as will fit in the block, preferring transactions with higher fees and priorities and ignoring transactions that are non-standard or look spammy and have too low a fee.