반응형

파이썬을 이용한 웝 크롤링 (python web crawling with Selenium)

본문에서는 파이썬을 이용한 웹 크롤러 제작에 대한 내용을 다룹니다.

이전 포스터의 연장입니다. 내용 이해를 위하여 이전 포스트 확인 부탁드립니다.


1. 텍스트 데이터 수집하기

텍스트 데이터를 수집하는 방법은 비교적 간단한 편이다. 왜냐하면, 이전에 보았던 send_keys가 해당 개체에 값을 전달하는 것이었다면, text라는 녀석을 이용하여 손쉽게 해당 개체가 갖고있는 텍스트 정보를 갖고올 수 있기 때문입니다.

아래는 위키에서 네이버를 검색하고 검색 결과를 갖고오는 모습을 볼 수 있습니다.


보는바와 같이 겨우 7줄의 코드로 모든 과정이 수행됩니다.




< 코드 >

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

driver = webdriver.Chrome('./chromedriver.exe')
driver.get('https://ko.wikipedia.org/wiki/%EC%9C%84%ED%82%A4%EB%B0%B1%EA%B3%BC:%EB%8C%80%EB%AC%B8')
driver.find_element_by_xpath('//*[@id="mp_search"]/table/tbody/tr/td[1]/div/div/form/input[1]').send_keys('네이버')
driver.find_element_by_xpath('//*[@id="mp_search"]/table/tbody/tr/td[1]/div/div/form/input[1]').send_keys(Keys.ENTER)
print(driver.find_element_by_xpath('//*[@id="mw-content-text"]').text)



2. 이미지 데이터 수집하기

이미지 데이터 수집은 조금 복잡할 수 있습니다.

왜냐하면, 사이트마다 처리하는 방식이 많이 다르기 때문이죠.

저는 일단 가장 국내에서 대중적인 네이버를 대상으로 진행했습니다.


왼쪽이 코드고, 오른쪽은 파이썬이 제어하는 크롬화면입니다.


< 코드 >

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

driver = webdriver.Chrome('./chromedriver.exe')
driver.get('https://naver.com')
driver.find_element_by_xpath('//*[@id="query"]').send_keys('마동석')
driver.find_element_by_xpath('//*[@id="query"]').send_keys(Keys.ENTER)
driver.find_element_by_xpath('//*[@id="lnb"]/div/div[1]/ul/li[2]/a/span').click()

link = []
for i in range(1, 30):
    try:
        img = driver.find_element_by_xpath('//*[@id="_sau_imageTab"]/div[1]/div[2]/div['+ str(i) + ']/a[1]/img')
    except:
        img = driver.find_element_by_xpath('//*[@id="_sau_imageTab"]/div[2]/div[2]/div['+ str(i) + ']/a[1]/img')
    link.append(img.get_attribute('src'))


왼쪽 코드부 하단에 link 라는 리스트에 저장되는 내용은 오른쪽 이미지들의 이미지 링크입니다.


반복문내에서 이미지 주소를 갖고와서 바로바로 저장하는 방법보다는 한번에 이미지들의 링크를 수집한 후 이 링크들의 이미지들을 다운로드 하는 방식이 저는 더 편해서 이렇게 했습니다. (중간에 애러떠도 수정하기 쉬우니까요)


그럼 최종적으로 이미지는 어떻게 저장할까요?


파이썬의 내장 라이브러리인 urllib를 사용합니다.




이렇게하면, 현재 파이썬 파일과 함께있는 img폴더에 이미지들이 하나씩 저장되게됩니다. 어때요? 간단하죠?


import urllib.request

count = 0
for url in link:
    count += 1
    urllib.request.urlretrieve(url, './img/img'+str(count)+'.jpg')




다음이야기~

일단 초급과정은 여기서 마무리하겠습니다. 여기서 조금만 응용하면 거의 대부분의 간단간단한 기능들은 모두 구현이 가능합니다.

다음 중급자 코스에서는 Headless 크롤링과, 서버를 속이는 방법을 작성하겠습니다..




반응형
반응형

파이썬을 이용한 웝 크롤링 (python web crawling with Selenium)

본문에서는 파이썬을 이용한 웹 크롤러 제작에 대한 내용을 다룹니다.

개인 정리의 성향이 강하기 때문에 실무에서 사용하는 방법과는 다를 수 있으며, 자바스크립트등을 다루어야 하는 내용은 포함하지 않습니다.



1. 크롤링 환경 구축

 python3 버전과 selenium 라이브러리, 그리고 크롬드라이버가 필요합니다.

 파이썬은 사용을 위한 환경은 아나콘다 3.x버전을 설치하시는 것을 권장합니다. (포스터에서는 아나콘다 3.x 버전 설치시 따라오는 주피터 노트북 사용)
 Selenium은 jupyter notebook에서 [!pip install selenium] 명령으로 간단하게 설치가 가능합니다.

 크롬드라이버는 사용하는 OS에 알맞게 다운로드 후 파이썬 .py 또는 .ipynb 파일과 함께 두면 됩니다.  다운로드 링크 => 다운로드



