分别获取父文本和子文本并将它们存储在字典中
Get the parent text and child one separately and store them in dictionary
假设我有这个 html,
<span class="name">
<span class="age">21</span>
Will Green
</span>
我想提取 name
和 age
文本并将它们存储到字典中。
到目前为止,我已经能够获得 age
,但很难获得 name
。
这是我到目前为止尝试过的方法。
with open('test.html', 'r') as file:
contents = file.read()
soup = BeautifulSoup(contents, 'html.parser')
name = soup.find(class_="name").getText()
age = soup.find("span", class_="age").getText()
results = {}
results['name'] = name
results['age'] = age
print(results)
输出为{'name': '\n21\n Will Green\n ', 'age': '21'}
如您所见,name
给了我一些奇怪的字符、空格以及子元素的文本。
我该如何解决这个问题?
预期输出{'name': 'Will Green', 'age': '21'}
事实上,结构仍然相同,您可以使用 stripped_strings
和 zip()
它与预期的 keys
:
dict(zip(['age','name'],soup.select_one('span.name').stripped_strings))
另一种方法是先 select 年龄,然后 next_sibling
:
{
'age': soup.select_one('span.age').text,
'name':soup.select_one('span.age').next_sibling.get_text(strip=True)
}
例子
html='''
<span class="name">
<span class="age">21</span>
Will Green
</span>
'''
from bs4 import BeautifulSoup
soup = BeautifulSoup(html)
dict(zip(['age','name'],soup.select_one('span.name').stripped_strings))
输出
{'age': '21', 'name': 'Will Green'}
假设我有这个 html,
<span class="name">
<span class="age">21</span>
Will Green
</span>
我想提取 name
和 age
文本并将它们存储到字典中。
到目前为止,我已经能够获得 age
,但很难获得 name
。
这是我到目前为止尝试过的方法。
with open('test.html', 'r') as file:
contents = file.read()
soup = BeautifulSoup(contents, 'html.parser')
name = soup.find(class_="name").getText()
age = soup.find("span", class_="age").getText()
results = {}
results['name'] = name
results['age'] = age
print(results)
输出为{'name': '\n21\n Will Green\n ', 'age': '21'}
如您所见,name
给了我一些奇怪的字符、空格以及子元素的文本。
我该如何解决这个问题?
预期输出{'name': 'Will Green', 'age': '21'}
事实上,结构仍然相同,您可以使用 stripped_strings
和 zip()
它与预期的 keys
:
dict(zip(['age','name'],soup.select_one('span.name').stripped_strings))
另一种方法是先 select 年龄,然后 next_sibling
:
{
'age': soup.select_one('span.age').text,
'name':soup.select_one('span.age').next_sibling.get_text(strip=True)
}
例子
html='''
<span class="name">
<span class="age">21</span>
Will Green
</span>
'''
from bs4 import BeautifulSoup
soup = BeautifulSoup(html)
dict(zip(['age','name'],soup.select_one('span.name').stripped_strings))
输出
{'age': '21', 'name': 'Will Green'}