我遇到了BeautifulSoup (更具体地说是xml解析器)的一个问题,在这个问题中,将"name“作为标记属性似乎会重载一些底层函数。
考虑到以下代码:
#!/usr/bin/env python3
from bs4 import BeautifulSoup
siteconfig="""
<?xml version="1.0" encoding="utf-8"?>
<sites version="180201">
<site name="au" location="oceana">
<addresslist="IPv4">
<address>192.168.1.10/32</address>
<address>192.168.2.10/32</address>
</addresslist>
<addresslist="IPv6">
<address>fc00:07bc:5ae6:75d0::26/128</address>
<address>fc00:07bc:5ae6:75d1::26/128</address>
</addresslist>
</site>
<site name="us" location="americas">
<addresslist="IPv4">
<address>192.168.4.13/32</address>
<address>192.168.5.13/32</address>
</addresslist>
<addresslist="IPv6">
<address>fc00:07bc:5ae6:75d0::45/128</address>
<address>fc00:07bc:5ae6:75d1::45/128</address>
</addresslist>
</site>
</sites>
"""
soup = BeautifulSoup(siteconfig,"xml")
print(soup.find("site", name="us"))我得到以下错误:
Traceback (most recent call last):
File "./siteConfig.py", line 33, in <module>
print(soup.find("site", name="us"))
TypeError: find() got multiple values for argument 'name'但如果我把最后一行改为:
print(soup.find("site", location="americas"))我得到以下输出:
<site location="americas" name="us">
<addresslist>="IPv4">
<address>192.168.4.13/32</address>
<address>192.168.5.13/32</address>
</addresslist>
<addresslist>="IPv6">
<address>fc00:07bc:5ae6:75d0::45/128</address>
<address>fc00:07bc:5ae6:75d1::45/128</address>
</addresslist>
</site>为什么会发生这种情况?
发布于 2018-02-06 03:13:43
name是find的第一个参数的名称(在您的例子中,是"site"):
查找bs4.BeautifulSoup实例的(name=None,attrs={},recursive=True,text=None,**kwargs)方法
使用属性字典soup.find("site", {"name":"us"})来避免冲突。
https://stackoverflow.com/questions/48634867
复制相似问题