我需要从这种格式的网页中抓取数据。我只需要h2和h3的第一个孩子的内部文本,即来自第一个跨度和所有其他<p>
标签的
<div class="info">
<h2>
<span>first heading</span>
<span> not required</span>
</h2>
<p> 1 paragraph</p>
<p> 2 paragraph</p>
<div> some tags</div>
<h3>
<span>second heading</span>
<span> not required</span>
</h3>
<p> 3 paragraph</p>
<p> 4 paragraph</p>
</div>
输出;
first heading
1 paragraph
2 paragraph
second heading
3 paragraph
4 paragraph
soup.find_all([“ h1”,“ p”,“ h2”,“ h3”]) 尝试此操作后,我也得到了我不想要的第二个跨度内部文本。 我只需要h2和h3的内部文本的第一个span内容和p标签内容。 我是python的新手,对汤的任何帮助将不胜感激。
答案 0 :(得分:0)
尝试这个
from bs4 import BeautifulSoup as bs
my_data = [your html above]
soup = bs(my_data, "lxml")
for head in ["h2", "h3"]:
target = soup.find(head)
print(target.findChild().text)
输出:
first heading
second heading
答案 1 :(得分:0)
您可以使用find_all()获取所需的标签,然后在只需要第一个孩子的元素上使用findChild()
body: Container(
padding: EdgeInsets.all(20.0),
child: Form(
key: _formKey,
child: Column(children: <Widget>[
....
]
) // Form
) // Container
输出;
from bs4 import BeautifulSoup
html = """
<div class="info">
<h2>
<span>first heading</span>
<span> not required</span>
</h2>
<p> 1 paragraph</p>
<p> 2 paragraph</p>
<div> some tags</div>
<h3>
<span>second heading</span>
<span> not required</span>
</h3>
<p> 3 paragraph</p>
<p> 4 paragraph</p>
</div>
"""
soup = BeautifulSoup(html, "lxml")
for elem in soup.find_all(['h2', 'h3', 'p']):
if elem.name == 'p':
print(elem.text)
else:
print(elem.findChild().text)