Programming

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

procodes 2020. 6. 28. 20:11
반응형

아름다운 수프와 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를 배제 할 수 없습니다 ...


나는 사용했다 :

soup.findAll('tag', attrs={'attrname':"attrvalue"})

find / findall에 대한 내 구문으로; 즉, 태그와 속성 목록 사이에 다른 선택적 매개 변수가 없으면 다르지 않습니다.


Google을 긁어 내려고하면서 나에게도 일어났다.
pyquery를 사용했습니다.
설치:

pip install pyquery

사용하다:

from pyquery import PyQuery    
pq = PyQuery('<html><body><div id="articlebody"> ... </div></body></html')
tag = pq('div#articlebody')

다음은 코드 조각입니다

soup = BeautifulSoup(:"index.html")
titleList = soup.findAll('title')
divList = soup.findAll('div', attrs={ "class" : "article story"})

보시다시피 모든 태그를 찾은 다음 class = "article"이있는 모든 태그를 찾습니다.

참고 URL : https://stackoverflow.com/questions/2136267/beautiful-soup-and-extracting-a-div-and-its-contents-by-id

반응형