2015-02-01 4 views
0

Я использую BeautifulSoup для очистки страницы HTML и поиска, чтобы выбрать строку на основе ключа массива, а не тега элемента.BeautifulSoup - выберите строку на основе словарного ключа

В этом случае я хочу использовать «fmt_headline» в качестве ключа для захвата «Основателя и генерального директора в SolarThermoChemical LLC».

<div id="srp_main_" class=""> 
<code id="voltron_srp_main-content" style="display:none;"> 

"fmt_headline":"Founder and CEO at SolarThermoChemical LLC", 
"isConnectedEnabled":true, 
"sharedConnectionToken":"240506fce660" 

</div> 

Любые мысли о том, как это сделать?

+0

Не совсем понятный HTML-код, который вы пытаетесь проанализировать - этот код, который вы показали, не является HTML, а HTML - это то, что BS разбирает! -) –

+0

Я вытаскиваю его с этой страницы (только что обновил блок с тегами): view-source: https: //www.linkedin.com/vsearch/f? type = all & keywords = John + Mankins & orig = GLHD & rsid = 373993061422766130017 & pageKey = voltron_federated_search_internal_jsp & trkInfo = & search = Поиск – Jason

ответ

0

После того, как вы разобраны ваш HTML с BeautifulSoup, он может дать вам весь текст:

2>>> x 
'<div id="srp_main_" class="">\n<code id="voltron_srp_main-content" style="display:none;">\n\n"fmt_headline":"Founder and CEO at SolarThermoChemical LLC",\n"isConnectedEnabled":true,\n"sharedConnectionToken":"240506fce660"\n\n</div>' 
2>>> soup=bs4.BeautifulSoup(x) 
2>>> y=soup.get_text() 
2>>> y 
u'\n\n\n"fmt_headline":"Founder and CEO at SolarThermoChemical LLC",\n"isConnectedEnabled":true,\n"sharedConnectionToken":"240506fce660"\n\n' 

Теперь, дальнейший анализ этого текста остается на другие инструменты, такие как регулярные выражения:

2>>> import re 
2>>> mo = re.search(r'"fmt_headline":"([^"]*)"', y) 
2>>> print(mo.group(1)) 
Founder and CEO at SolarThermoChemical LLC 
0

Ваши желаемые данные приведены в разделе комментариев html. Поэтому вам нужно сначала извлечь комментарий.

from bs4 import BeautifulSoup, Comment 

tag = soup.find('code', attrs={'id': "voltron_srp_main-content"}) 
tag_comments = tag.find_all(text=lambda text: isinstance(text, Comment)) 

Теперь форма tag_comments вы можете разобрать его, как JSON (это выглядит как JSON) или использовать регулярные выражения, как показано в ответ Alex Мартелли в.