1T_크롤링 수업(중고나라 모바일)


In [1]:
#네이버 중고나라(모바일)
import requests
from bs4 import BeautifulSoup

In [2]:
# "맥북" 키워드로 검색
url = "http://m.cafe.naver.com/ArticleSearchList.nhn?search.query=맥북&search.menuid=&search.searchBy=0&search.sortBy=sim&search.clubid=10050146"

In [3]:
response = requests.get(url)

In [4]:
response.status_code, response


Out[4]:
(200, <Response [200]>)

In [5]:
dom = BeautifulSoup(response.text, "html.parser")

In [6]:
post_elements = dom.select("ul.list_tit li")

In [7]:
len(post_elements)


Out[7]:
20

In [8]:
post_element = post_elements[0]

In [9]:
post_element


Out[9]:
<li>
<a href="/ArticleRead.nhn?clubid=10050146&amp;menuid=334&amp;articleid=331983342&amp;query=맥북" onclick="nclk(this, 'cfs*n.list', '331983342', '')">
<div class="item">
<h3>2011 Mid <b>맥북</b>에어 13인치 기타 여러가지 +</h3>
</div>
</a>
<div class="aside">
<a href="#">
<div class="info">
<span class="name">junewind</span>
<span class="time">16.08.15.</span>
<span class="no">조회 <em>133</em></span>
</div>
</a>
</div>
</li>

In [10]:
# Celery - Task Runner
# http://www.celeryproject.org/
# 파이썬의 일처리를 자동으로 해주는 테스크 언어. 조금 더 모듈화해서

In [11]:
title = post_element.select_one("h3").text
url = post_element.select_one("a").get("href")   #href는 속성
nickname = post_element.select_one("span.name").text
created_at = post_element.select_one("span.time").text
count = post_element.select_one("span.no").text.split(" ")[-1]

print((title, url, nickname, created_at, count))


('2011 Mid 맥북에어 13인치 기타 여러가지 +', '/ArticleRead.nhn?clubid=10050146&menuid=334&articleid=331983342&query=맥북', 'junewind', '16.08.15.', '133')

In [12]:
post_element.contents
#어떤 값들이 들어있는지 보여준다.


Out[12]:
['\n',
 <a href="/ArticleRead.nhn?clubid=10050146&amp;menuid=334&amp;articleid=331983342&amp;query=맥북" onclick="nclk(this, 'cfs*n.list', '331983342', '')">
 <div class="item">
 <h3>2011 Mid <b>맥북</b>에어 13인치 기타 여러가지 +</h3>
 </div>
 </a>,
 '\n',
 <div class="aside">
 <a href="#">
 <div class="info">
 <span class="name">junewind</span>
 <span class="time">16.08.15.</span>
 <span class="no">조회 <em>133</em></span>
 </div>
 </a>
 </div>,
 '\n']

In [13]:
for post_element in post_elements:
    title = post_element.select_one("h3").text
    url = post_element.select_one("a").get("href")
    nickname = post_element.select_one("span.name").text
    created_at = post_element.select_one("span.time").text
    count = post_element.select_one("span.no").text.split(" ")[-1]
    
    print((title, url, nickname, created_at, count))


