본문 바로가기

Hello Crawling

크롤링(crawling)_크롤링 기초

20221012

6일 차


 

크롤링은 원하는 자료를 컴퓨터에게 시켜서 가져오는 기술이다.

(뭔가 단어가 갈고리로 긁어오는 듯한 느낌을 준다.)

 

속도는 브라우저 없는 크롤링이 빠르며 오늘은 selenium을 통해 크롤링을 했다.

 


selenium 설치법은 이러하다.

 


bs4로부터 BeautifulSoup를 임포트 하여 사용하고

selenium으로부터 webdriver를 임포트 하여 사용한다.

 

* import는 '수입하다', '가져오다'라는 뜻

 

그리고 import time은 시간을 가져오다.

즉, 우리에게 시간을 벌어준다.

 


selenium을 쓰기 위해 크롬(Chrome)이라는 인터넷 브라우저를 사용할 것이고

크롬(Chrome) 브라우저에서 크롤링하기 위해

크롬(Chrome) 드라이버를 설치해야 한다.

 


본격적으로 크롤링에 앞서 크롬(Chrome) 브라우저를 실행한다.

바로 넘어가지 않고 육안으로 확인하기 위한 조치로

time.sleep(n)을 중간에 넣어주면 n초만큼 머물러 있는다.

할당한 변수 driverget(접속 주소)를 입력하면 브라우저가 해당 주소로 접속한다.

 

 


xpath를 복사해 와서 붙여 넣기 하면 빨간 코드로 나온다.

 

 

 

* xpath 복사 방법

 

1. 본인의 인터넷 브라우저에서 원하는 화면에 위치한다.

2. F12를 눌러 개발자 도구 실행

3. element 지정 커서 켜고 원하는 버튼 마우스 가져가기 후 클릭.

4. 예를 들어 네이버 로그인 버튼은 오른쪽 개발자 도구의 회색 음영 부분

5. 셀렉 된 회색 음영 부분 마우스 오른쪽 버튼 > Copy > Copy Xpath

6. 코드 입력란에 붙여 넣기.

 


텍스트를 치고 싶을 땐 send_keys()

(아이디와 비밀번호가 내가 설정한 keys값이 바로 쳐져서 신기했다.)

 

브라우저를 다 쓰면 꼭 드라이버를 꺼줘야 한다.


원하는 페이지에 도달하기 위한 과정이

주소 입력뿐이라면 별도의 여러 가지 클릭 및 keys를 안 넣고 진행하는 게 효율적이다.

 


교보문고 홈페이지의 베스트셀러에 있는 자료를 크롤링하기 위해

바로 교보문고 베스트 셀러 페이지 주소를 입력하고

page source를 긁어 올 수 있다.

 

파이썬에서 긁어온 페이지 소스.

 

대상이 된 홈페이지의 페이지 소스

위의 두 사진의 차이점이 보이는가.

거의 비슷하지만 파이썬에서 읽을 수 없는 코드도 있다.

 

 


이때 사용하는 것이 위에서 보았던 BeautifulSoup이다.

(크러쉬가 생각난다.)

 

BeautifulSoupSelenium이 자료를 열심히 긁어오면

이를 파이썬에서 활용할 수 있게 만들어 주는 역할을 한다.

 

* 파이썬에서 문자열로 나타난 자료들을 컴퓨터가 html로 인식하게 하는 것을 'Parsing (파싱)'이라 한다.

 


만약 교보문고 베스트셀러 홈페이지에서 책 제목만 가져오고 싶다면

정제하는 기능을 가진 BeautifulSoup을 쓰면 된다. 

 

파싱 된 코드. find_all("태그명", class_ = "클래스명", id = "아이디 명")

형식으로 딱 필요한 부분만 골라서 가져올 수 있다.

 

위의 사진은 1등 도서의 이름을 클릭했을 때 나오는 태그클래스를 보여준다.

* 위 사진에서 태그span 클래스"prod_name"이다.

 


이렇게 정제된 데이터를 리스트로 만들어 준다.

 

정말 복잡한 정보들 중 그나마 추려왔고

이제 여기서 원하는 정보를 깔끔하게 정리하기 위해 앞과 뒤에 있는 태그 열기 닫기 부분을 없애보자!

 

이때 반복문을 쓰면 된다.

 


코덱스(codecs) 라이브러리는

파이썬으로 txt 파일을 제어할 수 있도록 도와주고

콘솔 창에 출력된 내용txt 파일로 옮길 때 사용한다.

 

 

 

우선 변수 f를 텍스트 파일로 만들어야 한다.

위의 사진과 같이

f = codecs.open("C:/Users/jungm/Documents/crawler/test.txt", mode="w") 
# w옵션은 새로쓰기 a는 append 추가하기

f = codecs.open()로 txt 파일을 생성할 수 있는데

괄호 안에는 txt 파일이 저장될(만들어지게 될) 위치, 이 txt 파일의 모드가 들어간다.

 

그리고 잊지 말아야 할

f.close()로 끝을 내줘야 한다.

 

* deviser.close()는 그래도 육안에 브라우저가 보이지만

   코덱싱 과정은 눈에 보이지 않기 때문

 


앞서 만든 텍스트 파일의 내용을 수정할 수도 있다.

(위 사진의 #는 하나만 실행하기 때문에 붙여 놈)

 

만약 txt 파일을 print(f.read()) 하면

 

열거돼있던 "Hello world"가 이렇게 단일 문자열로 바뀐다.