2. 프로그래밍 기본


다음과 같이 jupyter notebook에서 selenium을 import하고, 아래의 방식으로 크롬드라이버를 실행 할 수 있습니다.

driver.get( URL )을 이용하여 원하는 페이지로 이동도 가능합니다.




그리고 여기서 오른쪽 클릭을 하면 [검사] 라는 녀석이 있습니다. "크롬 브라우저"에서만 가능합니다.



검사라는 녀석을 클릭하면 옆에 창이하나 생기는데, 이 후 검색어를 입력하는 부분에서 한번더 [우클릭+검사]를 눌러주면 아래 화면과 같이 특정 영역이 지정되는 것을 볼 수 있습니다.




위 사진에서 오른쪽 영역은 해당 페이지의 HTML문서 내용입니다. 그리고 이 HTML문서에서 검색어를 입력하는 영역에 대한 부분이 바로 파란색으로 지정된 영역임을 알 수 있습니다.


아래 그림과 같이 오른쪽 파란색 영역에서 [우클릭 - Copy - Copy XPath]를 누르면 해당 영역에 대한 XPath값을 복사해올 수 있습니다.





이렇게 복사해온 값을 파이썬 코드에서 사용합니다.


앞서 크롬드라이버를 갖고온 driver라는 녀석한테 find_element_by_xpath(' XPath ').send_keys(" 전송할 내용 ") 이라는 형태로 작성하면 아래와 같이 실행했을 때, 구글검색 영역에 send_keys에 입력한 글자가 자동으로 입력되는 것을 볼 수 있습니다.






입력을 했다면, [엔터] 버튼을 눌러서 검색결과를 확인해야겠죠?


아래 코드를 확인해주세요.



위에 xpath의 값은 전과 동일합니다. 다만, send_keys에서 문자를 전달하는 것이 아니라, ENTER키를 누른 액션을 전달한다는게 차이입니다.


즉, 위 코드로 검색창에 커서를 둔 상태로 ENTER키를 누른 효과를 만들 수 있는 것입니다.



일단 여기까지해서 크롤링의 가장 기본적인 부분을 다루어봤습니다.


바로 다음에 이어질 포스터에서는 크롤링을 통하여 실제 데이터라고 할 수 있는 것들을 긇어오는 방법을 알아보겠습니다.

반응형
반응형

MAC에서 VSCode를 사용하여 C언어와 C++을 사용하는 방법

전편에 이어서 작성된 글입니다. 본편에서는 디버거 연동을 다룹니다.


전편에 이어서 이번에는 디버깅을 하는 과정을 다루겠습니다.



[왼쪽에 벌레잡는 그림] -> [실행버튼 클릭시 위와같이 선택사항 표시] -> [C++(GDB/LLDB) 선택]]


클릭하면 launch.json파일이 생성됩니다.


기본 상태는 아래와 같습니다.



전편에서 tasks.json 파일을 수정해보셨기 때문에 대충 감이오실거에요.


설명은 중략하고 아래와같이 launch.json파일을 수정합니다.



