Picking the desired one between two links
You're right that the two for-loops are possibly overkill... though, it's not all that bad.. how big are the documents really?. The alternative is to track a default about link, and if a contact link appears, to override it. I'll explain that later, but first I should mention that the function should really return a value, not just print it inside the loops.

Having said that, consider the loop:

link = None
for item in soup.select("a[href]"):
    if "contact" in item.text.lower():
        link = urljoin(site,item['href'])
        # terminate the loop, no need to look further.
        break;
    if link is None and "about" in item.text.lower():
        link = urljoin(site,item['href'])
return link