如何使用BeautifulSoup提取名称/值对?

WoJ*_*WoJ 0 python beautifulsoup

我有类型的数据

<preference>
  <name>throttle_scan</name>
  <value>yes</value>
</preference>
  <preference><name>listen_address</name>
  <value>0.0.0.0</value>
</preference>
Run Code Online (Sandbox Code Playgroud)

这些本质上是我想用BeautifulSoup提取的名称/值对.

我设法提取了一份清单 preference

soup = bs4.BeautifulSoup(string_with_xml, 'html.parser')
for p in soup.find_all('preference'):
    c = p.contents
    print(c)
Run Code Online (Sandbox Code Playgroud)

给出一个列表preference:

[<name>throttle_scan</name>, '\n', <value>yes</value>, '\n']
[<name>listen_address</name>, '\n', <value>0.0.0.0</value>, '\n']
Run Code Online (Sandbox Code Playgroud)

如何进一步深入查看此列表?我应该去看一个新的

soup = bs4.BeautifulSoup(''.join(c), 'html.parser')
Run Code Online (Sandbox Code Playgroud)

和搜索namevalue

Avi*_*Raj 5

就这样做,

>>> from bs4 import BeautifulSoup
>>> html = '''<preference>
  <name>throttle_scan</name>
  <value>yes</value>
</preference>
  <preference><name>listen_address</name>
  <value>0.0.0.0</value>
</preference>'''
>>> soup = BeautifulSoup(html, 'lxml')
>>> for i in soup.select('preference'):
    print i.find('name').text
    print i.find('value').text
    print '-----------'


throttle_scan
yes
-----------
listen_address
0.0.0.0
-----------
>>> 
Run Code Online (Sandbox Code Playgroud)

soup.selectsoup.find_all此相同但在这里我们可以通过css选择器,这将使您的生活更轻松.例如,要选择所有具有该类的标签foo,您可以使用,

soup.select('.foo')
Run Code Online (Sandbox Code Playgroud)

.代表class#代表id标签.