[英]How to extract content inside a label using beautiful soup in Python?
[英]how to update the names inside the tags of xml using beautiful soup and python
每當名稱的最后一個有 Z- 時,我都會嘗試更改父標記內名稱的值。 通過從我的表中獲取值,假設只有三個這樣的模式,其中名稱以 Z- 結尾,並且我在列表 val 中有要更新的值。
我怎樣才能做到這一點?
假設這是我的 XML,
<parent name="A-6/Z-9/B-64/Z-12">
<item>
<list>
<p name="A">
<p name ="B">
</list>
</item>
</parent>
<parent name="A1/Zh/B/C-12">
<item>
<list>
<p name="A">
<p name ="B">
</list>
</item>
</parent>
<parent name="AS-5/ZD-9/B-67/Z-13">
<item>
<list>
<p name="A">
<p name ="B">
</list>
</item>
</parent>
<parent name="An4/Zd-8/B-5/C-13">
<item>
<list>
<p name="A">
<p name ="B">
</list>
</item>
</parent>
<parent name="A-76/Z-8/B-56/Z-14">
<item>
<list>
<p name="A">
<p name ="B">
</list>
</item>
</parent>
<parent name="A-45/Z-ty/B-9/C-14">
<item>
<list>
<p name="A">
<p name ="B">
</list>
</item>
</parent>
這是我在列表 val = ["Z-99","Z-98","Z-97"]
我想在我的 XML 中修復這些值,因為只要父母的名字以 Z 結尾,例如這些
<parent name="A-6/Z-9/B-64/Z-12">
<parent name="AS-5/ZD-9/B-67/Z-13">
<parent name="A-76/Z-8/B-56/Z-14">
我要這個
<parent name="A-6/Z-9/B-64/Z-99">
<parent name="AS-5/ZD-9/B-67/Z-98">
<parent name="A-76/Z-8/B-56/Z-97">
我嘗試了這些,但沒有什么對我有用
pattern = re.compile(r'[A-Z]+-+[0-9]+/+Z+-+[0-9]$')
for i in soup.find_all('parent', distName=pattern):
for j in val:
i.string = i.string[:-2]+str(j)
for i, val in zip(soup.select('parent > name^="Z-"')
i.string = i.string[:-2]+str(val)
您可以嘗試使用此腳本從<parent>
標記更改所有必需的name=
屬性:
from bs4 import BeautifulSoup
txt = '''<parent name="A-6/Z-9/B-64/Z-12">
<item>
<list>
<p name="A"></p>
<p name="B"></p>
</list>
</item>
</parent>
<parent name="A1/Zh/B/C-12">
<item>
<list>
<p name="A"></p>
<p name="B"></p>
</list>
</item>
</parent>
<parent name="AS-5/ZD-9/B-67/Z-13">
<item>
<list>
<p name="A"></p>
<p name="B"></p>
</list>
</item>
</parent>
<parent name="An4/Zd-8/B-5/C-13">
<item>
<list>
<p name="A"></p>
<p name="B"></p>
</list>
</item>
</parent>
<parent name="A-76/Z-8/B-56/Z-14">
<item>
<list>
<p name="A"></p>
<p name="B"></p>
</list>
</item>
</parent>
<parent name="A-45/Z-ty/B-9/C-14">
<item>
<list>
<p name="A"></p>
<p name="B"></p>
</list>
</item>
</parent>'''
soup = BeautifulSoup(txt, 'html.parser')
values = ["Z-99","Z-98","Z-97"]
r = re.compile(r'Z-\d+$')
for parent, new_val in zip(soup.find_all('parent', {'name': r}), values):
parent['name'] = r.sub(new_val, parent['name'])
print(soup.prettify())
印刷:
<parent name="A-6/Z-9/B-64/Z-99">
<item>
<list>
<p name="A">
</p>
<p name="B">
</p>
</list>
</item>
</parent>
<parent name="A1/Zh/B/C-12">
<item>
<list>
<p name="A">
</p>
<p name="B">
</p>
</list>
</item>
</parent>
<parent name="AS-5/ZD-9/B-67/Z-98">
<item>
<list>
<p name="A">
</p>
<p name="B">
</p>
</list>
</item>
</parent>
<parent name="An4/Zd-8/B-5/C-13">
<item>
<list>
<p name="A">
</p>
<p name="B">
</p>
</list>
</item>
</parent>
<parent name="A-76/Z-8/B-56/Z-97">
<item>
<list>
<p name="A">
</p>
<p name="B">
</p>
</list>
</item>
</parent>
<parent name="A-45/Z-ty/B-9/C-14">
<item>
<list>
<p name="A">
</p>
<p name="B">
</p>
</list>
</item>
</parent>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.