In [2]:
import requests
import lxml.html
- UNICODE
- 모든 문자를 포함하는 국제표준
- 21bit 2,097,152 글자
- U+를 앞에 붙임 U+00A0 == 0x00A0
기존 표준과 호환
U+AC00 ~ U+D7AF에 한글 11,172글자 할당
대부분 OS, 프로그래밍 언어 내부에 사용
유니코드 인코딩 방식 중 하나
1~4 byte: 영어는 1 byte, 한글은 3 byte
ASCII와 호환
- m: U+006D -> 0x6D
- 쓩: U+C4E9 -> 0xEC 0x93 0xA9
대부분 웹 사이트에서 사용 (국내는 아님)
In [3]:
res = requests.get("http://naver.com")
res.encoding
Out[3]:
In [4]:
res.text[1000:4000]
Out[4]:
In [5]:
res.encoding = 'cp949'
In [6]:
res.text[1000:4000]
Out[6]:
In [7]:
url = 'http://news.naver.com/main/search/search.nhn?query=%B5%F6%B7%AF%B4%D7&ie=MS949'
In [8]:
res = requests.get(url)
In [9]:
res.encoding
Out[9]:
In [10]:
root = lxml.html.fromstring(res.text)
In [11]:
for link in root.cssselect('a.tit'):
print(link.text_content())
In [12]:
'딥러닝'
Out[12]:
In [13]:
'\uB525\uB7EC\uB2DD'
Out[13]:
In [14]:
'딥러닝'.encode('utf8')
Out[14]:
In [15]:
'딥러닝'.encode('cp949')
Out[15]:
In [16]:
'딥러닝'.encode('euc-kr')
Out[16]:
In [17]:
from urllib.parse import quote_plus
- %형태로 변환해준다.
In [18]:
quote_plus('딥러닝'.encode('euc-kr'))
Out[18]:
In [19]:
quote_plus('딥러닝'.encode('utf-8'))
Out[19]:
In [20]:
query = '딥러닝'
In [21]:
query_percent = quote_plus(query.encode('cp949'))
query_percent
Out[21]:
In [22]:
url = ('http://news.naver.com/main/search/search.nhn?refresh=&so=rel.dsc&stPhoto=&stPaper='
'&stRelease=&ie=MS949&detail=0&rcsection=&sm=all.basic&pd=4&'
'query={query}&startDate={start}&endDate={end}&page={page}')
In [23]:
url.format(query=query_percent, start='2017-04-05', end='2017-04-06', page=1)
Out[23]:
In [27]:
articles = []
for page in range(1, 3):
page_url = url.format(query=query_percent, start='2017-04-05', end='2017-04-06', page=page)
res = requests.get(page_url)
root = lxml.html.fromstring(res.text)
titles = root.cssselect('a.go_naver')
for title in titles:
article_url = title.attrib['href']
art_res = requests.get(article_url)
art_root = lxml.html.fromstring(art_res.text)
body = art_root.cssselect('#articleBodyContents')[0]
articles.append(body.text_content())
In [28]:
len(articles)
Out[28]:
In [29]:
articles[0]
Out[29]:
In [30]:
articles[0].replace('flash 오류를 우회하기 위한 함수 추가\nfunction _flash_removeCallback() {}', '')
Out[30]:
'BIGDATA > TEXT MINING' 카테고리의 다른 글
[Crawling] Retrica App Review Analysis (14) | 2017.09.11 |
---|---|
[Crawling] Beautifulsoup & Requests (Crawling) (0) | 2017.09.11 |
[URL] URL 분해 및 URL Encoding (0) | 2017.09.10 |
[Crawling] Web Crawling(크롤링) (2) | 2017.09.10 |
[TEXT MINING] 텍스트마이닝의 기초 (TDM) (0) | 2017.09.10 |