2016-01-01 13 views
6

इनपुट HTML में एक कॉलन से निपटना:BeautifulSoup 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> 

वांछित आउटपुट: सभी div तत्वों बिल्कुल <div style="display: flex"> के तहत।

मैं के साथ माता-पिता div का पता लगाने की कोशिश कर रहा हूँ एक CSS selector:

>>> 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. 

यह एक छद्म वर्ग के रूप में बृहदान्त्र व्याख्या करने के लिए BeautifulSoup तरह की कोशिश करता दिखता है:

div[style="display: flex"] 

यह एक त्रुटि फेंकता वाक्य - विन्यास।

मैं सलाह Handling a colon in an element ID in a CSS selector पर सुझाव का पालन करने की कोशिश की है, लेकिन यह अभी भी त्रुटियों फेंकता है:

>>> 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" 

प्रश्न:

क्या उपयोग करने के लिए सही तरीका क्या है/में एक कॉलन से बचने BeautifulSoup सीएसएस चयनकर्ताओं में विशेषता मान?


ध्यान दें कि मैं इसे एक आंशिक विशेषता मैच के साथ वैकल्पिक हल कर सकते हैं:

soup.select("div[style$=flex]") 

या एक find_all() साथ,:

soup.find_all("div", style="display: flex") 

यह भी ध्यान रखें मैं समझता हूँ कि कि style का उपयोग कर तत्वों का पता लगाने की एक अच्छी स्थान तकनीक होने से बहुत दूर है, लेकिन सवाल स्वयं सामान्य होने के लिए है और प्रदान किया गया HTML सिर्फ एक उदाहरण है।

+0

मुझे लगता है कि आपने दो बैकस्लेश भी कोशिश की है? 'soup.select ('div [style =" display \\: flex "]') ' –

+0

@ जोशक्रोजियर खुश नए साल, yup, और कच्चे तारों और नियमित तारों के साथ विभिन्न संयोजन। धन्यवाद। अभी भी लगता है कि मैं सिर्फ smth याद कर रहा हूँ। – alecxe

+2

... wat। टूटी हुई बात करो। – BoltClock

उत्तर

2

अद्यतन: समस्या अब सुंदर सूप 4.5 में तय की गई है।0, जरूरत अपग्रेड करते हैं:

pip install --upgrade beautifulsoup4 

पुराना जवाब:

बनाया BeautifulSoup समस्या ट्रैकर में एक मुद्दा:

में जवाब अद्यतन करेंगे लॉन्चपैड मुद्दे में किसी भी अद्यतन के मामले।

1

यह सुनिश्चित नहीं है कि यह उत्तर ठीक है, क्योंकि यह सबसे निश्चित रूप से टूटा हुआ है। हालांकि, आश्चर्यजनक रूप से त्रुटि : द्वारा ट्रिगर नहीं की गई है, लेकिन : द्वारा एक स्थान के बाद। त्रुटि से पता चलता है कि यह सीएसएस चयनकर्ता के रूप में अंतरिक्ष के बाद जो भी हो, उसका उपयोग करने का प्रयास कर रहा है।

उदाहरण के लिए, HTML संपादित करने अंतरिक्ष छोड़ ब्लॉक फिर से चयन करता है:

>>> from bs4 import BeautifulSoup 
>>> html = """ 
... <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> 
... """ 

>>> soup = BeautifulSoup(html) 
>>> soup.select('div[style="display: flex"]') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/local/lib/python3.4/dist-packages/bs4/element.py", line 1313, in select 
    'Unsupported or invalid CSS selector: "%s"' % token) 
ValueError: Unsupported or invalid CSS selector: "flex"]" 

>>> soup.select('div[style="display:flex"]') 
[<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>] 

दुर्भाग्य से, अंतरिक्ष के साथ हमेशा की तरह शैली है, तो यह शायद आप बहुत दूर बिल्कुल नहीं मिलेगा!

+0

दिलचस्प अवलोकन! धन्यवाद। – alecxe

संबंधित मुद्दे