('2011 Mid 맥북에어 13인치 기타 여러가지 +', '/ArticleRead.nhn?clubid=10050146&menuid=334&articleid=331983342&query=맥북', 'junewind', '16.08.15.', '133')
('애플 맥북에어 (MJVG2KH/A) i5, 256ssd 제품 미개봉 팝니다.', '/ArticleRead.nhn?clubid=10050146&menuid=334&articleid=330448256&query=맥북', 'ksitori', '16.08.04.', '282')
('상태 새것 수준 맥북에어 "13 사양 CTO(i7[1.7ghz], ram8g, ssd128기가), 맥세이프2, 애플무선마우스, 타거스백팩, 애플무선키보드, 그외에 악세서리', '/ArticleRead.nhn?clubid=10050146&menuid=334&articleid=332341835&query=맥북', 'vipmanber', '16.08.18.', '127')
('(판매완료) [분당] 맥북 프로 레티나 15인치 early 2013, 최고급형(i7 2.7GHz/512G/16G/사이클 3) 풀세트(악세사리+가방), 세금계산서 가능', '/ArticleRead.nhn?clubid=10050146&menuid=334&articleid=331650571&query=맥북', 'ㄱㄱㄴㄷ', '16.08.12.', '235')
('[판매] 맥북 에어 13인치 2011 Mid, A1369 모델, i7 CPU, 256GB SSD 팝니다.', '/ArticleRead.nhn?clubid=10050146&menuid=334&articleid=327948310&query=맥북', '우왕굿우왓굿', '16.07.17.', '331')
('2011 얼리 맥북프로 15인치 무반사 안티글래어 판매합니다.램16g', '/ArticleRead.nhn?clubid=10050146&menuid=334&articleid=332645470&query=맥북', 'hyungwon0323', '10:14', '6')
('맥북프로레티나 13인치 2013 late 중급형 (A1502) 박풀+a 판매합니다.', '/ArticleRead.nhn?clubid=10050146&menuid=334&articleid=332477142&query=맥북', '프린세스소피아빠', '16.08.19.', '149')
('풀업그레이드 음악작업용 고사양 맥북프로 i7,16G,750G(LogicProX,Komplete10U 정품)', '/ArticleRead.nhn?clubid=10050146&menuid=334&articleid=332432511&query=맥북', 'ssimba1204', '16.08.18.', '259')
('맥북 프로 레티나 15인치 2014mid 기본형 (부속품 많아요!) 가격내림!!', '/ArticleRead.nhn?clubid=10050146&menuid=443&articleid=332329432&query=맥북', 'yedarm0214', '16.08.18.', '155')
('맥북프로 2015 15인치 고급형 MJLT2KH/A 팝니다.', '/ArticleRead.nhn?clubid=10050146&menuid=334&articleid=327183858&query=맥북', '윤식', '16.07.11.', '802')
('맥북프로 15인치 2011 early 128SSD + 500HDD 배터리교체한 A-급 팝니다.', '/ArticleRead.nhn?clubid=10050146&menuid=334&articleid=332318704&query=맥북', '주사위내기', '16.08.17.', '195')
('애플 뉴 맥북 프로 에어 USB 인터넷 이더넷 케이블 어댑터 판매 팝니다 Apple Ethernet 12 13 15 17 인치', '/ArticleRead.nhn?clubid=10050146&menuid=334&articleid=326737904&query=맥북', '분당친절거래1', '16.07.08.', '98')
('[46만] 2011 맥북에어 11인치(ssd128)+매직마우스2+랩씨 파우치+케이스 3종 일괄 팝니다.', '/ArticleRead.nhn?clubid=10050146&menuid=334&articleid=331947175&query=맥북', 'EARLYBURRY', '16.08.15.', '87')
('맥북프로2009 13인치 22만원', '/ArticleRead.nhn?clubid=10050146&menuid=334&articleid=331858119&query=맥북', 'His pencil', '16.08.14.', '239')
('인케이스 ICON Sleeve with TENSAERLITE 파우치 맥북 프로 레티나 15인치 판매 합니다.', '/ArticleRead.nhn?clubid=10050146&menuid=393&articleid=326292225&query=맥북', 'DODOBOO', '16.07.05.', '207')
('2016 early 뉴맥북 (MacBook) 기본형 판매합니다 (스페이스 그레이 색상)', '/ArticleRead.nhn?clubid=10050146&menuid=334&articleid=326168304&query=맥북', 'lanchert', '16.07.04.', '339')
('맥북 알루미늄 유니바디13인치 (2009) 팝니다.', '/ArticleRead.nhn?clubid=10050146&menuid=334&articleid=325985770&query=맥북', '디언', '16.07.03.', '226')
('2013mid 맥북에어 하스웰 CPU I7, SSD256GB, RAM8G<판매완료>', '/ArticleRead.nhn?clubid=10050146&menuid=334&articleid=331594224&query=맥북', 'Sigur Ros 830', '16.08.12.', '428')
('맥북프로 15인치 2012 MID MD103KH/A (업그레이드가능버전) A급 판매[가격내림]', '/ArticleRead.nhn?clubid=10050146&menuid=334&articleid=331571532&query=맥북', '김기동', '16.08.12.', '152')
('맥북 프로 레티나 2015-early 13인치 128g, 8gb거의 신품, 박풀 + 악세사리 그냥드림', '/ArticleRead.nhn?clubid=10050146&menuid=736&articleid=331420081&query=맥북', 'sharpflow', '16.08.11.', '164')

