astro
astro

Reputation: 55

python beautifulsoup attribute exist returns None

when trying to select elements that have the attribute "data-server" it returns none here is the code

>>> psoup.select_one(".server > .serverslist")
<div class="serverslist " data-server="aHR0cDovL3d3dy5jbG91ZHkuZWMvZW1iZWQucGhwP2lkPWExYWU0NjkwZmZmYjQ=">cloudy</div>
>>> psoup.select_one(".server > .serverslist[data-server]")
>>> 

Upvotes: 1

Views: 264

Answers (1)

Martijn Pieters
Martijn Pieters

Reputation: 1121266

BeautifulSoup's CSS selectors are fairly limited. Attribute selectiors ([...]) can only be combined with a tag selector, not with other selectors (like the class selector you used):

>>> from bs4 import BeautifulSoup
>>> psoup = BeautifulSoup(
...     '<div class="server"><div class="serverslist " data-server="aHR0cDovL3d3dy5jbG91ZHkuZWMvZW1iZWQucGhwP2lkPWExYWU0NjkwZmZmYjQ=">cloudy</div></div>',
...     'lxml')
>>> psoup.select_one("div[data-server]")
<div class="serverslist " data-server="aHR0cDovL3d3dy5jbG91ZHkuZWMvZW1iZWQucGhwP2lkPWExYWU0NjkwZmZmYjQ=">cloudy</div>
>>> psoup.select_one("[data-server]")
<div class="serverslist " data-server="aHR0cDovL3d3dy5jbG91ZHkuZWMvZW1iZWQucGhwP2lkPWExYWU0NjkwZmZmYjQ=">cloudy</div>
>>> psoup.select_one(".serverslist[data-server]") is None
True

You'll have to find a different way of expressing your selector, one that doesn't look for attributes and classes at the same time.

Upvotes: 1

Related Questions