나는 Beautiful Soup을 사용하여 렌더링 된 콘텐츠를 얻는 것을 전적으로 존중하지만 페이지에서 렌더링 된 콘텐츠를 얻는 데 이상적인 패키지가 아닐 수 있습니다.
렌더링 된 콘텐츠 또는 일반적인 브라우저에서 보이는 콘텐츠를 얻는 데 비슷한 문제가있었습니다. 특히 아래의 간단한 예제로 작업 할 수있는 비정형 사례가 많았습니다. 이 경우 표시 할 수없는 태그는 스타일 태그에 중첩되며 내가 확인한 많은 브라우저에서 표시되지 않습니다. 클래스 태그 설정 표시를 없음으로 정의하는 것과 같은 다른 변형이 있습니다. 그런 다음 div에이 클래스를 사용합니다.
<html>
<title> Title here</title>
<body>
lots of text here <p> <br>
<h1> even headings </h1>
<style type="text/css">
<div > this will not be visible </div>
</style>
</body>
</html>
위에 게시 된 한 가지 해결책은 다음과 같습니다.
html = Utilities.ReadFile('simple.html')
soup = BeautifulSoup.BeautifulSoup(html)
texts = soup.findAll(text=True)
visible_texts = filter(visible, texts)
print(visible_texts)
[u'\n', u'\n', u'\n\n lots of text here ', u' ', u'\n', u' even headings ', u'\n', u' this will not be visible ', u'\n', u'\n']
이 솔루션은 확실히 많은 경우에 응용 프로그램이 있으며 일반적으로 작업을 잘 수행하지만 위에 게시 된 html에서는 렌더링되지 않은 텍스트를 유지합니다. SO 검색 한 후 몇 가지 솔루션은 여기 와서 BeautifulSoup로의 get_text 모든 태그와 자바 스크립트를 제거하지 않습니다 여기에 파이썬을 사용하여 일반 텍스트로 렌더링 된 HTML을
html2text와 nltk.clean_html이라는 두 가지 솔루션을 모두 시도했으며 타이밍 결과에 놀랐으므로 후손에 대한 답변이 필요하다고 생각했습니다. 물론 속도는 데이터 내용에 크게 좌우됩니다.
@Helge의 답변 중 하나는 모든 것의 nltk 사용에 관한 것입니다.
import nltk
%timeit nltk.clean_html(html)
was returning 153 us per loop
렌더링 된 html로 문자열을 반환하는 것은 정말 잘 작동했습니다. 이 nltk 모듈은 html2text보다 빠르지 만 html2text가 더 강력 할 수 있습니다.
betterHTML = html.decode(errors='ignore')
%timeit html2text.html2text(betterHTML)
%3.09 ms per loop
soup.findAll(text=True)
그 기능에 대해 전혀 몰랐던 +1