In [14]:
url


Out[14]:
'/ArticleRead.nhn?clubid=10050146&menuid=736&articleid=331420081&query=맥북'

In [15]:
# "".join(url.split("?")).split("&")   => 따로 빼서 사용할 수 있다.

In [32]:
url = "http://m.cafe.naver.com/ArticleRead.nhn?clubid=10050146&menuid=334&articleid=332341835&query=맥북"

In [33]:
# 상세 페이지 크롤링
response = requests.get(url)
dom = BeautifulSoup(response.text, "html.parser")

In [35]:
# 1. 핸드폰 번호 파싱 ( 정규표현식 이용 )
# 2. 첫 이미지의 url 가져오기

# 일단은 content 의 html 코드를 그대로 뽑아 와야 한다.
content_element = dom.select_one("#postContent")

# str(content_element) => 이걸로 html을 뽑아낼 수 있다.
# content_element.text => 이걸로 tag가 제외된 글자만을 뽑아낼 수 있다. (핸드폰 번호)

In [36]:
content_element.text


Out[36]:
'\n\n\xa0 \xa0 \xa0\xa0중고나라 공식 앱 다운받기\xa0 \xa0 \xa0\xa0편한 택배 / 퀵 신청하기 판 매 양 식아이디이메일싸이,블로그,타카페,타사이트 링크시 삭제 및 강퇴거주지역도,시,동까지 정확히 기재판매 제품명구입시기년,월 기재희망가격정확히 기재: (3만~4만등의\xa0경매 유도글\xa0삭제)거래방법방문택배 신청하기,\xa0직거래, 택배, \xa0안전거래상세설명\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0상태 새것 수준 맥북에어 "13\xa0 사양 CTO(i7[1.7ghz], ram8g, ssd128기가), 맥세이프2, 애플무선마우스, 타거스백팩, 애플무선키보드, 그외에 악세서리\xa0맥북에어 13인치 2014 cto맥북에어 13인치\xa02014년 버전 i7에 램8기가\xa0ssd128기가\xa0판매합니다.먼저 구입은 14년 12월말에 롯데 본점에서 구입했습니다.\xa0미개봉 정발한국\xa0상품으로 구입했습니다. 박스를 사진으로 찍어 두었으니 참고하시면 되요^^용도는\xa0구입하면서 자택 사무용 및 외부업무볼때 커피숍에서 사용하려고 구입했습니다.실제로 밖으로는 많이 나가지 않았고 가능한 자택에서 웹셔핑 이나 간단한 사무업무만 보았던것 같아요.중고로 팔기 전에 외관 체크해보니 모두 깨끗하네요. 사진은 특펼히 올리지 않았습니다.그냥 새것같아보여요^^구입하실때 참고하시면 될듯해요.가장중요한 사용량을 확인할 수 있는 밧데리상태를 볼까합니다.싸이클 수는92입니다. 밧데리 최대 용량은 7114입니다. 처음 구입할 때 밧데리 용량이 7300정도 였으니 밧데리 상태는 99%정도입니다.\xa0밧데리사용 상태는 처음 구입할때 사용량과 차이가 느껴지지 않습니다.리튬이온전지의 특성상 충전기를 꽂아두고 사용하면 더 않좋다는걸 알기에 이렇게 사용했습니다.결론은 처음 구입할때와 밧데리 사용량은 별차이가 없고 충분히 밧데리 상태가 좋습니다.\xa0일괄판매구성품 설명입니다.박스포함 기본 모든 구성품이 그대로 깨끗하게 있습니다.(사진첨부)본체는 포장비닐도\xa0 그대로 있네요^^ 사진첨부했어요,최근에 구입한 타거스노트북 백팩 미개봉 및 미사용입니다.맥북에어 13인치 전용 스크린가드AR 미개봉 입니다.오피스 365\xa0 퍼스널 미사용 같이 드립니다. 현재 판매가 4만원정도 하네요.japal키스킨,썬더볼트hdmi 그 외 악세사리 사진 첨부했습니다.(ac밴드, sd카드마게, 애플무선마우스 파우치)이렇게 모두 드립니다. 이렇게\xa0일괄판매구성품입니다.\xa0추가구성품 별도 판매애플 맥세이프2 (충전기) 최근에 선물 받았습니다. 미사용 제품 입니다.애플무선마우스 새것 수준 몇번 안썻네요^^\xa0가격라벨도붙어있네요\xa0미개봉 상태처럼 두었어요. 사진에는 첨부참고하시길 바랍니다.애플무선키보드 깨끗하고 사용 거의 안했습니다. 사진에 첨부한 비파인 화이트 키스킨도 같이 드립니다.거래는 서울에서 하고싶네요. 이래저래 사기같은 것도 많고 해서 직거래로만 하려고 합니다.위에 안심번호로 연락주시면 가능한 빨리 답장 드릴게요. 가능한 문자로 먼저 부탁해요.거래는 일괄판매구성품만 거래시 89만원에 합니다. (가격조정 어렵습니다.)그외에 추가구성품 추가로 같이 구매하시면 시세대비 할인해서 거래합니다.문의주시면 답장드릴게요.댓글 그때마다 확인 어려우니 전화나 문자로 문의주세요.연락처는 저위에 안심번호로 연락주시면 됩니다. 위 항목을 (거래금지 항목 포함) 허위작성하거나 임의 삭제 또는 채우지 않을 경우 무통보 삭제될수 있습니다.\xa0\xa0\xa0\xa0\n\n'

