HTML wejściowe:czynienia z dwukropkiem w BeautifulSoup selektorów CSS
<div style="display: flex">
<div class="half" style="font-size: 0.8em;width: 33%;"> apple </div>
<div class="half" style="font-size: 0.8em;text-align: center;width: 28%;"> peach </div>
<div class="half" style="font-size: 0.8em;text-align: right;width: 33%;" title="nofruit"> cucumber </div>
</div>
Pożądana moc: wszystkie div
elementy dokładnie pod <div style="display: flex">
.
Próbuję zlokalizować rodzica div
z CSS selector:
div[style="display: flex"]
ten zgłasza błąd:
>>> soup.select('div[style="display: flex"]')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/user/.virtualenvs/so/lib/python2.7/site-packages/bs4/element.py", line 1400, in select
'Only the following pseudo-classes are implemented: nth-of-type.')
NotImplementedError: Only the following pseudo-classes are implemented: nth-of-type.
to wygląda BeautifulSoup
próbuje interpretować okrężnicy jako pseudo-klasie składnia.
starałem się przestrzegać rad sugerowane w Handling a colon in an element ID in a CSS selector, ale to wciąż wyrzuca błędy:
>>> soup.select('div[style="display\: flex"]')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/user/.virtualenvs/so/lib/python2.7/site-packages/bs4/element.py", line 1400, in select
'Only the following pseudo-classes are implemented: nth-of-type.')
NotImplementedError: Only the following pseudo-classes are implemented: nth-of-type.
>>> soup.select('div[style="display\3A flex"]')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/user/.virtualenvs/so/lib/python2.7/site-packages/bs4/element.py", line 1426, in select
'Unsupported or invalid CSS selector: "%s"' % token)
ValueError: Unsupported or invalid CSS selector: "div[style="displayA"
Pytanie:
Jaki jest prawidłowy sposób na wykorzystanie/ucieczki dwukropek wartości atrybutów w selektorach CSS BeautifulSoup
?
Zauważ, że mogę obejść go z częściowym meczu atrybut:
soup.select("div[style$=flex]")
Lub z find_all()
:
soup.find_all("div", style="display: flex")
Należy również pamiętać, że rozumiem, że za pomocą style
zlokalizować elementy nie jest dobrą techniką lokalizacji, ale samo pytanie ma być generyczne, a dostarczony kod HTML jest tylko przykładem.
Zakładam, że wypróbowałeś również dwa ukośniki odwrotne? 'soup.select ('div [style =" display \\: flex "]')' –
@JoshCrozier szczęśliwego nowego roku, yup i różnych kombinacji z surowymi ciągami i zwykłymi ciągami. Dzięki. Wciąż myśl, że po prostu brakuje mi czegoś. – alecxe
... wat. Mów o zepsutym. – BoltClock