Thanks for the tip. As a Python rookie, I did not even know about plistlib.
plutil is still needed because the Safari bookmarks file is stored in the binary property list format, which plistlib can't read. However, I can use plistlib to parse the XML output by plutil. Doing so certainly looks more straightforward than [ab]using BeautifulSoup for the job, so I will revise the recipe to use plistlib.