In [37]:
import re

In [38]:
# pattern = re.compile("[0-9영공일이삼사오육칠팔구O]{3}[-. ]+[0-9영공일이삼사오육칠팔구O]")
pattern = re.compile("".join([
    "[0-9공영일이삼사오육칠팔구O]{3}",   # 앞 숫자 3자리 ( 010 )
    "[-. ]+",                      # 앞 3자리와 중간 4자리를 연결하는 애
    "[0-9공영일이삼사오육칠팔구O]{4}",   # 중간 숫자 4자리
    "[-. ]+",
    "[0-9공영일이삼사오육칠팔구O]{4}",
]))
pattern.findall(content_element.text)


Out[38]:
[]

In [41]:
def preprocess(phonenumber):
    return phonenumber

이미지 가져오기


In [39]:
from IPython.display import Image

In [40]:
content_element = dom.select_one("#postContent")

In [41]:
image_elements = content_element.select("img")

In [42]:
len(image_elements)


Out[42]:
26

In [46]:
image_elements[1].get('src')


Out[46]:
'http://dthumb.phinf.naver.net/?src=%22http%3A%2F%2Fcafeptthumb4.phinf.naver.net%2F20160303_164%2Fnejona_1456986688601RlgdG_PNG%2Fjn1.png%3Ftype%3Dw740%22&type=w1'

In [53]:
image_url = image_elements[3].get('src')   #인덱스 바꾸면서 url 계속 입력하면서 확인
image_url


Out[53]:
'http://dthumb.phinf.naver.net/?src=%22http%3A%2F%2Fcafeptthumb1.phinf.naver.net%2F20160719_52%2Fneed0629_1468891085301F0ko2_JPEG%2FP20160613_224959212_FD79CEB3-4C84-4ECF-A295-EF4AAAF59212.JPG%3Ftype%3Dw740%22&type=w1'

In [58]:
# image_url = "".join(image_url.split("?")[:-1])
print(image_url)
#iPython에서 이렇게 제거하면 할 수 있는 방법은 없다.


http://dthumb.phinf.naver.net/?src=%22http%3A%2F%2Fcafeptthumb1.phinf.naver.net%2F20160719_52%2Fneed0629_1468891085301F0ko2_JPEG%2FP20160613_224959212_FD79CEB3-4C84-4ECF-A295-EF4AAAF59212.JPG%3Ftype%3Dw740%22&type=w1

In [54]:
image_url


