내 머릿속 데이터베이스

[Python] https 파싱 시 주의 사항 본문

Programming/Python

[Python] https 파싱 시 주의 사항

파도소리 2016. 1. 13. 14:47

Python + BeautifulSoup을 이용해서 랭킹 JSON으로 만들기(https://www.acmicpc.net/blog/view/16) 블로그를 따라하다, 예제안의 다음의 코드를 실행헀더니 에러가 발생한다.


import urllib
fp = urllib.urlopen('https://www.acmicpc.net/ranklist')
source = fp.read()
fp.close()
print source



데이터를 가져오는 사이트의 프로톨이 HTTP가 아닌 HTTPS라서 UserAgent 값을 같이 넣어줘야 이 문제는 해결 된다.


# Python 3.4 기준으로 변경해보았다.
from urllib import request
from bs4 import BeautifulSoup
hdr = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
'Accept-Encoding': 'none',
'Accept-Language': 'en-US,en;q=0.8',
'Connection': 'keep-alive'}
#다음과 같이 축약해도 된다.
#user_agent = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7'
#headers={'User-Agent':user_agent,}
url = 'https://www.acmicpc.net/ranklist'
req = request.Request(url, data=None, headers=hdr)
fp = request.urlopen(req)
source = fp.read()
fp.close()
print(source)


Comments