user14628590
user14628590

Reputation:

Beatifulsoup doesnt return href it returns None

>>> soup_brand
<a data-role="BRAND" href="/URL/somename">
          Some Name
        </a>

>>> type(soup_brand)
<class 'bs4.BeautifulSoup'>

>>> print(soup_brand.get('href'))
None

Documentation followed: https://www.crummy.com/software/BeautifulSoup/bs4/doc/

Hi people from all over the world, does someone now whats going wrong or am I targeting the object wrong ?

Need to get the href.

Upvotes: 2

Views: 44

Answers (2)

Patrick Bormann
Patrick Bormann

Reputation: 749

Have you tried:

soup.find_all(name="a")

or

soup.select_one(selector="a")

it should also be possible to catch with

all_anchor_tags = soup.find_all(name="a")
for tag in all_anchor_tags:
    print(tag.get("href")) #prints the href element of each a tag, thus each link

Although the all bs4 looks for multiple elemnts (the reason why we have a loop here) I encountered, that bs4 sometime is better in catching things, if you give it a search for all approach and then iterate over the elements

Upvotes: 1

alexzander
alexzander

Reputation: 1875

in order to apply ['href'] the object must be <bs4.Element.Tag>.

so, try this:

string = \
"""
<a data-role="BRAND" href="/URL/somename">
          Some Name
        </a>
"""

s = BeautifulSoup(string)
a_tag = s.find('a')
print(a_tag["href"])

out

/URL/somename

or if you have multiple a tags you can try this:

a_tags = s.findAll('a')
for a in a_tags:
    print(a.get("href"))

out

/URL/somename

Upvotes: 0

Related Questions