2014-02-13 2 views
0

Если я разобрать сайт, используя BS4, и от его исходного кода я хочу, чтобы напечатать текст «+ 26,67%»beautifulsoup4, правильный способ использования .find_all?

<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) 

ответ

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%' 

Continuous .find может вызвать исключение, если предыдущие .find возвращает None, не обращают внимания.

+0

Thats почти такой же, как я использовал 'find_all()' Я думаю, что проблема как им разбора веб-страницы. в вашем примере ваша установка 's =" "" .... "" "' в моей программе, анализируя страницу с помощью запросов. я добавлю свой код на главный вопрос, дайте мне знать, что вы думаете – user3230554

+0

@ user3230554 Так в чем проблема вашего кода? – WKPlus

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>] 

Добавить или удалить свойство или имена элементов образует строку выбора, чтобы сделать матч более или менее точным.

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 
Смежные вопросы