是否有功能提取标签中的标签以及美丽汤中所有其他剩余标签

时间:2019-06-02 10:48:14

标签: python beautifulsoup

我需要从这种格式的网页中抓取数据。我只需要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的新手,对汤的任何帮助将不胜感激。

2 个答案:

答案 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)