【问题标题】:How do I get raw text with beautifulsoup?如何使用 beautifulsoup 获取原始文本?
【发布时间】:2012-07-12 08:50:36
【问题描述】:

我有一个这样的 xml:

<link>
www.link1.com
</link>
<link>
www.link2.com
</link>

我试过这段代码:

from BeautifulSoup import BeautifulStoneSoup 
soup = BeautifulStoneSoup(results2)     #Beautiful Soup
linklist = soup.findAll('link')
print soup

使用这段代码,输出是

[<link>www.link1.com</link>,<link>www.link2.com</link>]

但我想要这样的输出

[www.link1.com, www.link2.com]

【问题讨论】:

    标签: python xml parsing hyperlink beautifulsoup


    【解决方案1】:

    你试过了吗:

    linklist = [el.string for el in soup.findAll('link')]
    

    【讨论】:

    • 哇,非常感谢!它可以工作,但输出就像 [u'www.link1.com', u'www.link2.com].. 我该如何关闭 unicode 的东西?
    • 是的,您会得到一个包含链接 URL 字符串的列表 - 这不是您想要的吗?
    • 这是我想要的,谢谢,但我只想要 www.link1.com。输出是 u'www.link.com。我可以把 u 和 's 拿出来吗?
    • u'www.link1.com' 只是表示它是 unicode。只需print linklist[0] 即可查看,或者,如果您只想要第一个&lt;link&gt;,请使用soup.find 而不是soup.findAll
    • 哦,但我将把这个列表值作为 url 放在另一个代码中。所以 u'www.link1.com' 不起作用......我知道这是一个 unicode,但我需要摆脱这些 u 和 's。谢谢你的建议,它真的帮了我很多:D
    【解决方案2】:

    试试这个:

    from bs4 import BeautifulSoup
    
    xml = """<html><link>
    www.link1.com
    </link>
    <link>
    www.link2.com
    </link></html>"""
    
    soup = BeautifulSoup(xml,features="xml")
    linklist = soup.find_all('link')
    linklist = map(lambda x: x.string, linklist)
    

    请注意,我已将构造函数更改为 BeautifulSoupfeatures="xml",而不是 BeautifulStoneSoup,因为后者已被弃用。

    【讨论】:

      【解决方案3】:
      links = soup.find_all('link')
      link_strings = [s.string for s in links.string]
      

      【讨论】:

      • 你的意思是[s.string for s in links]
      猜你喜欢
      • 2020-06-03
      • 1970-01-01
      • 2021-05-10
      • 1970-01-01
      • 2012-11-13
      • 1970-01-01
      • 1970-01-01
      • 2015-04-21
      • 2019-11-18
      相关资源
      最近更新 更多