beautifulsoup4,正确的使用方法.find_all?

时间:2014-02-13 10:05:11

标签: python html parsing beautifulsoup findall

如果我使用BS4解析网站,并从其源代码我想打印文本“+26.67%”

 <font color="green"><b><nobr>+26.67%</nobr></b></font>

我一直在弄乱.find_all()命令(http://www.crummy.com/software/BeautifulSoup/bs4/doc/)无济于事。搜索源代码并仅打印文本的正确方法是什么?

我的代码:

import requests
from bs4 import BeautifulSoup

    set_url = "*insert web address here*"
    set_response = requests.get(set_url)
    set_data = set_response.text
    soup = BeautifulSoup(set_data)
    e = soup.find("nobr")
    print(e.text)

4 个答案:

答案 0 :(得分:1)

一个小例子:

>>> s="""<font color="green"><b><nobr>+26.67%</nobr></b></font>"""
>>> print s
<font color="green"><b><nobr>+26.67%</nobr></b></font>
>>> from bs4 import BeautifulSoup
>>> soup = BeautifulSoup(s)
>>> e = soup.find("nobr")
>>> e.text #or e.get_text()
u'+26.67%'

find返回第一个Tagfind_all返回ResultSet

>>> type(e)
<class 'bs4.element.Tag'>
>>> es = soup.find_all("nobr")
>>> type(es)
<class 'bs4.element.ResultSet'>
>>> for e in es:
...     print e.get_text()
...
+26.67%

如果您想要nobrb下的指定font,则可以是:

>>> soup.find("font",{'color':'green'}).find("b").find("nobr").get_text()
u'+26.67%'

如果先前.find返回“无”,则连续.find可能会导致异常,请注意。

答案 1 :(得分:0)

使用a CSS selector

>>> s = """<font color="green"><b><nobr>+26.67%</nobr></b></font>"""
>>> from bs4 import BeautifulSoup
>>> soup = BeautifulSoup(s)
>>> soup.select('font[color="green"] > b > nobr')
[<nobr>+26.67%</nobr>]

在选择器字符串中添加或删除属性或元素名称,以使匹配或多或少精确。

答案 2 :(得分:0)

这里有我的解决方案

s = """<font color="green"><b><nobr>+26.67%</nobr></b></font>"""
from bs4 import BeautifulSoup
soup = BeautifulSoup(s)
a = soup.select('font')
print a[0].text

答案 3 :(得分:0)

您可以在不使用 requests 库的情况下获取文本。以下是我对您的代码所做的编辑,它给出了您预期的结果。

from bs4 import BeautifulSoup
html_snippet="""<font color="green"><b><nobr>+26.67%</nobr></b></font>"""
soup = BeautifulSoup(html_snippet)
e = soup.find("nobr")
print(e.text)

结果是

+26.67%

祝你好运!