Python Crawling Start

Basic Source:


# -*- coding: utf8 -*-
import locale, os
import sys
reload(sys)
sys.setdefaultencoding(‘utf-8’)

import requests
from bs4 import BeautifulSoup

def spider(max_pages):
showMsg()
hoo = unicode(‘한글’, ‘utf-8’)
print str(hoo.encode(‘utf-8’))
# 유니코드로 다루기 예제1
hoo = unicode(‘한글’, ‘utf-8’)
print str(hoo.encode(‘utf-8’))

# 유니코드로 다루기 예제2
bar = ‘한글’.decode(‘utf-8’)
print bar.encode(‘utf-8′)

# 유니코드로 다루기 예제3
foo = u’한글’
print str(foo.encode(‘utf-8’))
page = 1
while page < max_pages:
url = ‘http://www.clien.net/cs2/bbs/board.php?bo_table=jirum&page=&#8217; + str(page)
source_code = requests.get(url)
plain_text = source_code.content
soup = BeautifulSoup(plain_text, ‘html.parser’, from_encoding=”utf-8″)
for link in soup.find_all(“td”, class_=”post_subject”):
href = “http://www.clien.net/cs2&#8221; + link.a.get(‘href’)[2:]
title = link.a.string
print(href)
print(title)
page += 1

spider(2)


 

요즘엔 requests라는 라이브러리를 많이 사용하고 실제로 써보니 확실히 많이 편하구요.

처음 requests를 사용한건 IP 조회 코드가 필요해서 쓰게 됬는데, 그 이후로 웹 관련 코드 작성할 때는 requests만 쓰고 있습니다.

다만 이 라이브러리에서의 문제는 간혹 한글이 깨져서 출력되는 경우가 있다는 것…

웹 페이지 인코딩 설정에 따라 다른 것 같은데 req.text로 결과값을 가져올 경우 한글이 깨지는 경우가 발생합니다.
http://pwnbit.kr/plugin/CallBack_bootstrapperSrc?nil_profile=tistory&nil_type=copied_post

문제 해결은 간단하게 해결했는데.. req.content로 결과값을 출력시켜주면 됩니다.

원인은 req.text는 값을 ‘unicode’형으로 가져옵니다.

반면, req.content는 ‘str’형으로 값을 가져오구요.

unicode로 값을 가져올 경우 코딩하다보면 아주 짜증나는 문자 체계덕에 좀 꼬이는 경우가 발생하는 것 같습니다.

unicode 처리할 때 종종 쓰는 codecs 라이브러리나 다른 .encode(), unicode() 등을 쓰지 않고도 requests 라이브러리 자체적으로 해결되니 진짜 잘 만들어진 라이브러리란 생각도 드네요.

 

 

Ref.:

http://pwnbit.kr/85

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s