美味汤类E

2024-04-26 17:20:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我在beauthulsoup(更具体地说是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"))

我得到以下错误:

^{pr2}$

但如果我把最后一行改成:

print(soup.find("site", location="americas"))

我得到以下输出:

<site location="americas" name="us">
  <addresslist>="IPv4"&gt;
    <address>192.168.4.13/32</address>
    <address>192.168.5.13/32</address>
  </addresslist>
  <addresslist>="IPv6"&gt;
    <address>fc00:07bc:5ae6:75d0::45/128</address>
    <address>fc00:07bc:5ae6:75d1::45/128</address>
  </addresslist>
</site>

为什么会这样?在


Tags: nameaddressversionsitelocationxmlipv6ipv4
1条回答
网友
1楼 · 发布于 2024-04-26 17:20:49

namefind(在您的例子中是“site”)的第一个参数的名称:

find(name=None, attrs={}, recursive=True, text=None, **kwargs) method of bs4.BeautifulSoup instance

使用属性字典soup.find("site", {"name":"us"})来避免冲突。在

相关问题 更多 >