如果我使用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)
答案 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
返回第一个Tag
,find_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%
如果您想要nobr
和b
下的指定font
,则可以是:
>>> soup.find("font",{'color':'green'}).find("b").find("nobr").get_text()
u'+26.67%'
如果先前.find
返回“无”,则连续.find
可能会导致异常,请注意。
答案 1 :(得分:0)
>>> 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%
祝你好运!