for element in soup.descendants:
means that you will iterate through all elements recursively. And text between brackets is children of "a" element, so it gets your paragraph twice. If you want to avoid this behavior, you could try to use
for element in soup.children:
instead