{ // IntelliSense를 사용하여 가능한 특성에 대해 알아보세요. // 기존 특성에 대한 설명을 보려면 가리킵니다. // 자세한 내용을 보려면 https://go.microsoft.com/fwlink/?linkid=830387을(를) 방문하세요. "version": "0.2.0", "configurations": [ { "name": "(lldb) Launch", "type": "cppdbg", "request": "launch", "program": "${fileDirname}/${fileBasenameNoExtension}.out", "args": [], "stopAtEntry": false, "cwd": "${workspaceFolder}", "environment": [], "externalConsole": false, "MIMode": "lldb", "osx": { "MIDebuggerPath": "/Applications/Xcode.app/Contents/Developer/usr/bin/lldb-mi" } } ] }


대략적으로 보면, 전편에서 build한 파일 [파일명.out]이라는 녀석을 디버깅 할 것이라는 거고, 디버깅에 사용할 디버거는 lldb입니다.


다만, 별도로 설치하지 않고, xcode를 설치하면서 따라온 녀석을 사용합니다.


마지막줄에 MIDebuggerPath 부분이 디버거의 위치를 지정하는 부분인데, 저같은 경우에는 저 경로에 디버거가 존재했습니다.


다들 비슷하겠지만, 혹시 저대로 설정하고 실행했을 때, 디버거를 발견하지 못했다는 애러가 발생하면, 확인해보시기바랍니다.



2018/12/29 - [IDE/VScode] - [MAC] VSCode로 C/C++ 사용하기 (1/3)

2018/12/29 - [IDE/VScode] - [MAC] VSCode로 C/C++ 사용하기 (2/3)



반응형

'IDE > VScode' 카테고리의 다른 글

task.json 파일  (0) 2019.07.01
[MAC] VSCode로 C/C++ 사용하기 (2/3)  (8) 2018.12.29
[MAC] VSCode로 C/C++ 사용하기 (1/3)  (0) 2018.12.29
반응형

MAC에서 VSCode를 사용하여 C언어와 C++을 사용하는 방법

전편에 이어서 작성된 글입니다. 본편에서는 프로그래밍과 build까지를 다룹니다.


1. 파일생성 및 프로그래밍

화살표순서로 따라가주세요.



[왼쪽위 탐색기 클릭] -> [폴더 열기] -> [새로움 폴더] -> [생성된 폴더로 이동해서 열기클릭]


그럼 위와같이 새로운 작업영역이 생성됩니다.


그럼 먼저 hello.c hi.cpp 이라는 두개의 파일을 생성해보겠습니다. 그리고 두개의 파일을 담고있는 tutorial이라는 폴더를 생성하겠습니다.




위 사진에서 왼쪽 상단에보면 + 표시가 붙은 두 녀석을 볼 수 있습니다. 둘 중 왼쪽은 파일을, 오른쪽은 폴더를 생성하는 아이콘입니다.


오른쪽 폴더생성을 눌러서 tutorial을 생성하고 이 후 왼쪽 파일생성을 클릭해서 hello.c와 hi.cpp을 만들어주시면됩니다.


완료되면 위와같이 c파일은 C라는 표시가 cpp파일은 C++표시가 자동으로 생성됩니다.


< C언어 >


< C++ 언어 >



위와같이 C와 C++로 작성된 두개의 프로그램을 작성했습니다.


그럼 이제 실행할수있는 파일로 만들어야합니다.


우리 맥 유저는 리눅스의 친구 gcc와 g++을 이용하도록 하겠습니다.


명령어 : Command + Shift + b


클릭하시면 '실행할 빌드 작업을 찾을 수 없습니다~ '라고 나옵니다. 그녀석을 클릭해주시고, '템플릿에서 tasks.json파일 만들기' 클릭, 'Others' 클릭



여기까지 잘 따라왔다고 생각합니다~


이놈을 클릭하게되면 왼쪽에 tasks.json파일이 생성됩니다. 클릭해서 들어가보시면 아래와 같이 되어있습니다.



맞이시죠?


우리는 요놈을 아래와 같이 수정합니다.


{ // See https://go.microsoft.com/fwlink/?LinkId=733558 // for the documentation about the tasks.json format "version": "2.0.0", "tasks": [ { "label": "build_gcc", "type": "shell", "command": "gcc", "args": [ "-g", "-o", "${fileDirname}/${fileBasenameNoExtension}.out", "${file}" ], "group": { "kind": "build", "isDefault": true } }, { "label": "build_g++", "type": "shell", "command": "g++", "args": [ "-g", "-o", "${fileDirname}/${fileBasenameNoExtension}.out", "${file}" ], "group": { "kind": "build", "isDefault": true } } ] }

위에서부터 tasks.json파일을 천천히 한번 보겠습니다.

 4번 줄) "tasks" :  -> 뒤에 오는내용이 수행할 작업에 대한 내용입니다.

 6번 줄) "label" :  -> 중괄호로 묶여있는 부분의 이름입니다. 이 후 Command + Shift + b 를 눌렀을 때 표시되는 내용이기도 합니다.

 7번 줄) "type" :  -> 작업이 수행되는 공간입니다.

 8번 줄) "command" :  -> 작업공간에서 수행할 명령입니다.

 9번 줄) "args" :  -> 위에 command에 적어준 명령의 파라미터를 넣어줍니다.

 10번 줄) "-g"  -> 디버깅을 위한 옵션입니다.

 11번 줄) "-o"  -> 출력파일의 이름을 정의해줄때 사용합니다.

 12번 줄) "${fileDirname}/${fileBasenameNoExtension}.out"  -> 파일의 현재 디렉토리에 파일명.out 파일을 생성합니다.

 13번 줄) "${file}"  -> 현재 파일을 의미합니다. 해당 파일이 여기서는 gcc의 입력이 됩니다.


14번째 줄 부터는 현재와는 상관없는 부분이며, 아래의 C++을 위한 g++설정은 gcc와 동일합니다.


이렇게 tasks.json파일을 완성하고 저장하신 후 다시 hello.c파일로 돌아와 Command + Shift + b 명령을 클릭해보세요.




