Web使用python(BeautifulSoup)对数据进行刮擦

问题描述 投票:0回答:1

如何使用beautifulsoup从一个HTML页面中删除数据

<div class="accordion-item accordion-item-active">
      <p class="accordion-title">
        <a href="javascript:void(0)"><span class="accordion-toggle"></span> What different payment modes are available to purchase SysTools products?</a>
      </p>
      <div class="accordion-content" style="display: block;">
        <div>
          <p> There are various payment methods available for purchasing SysTools products:</p>
          <ul class="list-with-icons list-icons-right-open">
            <li>Credit Card/Debit Card</li>
            <li>PayPal Account</li>
            <li>Pay with Amazon</li>
            <li>Purchase Order</li>
            <li>Wire Transfer</li>
            <li>eCheque Payment</li>
          </ul>
          <p>We accept all major cards such as MasterCard, VISA, Maestro Card, American Express, etc.</p>
        </div>
      </div>
    </div>

上面的“div”用不同的数据重复,有几个div不包含“ul”,“li”标签,只包含几个“p”标签。当然,我可以单独废弃“p”标签,单独“ul”,“li”标签。但我想按顺序刮掉整个“div”,首先是“p”标签,然后是另一个“p”标签,然后是列表标签,然后将其迭代到其他“div”标签(具有相同的格式) 。

python python-3.x web-scraping beautifulsoup
1个回答
0
投票

你的问题不是很清楚。虽然我可能已经得到了它。所以这是一个可能适合您需求的功能!

def process_div(div_tag):
    """
    Parameter: a div tag.
    Returns: lists of p, ul and li tags.
    """
    p_tags = [div_tag.find('p', class_ = 'accordion-title'), 
              div_tag.find('div', class_ = 'accordion-content').find_all('p')]
    ul_tag = div_tag.find('div', class_ = 'accordion-content').find('ul')
    li_tags = ul_tag.find_all('li')
    return p_tags, ul_tag, li_tags

它将按顺序返回div标签的内容。在较大的try/except树上使用它时,添加一个html语句可能会有用。这是我的小演示:

html = """
<div class="accordion-item accordion-item-active">
      <p class="accordion-title">
        <a href="javascript:void(0)"><span class="accordion-toggle"></span> What different payment modes are available to purchase SysTools products?</a>
      </p>
      <div class="accordion-content" style="display: block;">
        <div>
          <p> There are various payment methods available for purchasing SysTools products:</p>
          <ul class="list-with-icons list-icons-right-open">
            <li>Credit Card/Debit Card</li>
            <li>PayPal Account</li>
            <li>Pay with Amazon</li>
            <li>Purchase Order</li>
            <li>Wire Transfer</li>
            <li>eCheque Payment</li>
          </ul>
          <p>We accept all major cards such as MasterCard, VISA, Maestro Card, American Express, etc.</p>
        </div>
      </div>
    </div>
"""
soup = BeautifulSoup(html, 'html.parser') 

然后,

p_tags, ul_tag, li_tags = process_div(soup.div)
print p_tags
[<p class="accordion-title">\n<a href="javascript:void(0)"><span class="accordion-toggle"></span> What different payment modes are available to purchase SysTools products?</a>\n</p>,
 [<p> There are various payment methods available for purchasing SysTools products:</p>,
  <p>We accept all major cards such as MasterCard, VISA, Maestro Card, American Express, etc.</p>]]
© www.soinside.com 2019 - 2024. All rights reserved.