Out[54]:
'http://dthumb.phinf.naver.net/?src=%22http%3A%2F%2Fcafeptthumb1.phinf.naver.net%2F20160719_52%2Fneed0629_1468891085301F0ko2_JPEG%2FP20160613_224959212_FD79CEB3-4C84-4ECF-A295-EF4AAAF59212.JPG%3Ftype%3Dw740%22&type=w1'

In [55]:
from IPython.display import IFrame

In [56]:
IFrame(image_url, width=300, height=200)


Out[56]:
  • https://opentutorials.org/course/1375/6843 여기 참조
  • 이걸로도 확인은 가능하나 우리는 https(안전한 곳). 그래서 보안 클릭해서 바꾸고 보면 됨
  • API형태의 ajax를 보지만 많은 종류의 ajax가 있다.
    • ajax는 asynchronous javascript and xml. 비동기적으로 페이지가 변하지 않는 상태에서 우리가 자바스크립트로 리퀘스트를 보낸 다음에 xml이라는 파일 양식을 받아오는 방식
    • 그런데 이제 최근에는 xml이라는 방식보다 웹에서는 json을 많이 쓰면서 사실상 우리는 json을 받아오는 것임. json은 html도 있고 text도 있다.
    • 이런 게 ajax. 웹사이트가 바뀌지 않으면서 우리가 클릭을 했을 때 웹사이트 뒤에서 동작이 일어나고 결과가 바뀌는 일련의 과정을 우리가 ajax라고 부른다.

2T_데이터 크롤링 유형 (4) - 한국형 웹사이트 ( iFrame, javascript )


In [1]:
#이번에는 각자 주피터 노트북으로. 왜냐하면 selenium으로 할 것임
# coding: utf-8
from selenium import webdriver

In [2]:
driver = webdriver.Firefox()

In [3]:
driver.get("http://cafe.naver.com/joonggonara")

In [4]:
# "맥북" 이라는 키워드로 검색 ( * ) => find_ele.., send_keys, click 
# 검색 결과로 나오는 게시글 크롤링

In [5]:
# 1. 검색창 element
# 2. send_keys("맥북")
# 3. 검색 버튼 element
# 4. click()

In [6]:
search_form_element = driver.find_element_by_css_selector("#topLayerQueryInput")
search_form_element.send_keys("맥북")

In [7]:
# 할 수 있는 훨씬 쉬운 방법들이 있습니다. 이따 javascript 통해서 할 예정입니다.

In [8]:
search_button_element = driver.find_element_by_css_selector(".btn-search-green")
search_button_element.click()

In [10]:
post_elements = driver.find_elements_by_css_selector("td.board-list")

In [11]:
len(post_elements)


Out[11]:
0

In [13]:
#실제로는 있는데, 0이라고 나옴. 눈으로는 보이는데
#왜 그러냐면 특이하게 동작함. 이중 구조. 이중 Frame 형태이기 때문
#네이버는 꽤 많은 IFrame을 쓰고 있음

In [14]:
iframe_element = driver.find_element_by_css_selector("#cafe_main")

In [15]:
driver.switch_to_frame(iframe_element)  # 내부적으로는 focus가 옮겨진거.

In [16]:
post_elements = driver.find_elements_by_css_selector("td.board-list")

In [17]:
len(post_elements)
#관공서 사이트가 대부분 이런 형태로 되어 있음


Out[17]:
15

In [18]:
post_element = post_elements[0]

In [19]:
post_element


Out[19]:
<selenium.webdriver.remote.webelement.WebElement (session="9d1d8533-c6eb-43f2-9a8b-191e5e3f6acb", element="{9dbeb56f-ff01-4a86-a278-a20f665d75fe}")>

In [20]:
title = post_element.find_element_by_css_selector("a").text
url = post_element.find_element_by_css_selector("a").get_attribute("href")

print(title)
print(url)


맥북 프로 mc975kh/a 15인치 코어 i7 판매합니다.
http://cafe.naver.com/ArticleRead.nhn?clubid=10050146&page=1&inCafeSearch=true&searchBy=1&query=%B8%C6%BA%CF&includeAll=&exclude=&include=&exact=&searchdate=all&media=0&sortBy=date&articleid=333154226&referrerAllArticles=true

In [21]:
for post_element in post_elements:
    title = post_element.find_element_by_css_selector("a").text
    url = post_element.find_element_by_css_selector("a").get_attribute("href")
    
    print(title)
    print(url)


