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

时间:2016-03-10 12:56:49

标签: python beautifulsoup

我有

类型的数据
<preference>
  <name>throttle_scan</name>
  <value>yes</value>
</preference>
  <preference><name>listen_address</name>
  <value>0.0.0.0</value>
</preference>

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

我设法提取了preference

的列表
soup = bs4.BeautifulSoup(string_with_xml, 'html.parser')
for p in soup.find_all('preference'):
    c = p.contents
    print(c)

根据preference列出一个列表:

[<name>throttle_scan</name>, '\n', <value>yes</value>, '\n']
[<name>listen_address</name>, '\n', <value>0.0.0.0</value>, '\n']

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

soup = bs4.BeautifulSoup(''.join(c), 'html.parser')

并搜索namevalue

1 个答案:

答案 0 :(得分: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
-----------
>>> 

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

soup.select('.foo')

.代表class#代表代码id