تحديد العلامات بشكل حيوي أثناء استخدام استبدالي في الحساء الجميل
-
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
لا تنتمي إلى StackOverflow