본문 바로가기
IT/Python

python 크롤링 part.3

by 성준하이 2022. 2. 20.
반응형

저번 포스팅 까지는 특정 주소를 url 을 적어서 들어갔다면 이번에는 네이버에서 특정 텍스트를 검색하고 그 결과에 나온 검색 결과에서 원하는 제목의 기사나 블로그, 지식인 등에서 가져오도록 할것이다.

 

기존 파일에 덮어써도 되지만 나는 추가로 python파일을 새로 하나 만들었다.

 

그리고 저번시간에 짰던 코드 부분에서 아래 부분들을 그대로 가져왔다.

from selenium import webdriver
driver = webdriver.Chrome('./chromedriver')
driver.get('https://www.naver.com/')

그다음 url 주소 부분을 naver 주소로 바꾸었다.

 

이렇게 실행을 한다면 네이버 창이 뜨기만 한다.

 

여기서 똑같이 F12를 눌러서 검색하는곳에 마우스를 클릭해서 검색창이름을 확인해보면

<input id="query" name="query" type="text" title="검색어 입력" maxlength="255" class="input_text" tabindex="1" accesskey="s" style="ime-mode:active;" autocomplete="off" placeholder="검색어를 입력해 주세요." onclick="document.getElementById('fbm').value=1;" value="" data-atcmp-element="">

이렇게 쓰여있다.

나는 검색창 이름을 id가 query 인 것이라고 할 것이다.

그리고 그 검색창에 작성될 텍스트를 보낼 것이고,

엔터를 누르는 명령까지 추가를 할 것이다.

 

from selenium.webdriver.common.keys import Keys

elem = driver.find_element_by_id('query')
elem.send_keys('thenicesj')
elem.send_keys(Keys.ENTER)

첫째줄은 4번째 줄에 enter 동작을 하기 위해서 selenium 안에 이미 만들어진 엔터 액션을 사용하기 위한 import 이다.

그리고 2번째 줄은 element 의 약자인 elem으로 변수명을 설정하고 driver에서 id가 query인것을 가져와서 저장을 한다.

3번째 줄에 나온 send_keys 메서드가 input 태그인 elem에 값을 지정하는 것이고(블로그 주소를 적어봤습니다 ..^^)

4번째 줄에 나온 send_keys 도 역시 엔터를 보내라는 뜻이다.

 

여기까지 작성을 하고 파이선을 동작 시키면 네이버에서 thenicesj을 검색하는 창이 뜨게 된다.

 

그럼 여기서 이제 또 F12에서 확인을 해본다.

그럼 저번 포스팅에서처럼 구별할수 있는 제일 작은 태그의 이름을 가져온다.

그리고 li를 확대해서 보면 결국 최소단위인 total_source와 total_tit가 나온다.

 

그럼 마저 코드를 짜볼것이다.

 

그럼 저번 포스팅에서 처럼

  • ultag를 가져오고
  • ultag에서 litags들을 가져오고
  • litags에서 반복문을 돌려서 litag를 얻고
  • litag에서 각각 total_source / total_tit 를 print 할것이다.
ultag = driver.find_element_by_class_name('lst_total')
litags = ultag.find_elements_by_class_name('bx')
for litag in litags:
      totalsource = litag.find_element_by_class_name('total_source')
      totaltit = litag.find_element_by_class_name('total_tit')
      print(totalsource.text)
      print(totaltit.text)

여기에 추가로 title에 '성실하게 준비한 하루 이야기' 가 있으면 그 사이트를 열어보면서 마치도록 하겠다.

 

그렇게 하면 최종 코드는 다음과 같다.

중간중간 로딩 시간을 위해 time이라는 함수도 넣어줬다.

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

driver = webdriver.Chrome('./chromedriver')
time.sleep(1)
driver.get('https://naver.com/')
time.sleep(1)

elem = driver.find_element_by_id('query')
time.sleep(1)
elem.send_keys('thenicesj')
elem.send_keys(Keys.ENTER)

ultag = driver.find_element_by_class_name('lst_total')
litags = ultag.find_elements_by_class_name('bx')

for litag in litags:
      totalsource = litag.find_element_by_class_name('total_source')
      totaltit = litag.find_element_by_class_name('total_tit')
      print(totalsource.text)
      print(totaltit.text)
      if (totaltit.text.find('성실하게 준비한 하루 이야기')!=-1):
            totaltit.click()

driver.close()
driver.quit()
반응형

'IT > Python' 카테고리의 다른 글

python 크롤링 part.6  (31) 2022.02.23
python 크롤링 part.5  (26) 2022.02.22
python 크롤링 part.4  (46) 2022.02.21
python 크롤링 part.2  (29) 2022.02.19
python 크롤링 part.1  (58) 2022.02.18

댓글