맥북 프로 mc975kh/a 15인치 코어 i7 판매합니다.
http://cafe.naver.com/ArticleRead.nhn?clubid=10050146&page=1&inCafeSearch=true&searchBy=1&query=%B8%C6%BA%CF&includeAll=&exclude=&include=&exact=&searchdate=all&media=0&sortBy=date&articleid=333154226&referrerAllArticles=true
맥북에어 2014 MD761KH/A 부품파라요
http://cafe.naver.com/ArticleRead.nhn?clubid=10050146&page=1&inCafeSearch=true&searchBy=1&query=%B8%C6%BA%CF&includeAll=&exclude=&include=&exact=&searchdate=all&media=0&sortBy=date&articleid=333154220&referrerAllArticles=true
2015 맥북에어 11인치 (상태S+)
http://cafe.naver.com/ArticleRead.nhn?clubid=10050146&page=1&inCafeSearch=true&searchBy=1&query=%B8%C6%BA%CF&includeAll=&exclude=&include=&exact=&searchdate=all&media=0&sortBy=date&articleid=333154015&referrerAllArticles=true
맥북 에어 2013 CTO 11인치
http://cafe.naver.com/ArticleRead.nhn?clubid=10050146&page=1&inCafeSearch=true&searchBy=1&query=%B8%C6%BA%CF&includeAll=&exclude=&include=&exact=&searchdate=all&media=0&sortBy=date&articleid=333151712&referrerAllArticles=true
맥북에어 15년 13인치 256GB 중급 팝니다
http://cafe.naver.com/ArticleRead.nhn?clubid=10050146&page=1&inCafeSearch=true&searchBy=1&query=%B8%C6%BA%CF&includeAll=&exclude=&include=&exact=&searchdate=all&media=0&sortBy=date&articleid=333151324&referrerAllArticles=true
맥북 프로 레티나 15인치 mid 2014
http://cafe.naver.com/ArticleRead.nhn?clubid=10050146&page=1&inCafeSearch=true&searchBy=1&query=%B8%C6%BA%CF&includeAll=&exclude=&include=&exact=&searchdate=all&media=0&sortBy=date&articleid=333151239&referrerAllArticles=true
맥북에어 13인치 2010년도 팝니다.
http://cafe.naver.com/ArticleRead.nhn?clubid=10050146&page=1&inCafeSearch=true&searchBy=1&query=%B8%C6%BA%CF&includeAll=&exclude=&include=&exact=&searchdate=all&media=0&sortBy=date&articleid=333149886&referrerAllArticles=true
맥북 프로 레티나 13인치 2015년 1월 구입 128GB
http://cafe.naver.com/ArticleRead.nhn?clubid=10050146&page=1&inCafeSearch=true&searchBy=1&query=%B8%C6%BA%CF&includeAll=&exclude=&include=&exact=&searchdate=all&media=0&sortBy=date&articleid=333149766&referrerAllArticles=true
2013/mid/ 13인치 맥북에어 팝니다.
http://cafe.naver.com/ArticleRead.nhn?clubid=10050146&page=1&inCafeSearch=true&searchBy=1&query=%B8%C6%BA%CF&includeAll=&exclude=&include=&exact=&searchdate=all&media=0&sortBy=date&articleid=333149226&referrerAllArticles=true
맥북에어 13인치 mid 2013 팝니다
http://cafe.naver.com/ArticleRead.nhn?clubid=10050146&page=1&inCafeSearch=true&searchBy=1&query=%B8%C6%BA%CF&includeAll=&exclude=&include=&exact=&searchdate=all&media=0&sortBy=date&articleid=333147930&referrerAllArticles=true
맥북에어 13인치 2016년형 메모리8g, ssd 128g 팝니다
http://cafe.naver.com/ArticleRead.nhn?clubid=10050146&page=1&inCafeSearch=true&searchBy=1&query=%B8%C6%BA%CF&includeAll=&exclude=&include=&exact=&searchdate=all&media=0&sortBy=date&articleid=333146465&referrerAllArticles=true
맥북프로 15인치 2015년형 삽니다
http://cafe.naver.com/ArticleRead.nhn?clubid=10050146&page=1&inCafeSearch=true&searchBy=1&query=%B8%C6%BA%CF&includeAll=&exclude=&include=&exact=&searchdate=all&media=0&sortBy=date&articleid=333146139&referrerAllArticles=true
(미개봉) 맥북에어 13인치 MJVE2KH/A 팝니다.
http://cafe.naver.com/ArticleRead.nhn?clubid=10050146&page=1&inCafeSearch=true&searchBy=1&query=%B8%C6%BA%CF&includeAll=&exclude=&include=&exact=&searchdate=all&media=0&sortBy=date&articleid=333145168&referrerAllArticles=true
맥북프로 2015 13인치 중급 팝니다. (MF840KH) 256G 중급입니다
http://cafe.naver.com/ArticleRead.nhn?clubid=10050146&page=1&inCafeSearch=true&searchBy=1&query=%B8%C6%BA%CF&includeAll=&exclude=&include=&exact=&searchdate=all&media=0&sortBy=date&articleid=333144947&referrerAllArticles=true
MSI 게이밍 노트북 판매합니다. 맥북교환도 원함
http://cafe.naver.com/ArticleRead.nhn?clubid=10050146&page=1&inCafeSearch=true&searchBy=1&query=%B8%C6%BA%CF&includeAll=&exclude=&include=&exact=&searchdate=all&media=0&sortBy=date&articleid=333144322&referrerAllArticles=true

