2016-08-13 4 views
0

나는이 텍스트가 :HTML 태그 정규식 이스케이프 문자는

<h5 class="subblocksubhead subsubsectionhead first"><b>Messaggi inseriti</b></h5> 
<dl class="blockrow stats"> 
    <dt><b>Messaggi inseriti</b></dt> 
    <dd> 81</dd> 
</dl> 
<dl class="blockrow stats"> 
    <dt>Media dei messaggi giornalieri</dt> 
    <dd> 0.02</dd> 
</dl> 

나는이 코드를 사용하여 " 81"를 추출하기 위해 노력하고있어 : 나는 항상 얻을

regex_message_sent_num=r'Messaggi inseriti<.+>\n\t\t<.+?>(\s.+)<.+?>' 
pattern_message_sent_num=re.compile(regex_message_sent_num) 
results_message_sent_num=re.findall(pattern_message_sent_num,html_text) 

을 빈 목록으로 출력, 반면 코드 here 코드를 테스트하는 반면 오른쪽 추출.

내가 뭘 잘못하고 있는지 아는 사람이 있습니까? HTML은 운동으로 보이는 데이터를 추출하려고하는 웹 페이지에서 제공됩니다. 크롬 브라우저에서 저장 한 HTML 텍스트에서 정규식을 테스트했습니다.

+2

* "내가 뭘 잘못하고 있니?"* - 예! 당신은 [정규식으로 HTML을 구문 분석하려고] (http://stackoverflow.com/a/1732454/3001761). ** 실제 HTML 파서 **, [Beautiful Soup] (https://www.crummy.com/software/BeautifulSoup/) 또는 무엇인가를 사용하십시오. – jonrsharpe

+0

제안을 주셔서 감사합니다. 귀하가 제안한 도구를 사용하겠습니다. –

답변

0

대신 BeautifulSoup과 같은 HTML 구문 분석기를 사용하십시오.

from bs4 import BeautifulSoup 

data = """ 
<div> 
    <dl class="blockrow stats"> 
     <dt><b>Messaggi inseriti</b></dt> 
     <dd> 81</dd> 
    </dl> 
    <dl class="blockrow stats"> 
     <dt>Media dei messaggi giornalieri</dt> 
     <dd> 0.02</dd> 
    </dl> 
</div>""" 

soup = BeautifulSoup(data, "html.parser") 

label = soup.find("dt", text="Messaggi inseriti") 
print(label.find_next_sibling("dd").get_text(strip=True)) 

인쇄 81 : 텍스트 검색과 find_next_sibling() method를 사용

.

+0

제안을 주셔서 감사합니다. 귀하의 답변에 예시 된대로 새 코드를 작성하고 HTML 파서 BeautifulSoup를 사용하려고 노력할 것입니다. –

관련 문제