How to turn this working A/B optimization program into more pythonic code?
There is massive code duplication in your script. Basically you are doing the same things for A through E, so you could just put them in a list of dictionaries and use loops. Also, by using defaultdict you do not have to initialize them per hand (and even if not you could use a loop for this, too). Also, I'd recommend removing the code for transforming the URL to a 2D array from the function, and using just split() without '\t' the code works as well, and is somewhat more robust to other input formats.

from urllib.request import urlopen
from collections import defaultdict

def getBestDesign(data):
    # this list holds all your A, B, C, ... dicts, with defaultvalues
    ABCDE = [defaultdict(int) for i in range(5)]
    for row in data:
        if row[5] == '1':
            for i in range(5):
                ABCDE[i][row[i]] += 1
    for i in range(5):
        maxclicks = max(ABCDE[i].values())
        for k, v in ABCDE[i].items():
            if v == maxclicks:
                print('ABCDE'[i], ": ", k) # note the ''!
                # break # optional, stop after first "max" value

if __name__ == "__main__":
    url = input('Url: ')
    lines = urlopen(url).readlines()
    data = [line.decode(encoding='UTF-8').split() for line in lines]
    getBestDesign(data)


The algorithms is still basically the same as yours, and I think that it can still be improved. Probably you could use numpy to treat the input data as a matrix and do all sorts of useful matrix operations on the data. Further, you could probably use collections.Counter or itertools.groupby for counting the good combinations, reducing the whole thing to two or three lines.



Here's another version, even shorter, doing some preprocessing and using collections.Counter:

def getBestDesign(data):
    filtered = [d[:-1] for d in data if d[5] == '1']
    for i, d in enumerate(zip(*filtered)):
        key, maxclicks = Counter(d).most_common(1)[0]
        print("{0}: {1} ({2})".format("ABCDE"[i], key, maxclicks))


Let's explain this line by line:


the filtered list comprehension holds just the lines from data where the user has clicked; as this is already filtered, we can drop the last column with [:-1]
in the loop, we iterate the data columns -- zip(*...) basically transposes the matrix -- using enumerate, which yields the index i and the actual data d at that index
the Counter class is used to count each variant and to return the most_common one
finally, we print the result using string.format, using the index i to get the respective letter from the string "ABCDE"