Hi,
I've just started writing a book for O'Reilly on this very subject (that would be a shameless plug caveat if there was anything tangible to plug) so it's nice to see an 'interested' datapoint.
Some great points already made, I'll just add a few.
First off, it's worth emphasizing the for browser-based visualization Javascript writes its own ticket, often D3 shaped. So there's no alternative to working with it. Having said that, there are some rather exciting initiatives coming from the Python world to limit the amount of JS manipulation needed. The idea here is to process the data and craft the visualization in Python and then have a working JS-based viz pre-assembled. Pros and cons to this, but it can be mighty convenient if all you need is a fairly standard chart with limited interactivity. Those of us used to the expressive power of native D3 are probably going to find this a constraint too far, but it definitely has its use-cases.
Here's something to whet your appetite. An Ipython notebook demonstrating the use of Plotly to create D3-based charts interactively as part of a Python processing workflow:
Note how flexible plotly is - it will take a chart produced by any number of the Python charting libraries (often matplotlib based) and, with a single command, produce its JS counterpart. As mentioned, the UI is generic, but it's a very provocative demo. Of greater appeal to those who want to avoid having to learn JS/D3 but have a web-based charting itch to scratch. I'll mention bokeh here, as it's a bit more ambitious than the others, aiming for a grammar-of-graphicsy approach, which means more expressiveness. Canvas-based and not D3 but intriguing with some very cool demos.
Plotly, matplotlibD3 et. al. are about as close as you're going to get to a 'python with D3' solution. To enjoy the full expressive power of D3 means a separation of powers, D3 on the visualization end, Python on the data scraping, munging, processing and delivery end. The latter involves assembling a tool-chain, and the key libraries there are, in my opinion:
Scraping:
Cleaning+processing
To fully exploit Pandas you need to 'get' Numpy arrays and their syntax.
Delivery
To get your processed data to the browser (and I'd recommend using something like Pandas to get it as close to required form as possible) Flask is a great tool. One of Python's great plus points over other processing solutions like R is that it's a fully-fledged programming language with libraries for pretty much anything. With Flask you can roll a dev-server to deliver dynamic data in a few lines. And it's quite capable of doing production too. I'd avoid the bigger frameworks like Django unless you really need the things they're offering. For single-page apps, dynamic-data-driven visualizations etc., Flask is more than enough and a lot simpler to use:
http://flask.pocoo.org/
And just to emphasise how wonderful Ipython Notebooks are for learning and implementing this stuff. You can interactively process and visualize your data, getting a feel for it before sending the right stuff to D3. It's a great workflow and tbh., notebooks almost justify the use of Python on their own.
Hope that helps a bit - it's a big subject but I think Python + Javascript is the sweetspot for dataviz right now. It seems that every week a new, humongous library is being added to the Python canon and, as mentioned, JS is non-negotiable. Lucky for us that D3 et. al. give it the power to justify all that back-end data wrangling.
Kyran