짠~! 방금 설정한 두 task가 보이게됩니다.


작업에 따라 C언어로 작성된 녀석은 gcc로, C++로 작성된 녀석은 g++로 build해주시면 됩니다~!


build 작업이 끝나면 좌측에 다음과 같이 두개의 파일이 새로 생긴것을 확인 할 수 있습니다.




그럼 마지막으로 실행은 어떻게할까?


간단합니다. tasks.json파일을 다시 조금 손봐주시면 됩니다.


아래와 같이 말이죠.



{ { // See https://go.microsoft.com/fwlink/?LinkId=733558 // for the documentation about the tasks.json format "version": "2.0.0", "tasks": [ { "label": "build_gcc", "type": "shell", "command": "gcc", "args": [ "-g", "-o", "${fileDirname}/${fileBasenameNoExtension}.out", "${file}" ], "group": { "kind": "build", "isDefault": true } }, { "label": "build_g++", "type": "shell", "command": "g++", "args": [ "-g", "-o", "${fileDirname}/${fileBasenameNoExtension}.out", "${file}" ], "group": { "kind": "build", "isDefault": true } }, { "label": "exec", "type": "shell", "command": "${fileDirname}/${fileBasenameNoExtension}.out", "group": { "kind": "build", "isDefault": true } } ] }


큰 차이는 없습니다.


마지막에 exec라는 녀석을 추가했을 뿐이니까요.


이렇게 해준 후 다시 Command + Shift + b를 클릭해주시면 exec라는 녀석이 등장합니다. 그리고 실행~!




그럼 하단 터미널에 C언어로 작성된 프로그램이 실행된 결과를 알 수 있게됩니다~!!!!


후~ 그럼 다음 포스팅에서는 디버깅 설정에대해 말씀드리겠습니다.


2018/12/29 - [IDE/VScode] - [MAC] VSCode로 C/C++ 사용하기 (1/3)


반응형

'IDE > VScode' 카테고리의 다른 글

task.json 파일  (0) 2019.07.01
[MAC] VSCode로 C/C++ 사용하기 (3/3)  (2) 2019.01.02
[MAC] VSCode로 C/C++ 사용하기 (1/3)  (0) 2018.12.29
반응형

MAC에서 VSCode를 사용하여 C언어와 C++을 사용하는 방법

 > VSCode설치부터 C와 C++로 작성된 프로그램을 빌드, 실행, 디버깅하는 과정을 담고있습니다.

 > 내용 정리를 위한 포스팅이기 때문에 내용에서 생략된 부분이 많을 수 있으며, 잘못된 부분이 존재할 수 있습니다.





 1. VSCode 설치하기

VSCode는 MS에서 공개한 가볍고 간단하며 많은 언어를 이용한 개발환경을 구축할 수 있는 프로그램입니다.

설치는 간단합니다.  클릭! 링크에 들어가셔서 그냥 다운로드하고 설치하시면 끝



2. VSCode에서 C와 C++ 작성하기

설치하기 실행하면 짠~ 하고 바로 튀어나옴, 다른 IDE와 다르게 초기 실행하는데 오랜 시간이 걸리지 않아서 행복

약간 불편한게 있다면, 영어라는거? 하지만 한국어로 변경하는건 간단합니다.


처음이라면 조금 당황할 수 있지만, VSCode의 경우, 거의 모든 셋팅들이 Json파일을 수정해 주는 것으로 이루어진다는 사실~!!!


익숙하지 않다면 그냥 따라오세요~!



명령어 : command + shift + p


를 누르면 상단에 명령 팔레트라는 녀석이 표시됩니다. 거기에 아래와 같이 입력하고 클릭해주세요



명령 팔레트에 language라고 검색했을 때 나오는 추천결과 중 ,Configure Display Language 클릭~!




그럼 locale.json 파일이 실행되는데, 여기서 locale을 en -> ko 로 변경해주시고, Command + S 로 저장 후 재실행해주세요~!


짠~ 한글로 변경 끝


다음으로 C와 C++을 작업을 위한 확장 프로그램을 설치합니다.


좌측에 위와같이 생긴 녀석을 클릭하시면 마켓으로 이동합니다.


거기에서 C 라고 검색하면 나오는 아래 요 녀석을 설치하고 재실행을 클릭~!




여기까지 했으면 기본 준비는 끝~ 바로 이어서 프로그래밍 과정에 대한 설명을 시작하겠습니다. 다음 포스터를 확인해주세용~!

반응형

'IDE > VScode' 카테고리의 다른 글

task.json 파일  (0) 2019.07.01
[MAC] VSCode로 C/C++ 사용하기 (3/3)  (2) 2019.01.02
[MAC] VSCode로 C/C++ 사용하기 (2/3)  (8) 2018.12.29

+ Recent posts