【问题标题】:Get text between two different html tags python beautifulsouppython beautifulsoup获取两个不同html标签之间的文本
【发布时间】:2023-03-07 01:42:01
【问题描述】:

我想知道是否可以通过 python 中的 beautifulsoup 包在两个完全不同的文本之间获取标签。我已经试过了:

g = soup.find_all(["dtposted"])
for tag in g:
    print(tag)

<dtposted>2020<trnamt>10<fitid>202010<name>RESTAURANT</name></fitid></trnamt></dtposted>

我希望能够分别获取 dtposted、trnamt、fitid 和 name 之间的文本。当我寻找下一个兄弟时,它返回 None,如果我寻找一个特定的标签,它不会给我两个标签之间的文本,而是整个字符串:

for tag in g:
    print(tag.find_all("tnramt")

<trnamt>10<fitid>202010<name>RESTAURANT</name></fitid></trnamt></dtposted>

如果有办法分别获得 2020、10、202010、RESTAURANT,那就太好了。

【问题讨论】:

    标签: python html beautifulsoup


    【解决方案1】:

    见下文(使用 XML 解析)

    import xml.etree.ElementTree as ET
    
    xml = '''
    <dtposted>
       2020
       <trnamt>
          10
          <fitid>
             202010
             <name>RESTAURANT</name>
          </fitid>
       </trnamt>
    </dtposted>'''
    
    root = ET.fromstring(xml)
    print(root.text.strip())
    print(root.find('.//trnamt').text.strip())
    print(root.find('.//fitid').text.strip())
    print(root.find('.//name').text.strip())
    

    输出

    2020
    10
    202010
    RESTAURANT
    

    【讨论】:

      【解决方案2】:

      这将为您提供一个可以使用的列表:

      import re
      
      variable = "<trnamt>10<fitid>202010<name>RESTAURANT</name></fitid></trnamt></dtposted>"
      text = []
      def tostring(html):
          removedhtml = re.compile('<.*?>')
          items = re.sub(removedhtml, ',', html)
          items = items.split(",")
          for item in items: 
              if item.strip(): 
                  text.append(item)
          return text
      
      print ((tostring(variable)))
      

      输出

      ['10', '202010', 'RESTAURANT']
      

      【讨论】:

        猜你喜欢
        • 2016-06-22
        • 2018-01-02
        • 2018-03-16
        • 1970-01-01
        • 1970-01-01
        • 2016-12-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多