[Python] 크롤링 시 주의사항

2015. 2. 25. 11:21Programming/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를 만들어서 보내는 것이 더 안전한 것 같다!!

아니면 나같이 뻘짓할 수 있음..