2015. 2. 25. 11:21ㆍProgramming/python
아래와 같이 코드를 작성하여 해당 주소에 대한 crawling을 시도하였는데 계속 response timeout이 발생하였다.
import urllib2
try:
response = urllib2.urlopen(url)
except urllib2.HTTPError, e:
print e.reason.args[1]
except urllib2.URLError, e:
print e.reason.args[1]
'어 안될리가 없는데??'
하도 이상해서 브라우저 창에 직접 쳐봤더니 데이터를 제대로 가져온다.
'아.. header 검사하나보다.'
신속하게 아래와 같이 user-agent header 추가.
import urllib2
try:
req = urllib2.Request(url)
req.add_header('User-agent', 'Mozila/5.0 (compatible; MSIE 5.5; Windows NT)')
response = urllib2.urlopen(req)
except urllib2.HTTPError, e:
print e.reason.args[1]
except urllib2.URLError, e:
print e.reason.args[1]
변경한 후 다시 crawling을 시도했지만 아무래도 해당 서버에서 ip block을 걸어논 것 같다.
'헐.. 이런 경우는 처음이네...'
다음 날 다시 시도하니 정상적으로 동작하는 걸 확인함..
'ip block은 하루 간격으로 지우나 보네..'
어쨌든 crawling 시 그냥 url만 보내기 보다는 가상으로라도 header를 만들어서 보내는 것이 더 안전한 것 같다!!
아니면 나같이 뻘짓할 수 있음..