To get the pending transactions you need a node that you're running on your own because this type of action requires a lot of resources.
You can run your own Geth node and wait until it is synchronized. When I want to run a Geth node on the main net and query for the transaction pool, I usually start it like this.
Download the Geth binary and rename it as
./geth.bin --datadir=./chaindata \
--rpc --rpcapi="eth,net,rpc,web3,txpool,personal,debug,account" \
--rpccorsdomain='*' --port 30303 \
The important parts are:
--rpc enables rpc requests, so you can connect with web3.js / web3py / ...
--rpcapi defines what APIs are available over RPC; the important one in this case is
txpool which enables a Geth specific API to query for the transaction pool; this is usually faster than the standard one. Documented here as a non-standard RPC method;
--txpool.globalqueue increases the number of slots available for the pending transactions; otherwise it will ignore other pending transactions once it reaches a specific number (by default 4096)
console it will open a console where you can run commands in.
After you start Geth like that and wait for it to be synchronized, you can run commands inside the open console.
txpool.status doc will display a statistic of pending and queued transactions. Pending are the ones that you care about, might be included in the next blocks if the miners choose to add them.
txpool.content doc will display details about each transaction in the current lists.