2012-03-20 3 views
12

HTML 파일에서 데이터를 추출해야합니다. 문제의 파일이 자동으로 생성됩니다. Pastebin에 다음 파일 중 하나의 코드를 업로드했습니다 : http://pastebin.com/9Nj2Edfv. 다음은 실제 페이지에 대한 링크입니다. http://eur-lex.europa.eu/Notice.do?checktexts=checkbox&val=60504%3Acs&pos=1&page=1&lang=en&pgs=10&nbl=1&list=60504%3Acs%2C&hwords=&action=GO&visu=%23texteBeautifulSoup 및 Python을 사용하여 HTML 파일에서 데이터 추출

추출해야하는 데이터는 다른 제목 아래에 나와 있습니다.

이것은 내가 지금까지 무엇을 가지고 :

from BeautifulSoup import BeautifulSoup 
ecj_data = open("data\ecj_1.html",'r').read() 

soup = BeautifulSoup(ecj_data) 

celex = soup.find('h1') 
auth_lang = soup('ul', limit=14)[13].li 
procedure = soup('ul', limit=20)[17].li 

print "Celex number:", celex.renderContents(), 
print "Authentic language:", auth_lang 
print "Type of procedure:", procedure 

나는 모든 데이터는 파일 ecj_1.html을 여는 이유가있는 로컬로 저장합니다.

Celex 번호와 Authentic 언어가 다소 효과적입니다.

CELEX는 auth_lang는 "Authentic language: <li>French</li>"

내가 H1 태그 (하지 말에서 휴식)의 내용 만이 필요 반환

"Celex number: 
61977J0059" 

반환합니다.

는 [또한, 나는 <li> -tags 그냥 "프랑스어"돌아 auth_lang, 그리고 필요합니다.] 이 더 이상 문제가되지 않습니다. 나는 "auth_lang"의 끝에 ".text"를 추가 할 수 있음을 깨달았다. 반면에

절차는이를 반환

난 그냥 "예비 판결에 대한 참조"를 반환하는 데 필요로하는 매우 잘못된 것입니다
Type of procedure: <li> 
    <strong>Type of procedure:</strong> 
    <br /> 
    Reference for a preliminary ruling 
    </li> 

.

이것을 수행 할 수있는 방법이 있습니까?

두 번째 편집 : 나는 celex = soup('h1', limit=2)[0]celex = soup.find('h1')를 교체하고 인쇄 CELEX에 .text을 추가했다.

답변

3

발견 된 각 시퀀스의 내용은 목록입니다. 다만 처음 두 개는 길이가 1입니다. 그러나 procedure은 5 개의 요소이며, (이 경우) 뒤에있는 항목은 4 번째입니다. 줄 바꿈도 없애기 위해 splitlines()을 사용했습니다.

print "Celex number:", celex.contents[0].splitlines()[1] 
print "Authentic language:", auth_lang.contents[0].splitlines()[0] 
print "Type of procedure:", procedure.contents[4].splitlines()[1] 

출력 :

Celex number: 61977J0059 
Authentic language: French 
Type of procedure: Reference for a preliminary ruling 
+0

프락셀 : 대단히 감사합니다! 그것은 매력처럼 작동합니다. 아이디어는 어떻게 든이 파일의 출력을 데이터베이스로 전송하는 것입니다. 나중에 문제가 생길 가능성이있을 때 줄 바꿈을 제거하는 방법을 보여 주었을 때 미래의 문제를 해결했을 수도 있습니다. 다시 한번 감사드립니다. – A2D2

관련 문제