2012-10-28 1 views
4

다음은 HTML 문서의 하위 집합입니다. ... <a name="1">은 각 테이블마다 다른 텍스트로 "2", "3", "4"등이 될 수 있지만 반복되는 여러 테이블이 있음을 유의하십시오. "1) 텍스트 편집기"python beautifulsoup에서 다음 HTML을 어떻게 분석합니까?

<table align="center" width="550"> 
<tr> 
<td valign="top" width="300"><b>Product:</b></img></td> 
<td> 
<a name="1"></a>1) Text Editor 
<p>An application for the editing of text files.</p> 
<br> 
<b>Application Name: Notepad</b> 
<br>    
<b>Type: Writing</b> 
<br><br></td> 
</tr> 
</table> 

나는 특정 "#"을 동일에 ""태그 (이 경우, 1) 을 찾아 어떻게 든의 텍스트를 얻을 수있을 수 있도록하려면 .

내가 전체 문서를 아름답게 만들면 나는 모든 테이블을 제공하기 위해 findAll("table")과 같은 것을 사용할 수 있지만, 나는 그 값에 어떻게 도달 할 수 있는지 모른다. 나는 findAll("a") 같은 것을 할 수 있을지도 모르지만 어떻게 "이름"을 (이 경우 1)과 동일하게 지정할 것입니까? 비록 내가 그것을 할 수 있다고해도, 나는 "1"텍스트 편집기에 도착할 수 없을 것이다. "a"태그는 비어있다. 그리고 나는 또한 "<b>Application Name: Notepad</b>"부분과 같은 것을 얻을 수 없었다.

python/beautifulsoup의 조합으로 가장 좋은 해결책은 무엇입니까? 아니면 "1) 텍스트 편집기"와 "응용 프로그램 이름"및 "유형"부분을 사실 그 앞에는 <a name="1"></a>이 있습니까? 샘플 구문은 훌륭합니다.

답변

1

당신은 ...

>>> a.next 
u'1) Text Editor\n' 

... 그리고 다음 <b> 요소를 ... findAll

>>> a = soup.findAll("a", attrs={"name": "1"})[0] 

을 속성을 지정 ... 그리고 다음 노드를 얻을 수 있습니다 ...

>>> a.findNext("b") 
<b>Application Name: Notepad</b> 

... 등등.

그런데 namefindAll()의 특수한 인수이므로 attrs 인수가 필요합니다. 다른 특성이 있다면 예를 들어

1
+0

그 결과는 다음과 같습니다 : ,하지만 어떻게 얻을 수있는 다른 속성을 얻을 수 있도록 부모 요소에 도착합니까? (예 : 1) TextEditor, Application Name 등) 또는 추출 할 수있는 더 좋은 방법이 있습니까? 문제는 내가 얻고 자하는 내용이 그 "a"태그 안에서 감싸지지 않지만 그 태그 밖의 부모 엘리먼트입니다. – Setsuna

관련 문제