2011-08-27 4 views
0
<h2 class="sectionTitle">BACKGROUND</h2> 
Mr. Paul J. Fribourg has bla bla</span> 
<div style="margin-top:8px;"> 
    <a href="javascript:void(0)" onclick="show_more(this);">Read Full Background</a> 
</div> 

나는 어떤 웹 페이지 씨 폴의 <p> 뿅있다 을 blabla 씨 폴에서 정보를 추출하고 싶은, 그래서 FindNext('p') 그러나, 일부 웹 페이지처럼 <p>이없는 사용할 수 있습니다 위의 예제는 ..문제 ... BeautifulSoup로 구문 분석

<p>

background = bs2.find(text=re.compile("BACKGROUND")) 
bb= background.findNext('p').contents 

있을 때 내 코드입니다하지만 <p>이 없을 때 나는 정보를 추출 할 수있는 방법?

답변

2

당신이 우리에게 준 예제에서 말하기는 어렵지만, h2 다음 노드를 얻을 수 있습니다. 이 예에서, 루이스 캐롤p -aragraph 태그를 가지고 있으며, 여러분의 친구 폴은 닫는에게 span 태그가 있습니다

>>> from BeautifulSoup import BeautifulSoup 
>>> 
>>> html = ''' 
... <h2 class="sectionTitle">BACKGROUND</h2> 
... <p>Mr. Lewis Carroll has bla bla</p> 
... <div style="margin-top:8px;"> 
...  <a href="javascript:void(0)" onclick="show_more(this);">Read Full Background</a> 
... </div> 
... <h2 class="sectionTitle">BACKGROUND</h2> 
... Mr. Paul J. Fribourg has bla bla</span> 
... <div style="margin-top:8px;"> 
...  <a href="javascript:void(0)" onclick="show_more(this);">Read Full Background</a> 
... </div> 
... ''' 
>>> 
>>> soup = BeautifulSoup(html) 
>>> headings = soup.findAll('h2', text='BACKGROUND') 
>>> for section in headings: 
...  p = section.findNext('p') 
...  if p: 
...   print '> ', p.string 
...  else: 
...   print '> ', section.parent.next.next.strip() 
... 
> Mr. Lewis Carroll has bla bla 
> Mr. Paul J. Fribourg has bla bla 

다음 의견 :

>>> from BeautifulSoup import BeautifulSoup 
>>> from urllib2 import urlopen 
>>> html = urlopen('http://investing.businessweek.com/research/stocks/private/person.asp?personId=668561&privcapId=160900&previousCapId=285930&previousTitle=LOEWS%20CORP') 
>>> soup = BeautifulSoup(html) 
>>> headings = soup.findAll('h2', text='BACKGROUND') 
>>> for section in headings: 
...  paragraph = section.findNext('p') 
...  if paragraph and paragraph.string: 
...   print '> ', paragraph.string 
...  else: 
...   print '> ', section.parent.next.next.strip() 
... 
> Mr. Paul J. Fribourg has been the President of Contigroup Companies Inc. (for [...] 

당신은 할 수있다, 물론을 , 저작권 고지를 확인하고 싶다면, 등등 ...

+0

감사합니다. 친절한 대답! 사실 Mr. Paul 전에는 이 없습니다. 코드를 실행하면 전체 배경 읽기가 표시됩니다 ....이 문제를 해결할 방법을 알려주시겠습니까? – Willy

+0

@Willy : 내 원래 대답은 어떤 사람이 ''태그를 추가 한 질문에 대한 편집 내용이었습니다. 그에 따라 내 대답을 편집했습니다. – Johnsyweb

+0

오, 정말 고마워요! 그것은 정말로 잘하고 있습니다 ..하지만 원래 웹 사이트에서는 작동하지 않습니다. : ((울고 싶습니다 .. – Willy

0

는 "일부 웹 페이지 씨 폴의 <p> 뿅을 가지고, 그래서 나는 그러나 일부 웹 페이지가 위의 예와 같이 <p>이없는 FindNext ('P')를 사용할 수 있습니다." 예를 들어,

  • 고정 노드 구조 :

당신은 충분한 정보를 제공하지 않는 것은 당신의 문자열을 인식 할 수 있어야합니다 getChildren() [1] .text

  • 코드에 따라 'BACKGROUND'라는 마술 문자열이있는 경우 다음 노드를 찾는 방법이 좋습니다. 단지 빌드하지 마십시오. 태그 이름은 'P'
  • 정규식이라고 가정 (예 : "(씨 |. 리) ...")가 앞에 <p>이없는 경우

  • 우리에게 HTML 예제보기 이름이 뭐니?

    +0

    친절한 의견 감사합니다! 두 번째 요점은 정확하다고 생각합니다. 문자열 배경은 마법의 문자열 일 수 있습니다 ..하지만 단어 뒤에 텍스트를 추출하는 방법을 고려했습니다 .. 잘 모르겠습니다 .. 작동하지 않습니다 .. – Willy