2015-02-01 1 views
0

BeautifulSoup을 사용하여 HTML 페이지를 긁어 내고 요소 태그가 아닌 배열 키를 기반으로 문자열을 선택하려고합니다.BeautifulSoup - 사전 키 기반 문자열 선택

이 경우 저는 "SolarThermoChemical LLC의 창립자 겸 CEO"를 사로 잡는 열쇠로 "fmt_headline"을 사용하려고합니다.

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

이 작업을 수행하는 방법에 대한 의견이 있으십니까?

당신이 BeautifulSoup로하여 HTML을 구문 분석하면
+0

구문 분석하려는 HTML에 대해 전혀 알지 못해도 보여준 코드 블록은 HTML이 아니며 HTML은 BS가 구문 분석 한 것입니다. -) –

+0

나는이 페이지에서 태그가있는 블록) :보기 소스 : 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

, 그것은 당신에게 모든 텍스트 제공 할 수 있습니다 :

: 이제

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과 같은) 또는 알렉스 마르 텔리의 대답과 같이 정규식을 사용할 수 있습니다.