[python] 아름다운 수프와 ID로 div와 그 내용 추출

soup.find("tagName", { "id" : "articlebody" })

왜 이것이 <div id="articlebody"> ... </div>사이에 태그와 물건을 반환하지 않습니까? 아무것도 반환하지 않습니다. 그리고 나는 그것이 바로 그것을 쳐다보고 있기 때문에 그것이 존재한다는 것을 알고 있습니다.

soup.prettify()

soup.find("div", { "id" : "articlebody" }) 또한 작동하지 않습니다.

( 편집 : BeautifulSoup이 내 페이지를 올바르게 구문 분석하지 않는 것으로 나타났습니다 . 구문 분석하려는 페이지가 SGML 등으로 올바르게 포맷되지 않았 음을 의미합니다)



답변

코드가 제대로 작동하므로 예제 문서를 게시해야합니다.

>>> import BeautifulSoup
>>> soup = BeautifulSoup.BeautifulSoup('<html><body><div id="articlebody"> ... </div></body></html')
>>> soup.find("div", {"id": "articlebody"})
<div id="articlebody"> ... </div>

<div>내부에서 <div>s를 찾는 것도 효과가 있습니다.

>>> soup = BeautifulSoup.BeautifulSoup('<html><body><div><div id="articlebody"> ... </div></div></body></html')
>>> soup.find("div", {"id": "articlebody"})
<div id="articlebody"> ... </div>


답변

그것으로 요소를 찾으려면 id:

div = soup.find(id="articlebody")


답변

Beautiful Soup 4는 이 메소드 를 사용하여 대부분의 CSS 선택기 를 지원 하므로 다음 과 같은 선택기를 사용할 수 있습니다 ..select()id

soup.select('#articlebody')

요소 유형을 지정해야하는 경우 선택기 앞에 유형 선택기 를 추가 할 수 있습니다 id.

soup.select('div#articlebody')

.select()메소드는 요소 콜렉션을 리턴하므로 다음 .find_all()메소드 예제 와 동일한 결과를 리턴합니다 .

soup.find_all('div', id="articlebody")
# or
soup.find_all(id="articlebody")

단일 요소 만 선택하려면 다음 .find()방법을 사용하십시오 .

soup.find('div', id="articlebody")
# or
soup.find(id="articlebody")


답변

‘div’태그가 너무 많이 중첩 된 경우 문제가 있다고 생각합니다. 페이스 북 html 파일에서 일부 연락처를 구문 분석하려고하는데 Beautifulsoup이 “fcontent”클래스의 “div”태그를 찾을 수 없습니다.

이것은 다른 클래스에서도 발생합니다. 일반적으로 div를 검색하면 중첩되지 않은 div 만 바뀝니다.

html 소스 코드는 친구 (친구가 아닌)의 친구 목록에있는 페이스 북의 모든 페이지가 될 수 있습니다. 누군가 그것을 테스트하고 조언을 줄 수 있다면 정말 감사하겠습니다.

이 코드는 “fcontent”클래스를 사용하여 “div”태그 수를 인쇄하려고합니다.

from BeautifulSoup import BeautifulSoup
f = open('/Users/myUserName/Desktop/contacts.html')
soup = BeautifulSoup(f)
list = soup.findAll('div', attrs={'class':'fcontent'})
print len(list)


답변

아마도 기본 beautifulsoup 파서에 문제가있을 수 있습니다. ‘lxml’과 같은 다른 구문 분석기를 변경 한 후 다시 시도하십시오.


답변

beautifulsoup 소스에서이 행은 div가 div 내에 중첩되도록합니다. lukas의 의견에 대한 귀하의 우려는 유효하지 않습니다.

NESTABLE_BLOCK_TAGS = ['blockquote', 'div', 'fieldset', 'ins', 'del']

내가해야 할 일은 원하는 속성을 지정하는 것입니다.

source.find('div', attrs={'id':'articlebody'})


답변

당신은 시도 soup.findAll("div", {"id": "articlebody"})했습니까?

미친 듯이 들리지만 야생에서 물건을 긁어 모으는 경우 여러 div를 배제 할 수 없습니다 …