2012-05-06 5 views
0

전화 번호는 사용자가 '555 1437662'를 클릭 할 때까지 숨겨 지지만 (555 143 ....), onclick 매개 변수 ... 전화를 받기 위해 사용할 수있는 옵션은 무엇입니까? 아래 HTML에서 번호 ...?파이썬에서 html로 전화 번호를 추출합니다.

<html> 
    <body> 
     <h3 id="resultTelBar"> 
      <span onclick="showFullNumber(this, '555 1437662'); 
       dcsMultiTrack('DCSext._mainreq','','DCSext.linktype', 
       'telephone show','DCSext.linkplace','','DCSext.linkvalue','555 1437662', 
       'DCSext.show_listingId','SA_6597739_4638_003722_8396251_IYMX', 
       DCSext.show_zoningUsed','0','DCSext.show_resultNumber','1')" 
       >086 143 ....</span> 
     </h3> 
    </body> 
</html> 

답변

0

정보는 태그 속성에 문자열로 포함되어 있습니다. 그게 .. 아주 불행한거야.

(편집 :..이 잘못된 경우 알려 주시기 바랍니다 ", 입력으로이 불행한 HTML/자바 스크립트가 주어 어떻게 BeautifulSoup로와 전화 번호를 구문 분석 할 수 있습니다"나는 여기에 질문을 믿고있어, 명확히하기 위해)

가장 쉬운 방법은 자바 스크립트 문자열을 분리 한 다음 정규식을 사용하여 숫자를 추출하는 것입니다. 그러나 정규 표현식 부분은 PITA가 될 것이고 꽤 깨지기 쉽습니다.

soup.find('h3', id='resultTelBar').span['onclick'] 수프가 BeautifulSoup 객체라고 가정하고 문자열을 가져옵니다. 그런 다음 re.search을 사용하여 첫 번째 줄에서 숫자를 파싱합니다. 당신이 사용하는 정확한 정규식은 결과가 얼마나 정규식에 달려 있는가 (줄 바꿈을 포함하여 모든 형식의 JavaScript 문자열입니까?) 및 인스턴스 외선 전화 번호가 필요한 경우 얼마나 강력한 지 또는 자바 스크립트가 이 데이터의 향후 버전은 약간 조정됩니다.

2

나는 beautyfulsoup 태그를 발견했지만 lxml으로 내 변형을 제안했습니다. 원한다면 사용할 수 있습니다. 나는 정규 표현식에 대해별로 신경 쓰지 않는다. 어떤 경우에는 작동하지 않는다면 그것을 향상시킬 수있다.

>>> import re 
>>> from lxml import etree 
>>> etree.fromstring(u'''YOUR HTML''') 
>>> onclick = html.xpath('//h3[@id="resultTelBar"]/span/@onclick')[0] 
>>> print re.search("showFullNumber\(this,\s*'([\d ]+)'", onclick).group(1) 
555 1437662 
+0

감사합니다 ... lxml은 훌륭하게 작동합니다 ...! 시도합니다 ... –

관련 문제