[PYTHON] 아름다운 스프 4 find_all은 아름다운 스프 3이 발견 한 링크를 찾지 못합니다.
PYTHON아름다운 스프 4 find_all은 아름다운 스프 3이 발견 한 링크를 찾지 못합니다.
정말 귀찮은 버그를 발견했습니다. BeautifulSoup4 (패키지 : bs4)는 이전 버전 (패키지 : BeautifulSoup)보다 태그를 적게 찾습니다.
다음은 그 문제의 재생산 가능한 사례입니다.
import requests
import bs4
import BeautifulSoup
r = requests.get('http://wordpress.org/download/release-archive/')
s4 = bs4.BeautifulSoup(r.text)
s3 = BeautifulSoup.BeautifulSoup(r.text)
print 'With BeautifulSoup 4 : {}'.format(len(s4.findAll('a')))
print 'With BeautifulSoup 3 : {}'.format(len(s3.findAll('a')))
산출:
With BeautifulSoup 4 : 557
With BeautifulSoup 3 : 1701
당신이 볼 수 있듯이 그 차이는 사소한 것이 아닙니다.
누군가가 궁금해하는 경우 모듈의 정확한 버전은 다음과 같습니다.
In [20]: bs4.__version__
Out[20]: '4.2.1'
In [21]: BeautifulSoup.__version__
Out[21]: '3.2.1'
해결법
-
==============================
1.BeautifulSoup 4가 표준 라이브러리 html.parser 옵션을 통해 해당 구문 분석기를 사용한다는 의미의 lxml이 설치되었습니다.
BeautifulSoup 4가 표준 라이브러리 html.parser 옵션을 통해 해당 구문 분석기를 사용한다는 의미의 lxml이 설치되었습니다.
lxml을 3.2.1로 업그레이드 할 수 있습니다 (테스트 페이지에 대해 1701 개의 결과를 반환합니다). lxml 자체는 libxml2와 libxslt를 사용합니다. 대신 /를 업그레이드해야 할 수도 있습니다. lxml 요구 사항 페이지를 참조하십시오. 현재 libxml2 2.7.8 이상이 권장됩니다.
또는 수프를 파싱 할 때 명시 적으로 다른 파서를 지정하십시오.
s4 = bs4.BeautifulSoup(r.text, 'html.parser')
from https://stackoverflow.com/questions/17698836/beautiful-soup-4-find-all-dont-find-links-that-beautiful-soup-3-finds by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 플라스크가 시작될 때마다 비밀 키를 생성하지 않으시겠습니까? (0) | 2018.10.15 |
---|---|
[PYTHON] DataFrame을 처리 할 때 NLTK 기능이 느려지는 이유는 무엇입니까? (0) | 2018.10.15 |
[PYTHON] WHERE ___ IN ___ 문 사용 (0) | 2018.10.15 |
[PYTHON] Tkinter에 이미지를 표시 할 수 없음 [duplicate] (0) | 2018.10.15 |
[PYTHON] 왜 파이썬에서 중첩 목록의 한 요소 만 변경할 수 없습니까? [duplicate] (0) | 2018.10.15 |