BeautifulSoup 파싱이 뭔가 이상하다
문제
크롬에서 개발자 도구로 보면 분명히 html 요소가 있는데, BeautifulSoup를 사용해서 가져오면 None 으로 나옵니다.
코드는 아래와 같습니다.
def get_bs(url):
req = requests.get(url)
html = req.text
bs = BeautifulSoup(html, "html.parser")
return bs
원인
여러가지로 시도하다가 Postman
으로 테스트하면서 이유를 알게되었습니다.
html 중 922번째 줄에서, 에러가 발생하였고 이로 인해 파싱이 제대로 되지 않았습니다. 그래서 뒤이어서 나와야 하는 정보들은 아래와 같이 변경되면서 사리지게 되었습니다.
<div style="font-size:11px; text-align:left">
<i class="fa fa-chevron-circle-right" style="color:#B8B8B8"></i>
<span><b> 스키 장터</b></span></div>
해결
파서를 html5lib
로 변경합니다.
파서들의 장점은 다음과 같습니다.
- html.parser : 내장, 추가 설치가 필요없음
- html5lib : 가장 관대함(오류에 대해서), HTML이 깨진경우 사용
- lxml : 가장 빠름
먼저 html5lib
를 설치하고
$ pip install html5lib
파서를 변경합니다.
def get_bs(self, url):
req = requests.get(url)
html = req.text
bs = BeautifulSoup(html, "html5lib")
return bs
이후 정상적으로 파싱이 되는 것을 확인할 수 있습니다.
참고
'Programming > Python' 카테고리의 다른 글
requests - 프록시 서버 이용 (0) | 2020.09.16 |
---|---|
Jupyter Lab CSS 변경 (0) | 2019.07.03 |
FTP file upload (0) | 2018.11.07 |
Jupyter lab 에 익스텐션 설치하기 (0) | 2018.11.06 |
Amazfit Bip Font Creator 5 - 실행 파일 생성 (0) | 2018.05.15 |
댓글