تحديد العلامات بشكل حيوي أثناء استخدام استبدالي في الحساء الجميل

StackOverflow https://stackoverflow.com/questions/891434

  •  23-08-2019
  •  | 
  •  

سؤال

سابقا طلبت هذه سؤال واسترجع هذه الرمز المثول الجميل، والذي بعد بعض المشاورات محليا، قررت أن أذهب معها.

>>> from BeautifulSoup import BeautifulStoneSoup
>>> html = """
... <config>
... <links>
... <link name="Link1" id="1">
...  <encapsulation>
...   <mode>ipsec</mode>
...  </encapsulation>
... </link>
... <link name="Link2" id="2">
...  <encapsulation>
...   <mode>udp</mode>
...  </encapsulation>
... </link>
... </links>
... </config>
... """
>>> soup = BeautifulStoneSoup(html)
>>> soup.find('link', id=1)
<link name="Link1" id="1">
<encapsulation>
<mode>ipsec</mode>
</encapsulation>
</link>
>>> soup.find('link', id=1).mode.contents[0].replaceWith('whatever')
>>> soup.find('link', id=1)
<link name="Link1" id="1">
<encapsulation>
<mode>whatever</mode>
</encapsulation>
</link>

المشكلة الوحيدة في هذا هي أن المثال يحتوي على قيمة علامة مضغوطة (في وضع "في هذه الحالة")، وأحتاج إلى أن أكون قادرا على تحديد أي علامة ضمن علامة "الرابط" المحددة. استبدال متغير بسيط لا يبدو أن يعمل.

هل كانت مفيدة؟

المحلول

يحاول getattr(soup.find('link', id=1), sometag) حيث لديك الآن علامة صينية في soup.find('link', id=1).mode -- getattr هي Way Python للحصول على سمة يتم احتساب اسمها كمتغير سلسلة، بعد كل شيء!

نصائح أخرى

لا حاجة للاستخدام getattr:

sometag = 'mode'
result = soup.find('link', id=1).find(sometag)
print result
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top