【问题标题】:Python - Beautiful Soup: Extract "strings" from tag in right orderPython - Beautiful Soup:以正确的顺序从标签中提取“字符串”
【发布时间】:2013-05-27 08:15:08
【问题描述】:

我正在寻找一个漂亮的汤命令组合,以正确的顺序从 a-tag 字符串中提取“字符串”。

来源 1: <a href="target" title="title">a-string <img alt="img-alt"> <span>span-string</span></a>

目标 1: "a-string img-alt span-string"

来源 2: <a href="target" title="title"><span>span</span> string <img alt="alt"></a>

目标 2: "span-string a-string img-alt"

很容易通过“find_all()”获取子元素,通过“get_text()”获取文本。

如何获得不同“字符串”的正确顺序?还是依次解析a-string中的所有信息?

【问题讨论】:

  • 您在寻找什么“字符串”?为什么不target-title-a-string -img-al span-stringtarget-title-span string-alt
  • 有时我们通过用这个字母的图像替换单个字符来“保护”值,例如“地狱老兄

标签: python beautifulsoup


【解决方案1】:

对于 1:

import bs4
a = bs4.BeautifulSoup("""<a href="target" title="title">a-string <img alt="img-alt"> <span>span-string</span></a>""")
print(" ".join((a.find(text=True),a.find("img").attrs["alt"],a.find("span").text)))

对于 2:

import bs4
a = bs4.BeautifulSoup("""<a href="target" title="title">a-string <img alt="img-alt"> <span>span-string</span></a>""")
print(" ".join((a.find("span").text, a.find(text=True), a.find("img").attrs["alt"])))

我认为没有通用的方法来提取您想要的内容,因为您正在混合文本内容和属性。

a.find(text=True) ## Get first element text
a.findAll(text=True) ## Get a list of text elements from string

【讨论】:

    【解决方案2】:

    认为这就是您正在寻找的答案...contents 方法返回一个列表

    from BeautifulSoup import BeautifulSoup
    
    s="""<a href="target" title="title">a-string <img alt="img-alt"> <span>span-string</span></a>"""
    soup=BeautifulSoup(s)
    z=soup.find("a")
    print z.contents
    

    【讨论】:

      【解决方案3】:

      使用lxml

      import lxml.html as LH
      content = '''
      <a href="target" title="title">a-string <img alt="img-alt"> <span>span-string</span></a>
      <a href="target" title="title"><span>span</span> string <img alt="alt"></a>
      '''
      
      root = LH.fromstring(content)
      for atag in root.xpath('//a'):
          print(' '.join(atag.xpath('''
              descendant-or-self::text()
              |
              descendant-or-self::*/@alt
              ''')))
      

      产量

      a-string  img-alt span-string
      span  string  alt
      

      【讨论】:

        猜你喜欢
        • 2016-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-24
        • 2018-08-05
        • 1970-01-01
        相关资源
        最近更新 更多