In [22]:
# 정적인 ( HTML )
# 동적인 ( API; json, xml )
# 동적인 ( Selenium )
# + 한국형 웹사이트
#   - selenium iFrame
#   - selenium javascript

In [23]:
#http://kcia.or.kr/cid/Document/020.Ingredient_shis/INGREDIENT_SHIS_10L.asp
#화장품 성분명 사이트 실습.

In [41]:
driver = webdriver.Firefox()

In [42]:
driver.get("http://kcia.or.kr/cid/Document/020.Ingredient_shis/INGREDIENT_SHIS_10L.asp")

In [43]:
driver.execute_script('fGoPage(1)')

In [44]:
for page in range(1, 100+1):
    driver.execute_script("fGoPage({page})".format(page=page))


---------------------------------------------------------------------------
WebDriverException                        Traceback (most recent call last)
<ipython-input-44-9b675dc1fbd0> in <module>()
      1 for page in range(1, 100+1):
----> 2     driver.execute_script("fGoPage({page})".format(page=page))

C:\Anaconda3\lib\site-packages\selenium\webdriver\remote\webdriver.py in execute_script(self, script, *args)
    463         return self.execute(Command.EXECUTE_SCRIPT, {
    464             'script': script,
--> 465             'args': converted_args})['value']
    466 
    467     def execute_async_script(self, script, *args):

C:\Anaconda3\lib\site-packages\selenium\webdriver\remote\webdriver.py in execute(self, driver_command, params)
    234         response = self.command_executor.execute(driver_command, params)
    235         if response:
--> 236             self.error_handler.check_response(response)
    237             response['value'] = self._unwrap_value(
    238                 response.get('value', None))

C:\Anaconda3\lib\site-packages\selenium\webdriver\remote\errorhandler.py in check_response(self, response)
    190         elif exception_class == UnexpectedAlertPresentException and 'alert' in value:
    191             raise exception_class(message, screen, stacktrace, value['alert'].get('text'))
--> 192         raise exception_class(message, screen, stacktrace)
    193 
    194     def _value_or_default(self, obj, key, default):

WebDriverException: Message: fGoPage is not defined
Stacktrace:
    at anonymous (http://kcia.or.kr/cid/Document/020.Ingredient_shis/INGREDIENT_SHIS_10L.asp line 69 > Function:1)
    at handleEvaluateEvent (http://kcia.or.kr/cid/Document/020.Ingredient_shis/INGREDIENT_SHIS_10L.asp:69)

In [45]:
driver = webdriver.Firefox()

In [46]:
driver.get("http://fastcampus.co.kr")

In [47]:
driver.execute_script("alert('무료 수강권 이벤트에 당첨되었습니다.')")


Out[47]:
'무료 수강권 이벤트에 당첨되었습니다.'