웹에 접근해서 이것 저것 하려면(엔터키를 보내고 이러쿵 저러쿵) 셀레늄에서 웹드라이버를 설치해야 함
그리고 웹에 접근한 이후부터 본격적으로 beautifulsoup 통해서 웹을 분석하는 거임
[셋 중 하나 골라 잡으세요]
# 웹 제어를 위한 크롬드라이버 설정 1
# 크롬드라이버 자동 다운로드
# pip install chromedriver-autoinstaller
from selenium import webdriver
import chromedriver_autoinstaller as ca
driver = webdriver.Chrome(ca.install())
# 웹 제어를 위한 크롬드라이버 설정 2
# 크롬드라이버 수동 다운로드 및 활용
from selenium import webdriver
driver = webdriver.Chrome('c:/py_temp/chromedriver.exe')
# 웹 제어를 위한 크롬드라이버 설정 3
# 파이썬 3.10 이상 버전
from selenium import webdriver
driver = webdriver.Chrome()
[네이버에서 이미지 수집]
# 네이버에서 이미지 수집
#Step 1. 필요한 모듈을 로딩합니다.
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
import urllib.request
import time, os
#Step 2. 사용자에게 필요한 정보를 입력 받습니다.
query_txt = input('1.크롤링할 이미지의 키워드?: ')
cnt = int(input('2.크롤링 할 건수는?: '))
# 수집 중단 확인을 위해 현재시간 활용 폴더 생성
now = "c:/py_temp/" + time.strftime("%Y%m%d_%H%M%S") +'-' + query_txt
os.makedirs(now)
os.chdir(now)
# Step 3. 크롬 드라이버를 사용해서 웹 브라우저를 실행합니다.
driver = webdriver.Chrome()
base_link = "https://search.naver.com/search.naver?where=image&sm=tab_jum&query="
driver.get(base_link + query_txt)
# 웹페이지를 6회 스크롤 다운 합니다 (END 키 전송)
# 셀레늄은 웹제어 하는 애니까 xpath로 요소를 찾고 그걸로 웹제어하려고 하는 것이고
# beautifulsoup에서 태그찾는건 걔네 정보 갖고오려고 하는 거니까 헷갈리지 말기
for i in range(6) :
time.sleep(3)
driver.find_element(By.XPATH,'//body').send_keys(Keys.END)
# 변수에 자리는 필요한데 사용되지 않을 때 언더스코어 사용
# for _ in range(6):
# time.sleep(3)
# driver.find_element(By.XPATH,'//body').send_keys(Keys.END)
# Step 4. 이미지 추출하기
soup = BeautifulSoup(driver.page_source, 'html.parser')
img_src = [ ]
for i in soup.find_all('img', class_ = '_image _listImage') :
img_src.append(i["src"])
for idx, save_img in enumerate(img_src, start = 1) :
urllib.request.urlretrieve(save_img, str(idx) + ".jpg")
if idx == cnt :
break
driver.close()
#이미지 추출하기 설명
src:속성명의 속성값만 갖고 오려고 위와같이 코드를 짬
이거 뭐 하는 애인지 궁금해서 검색해봤다. 속성으로 배워서 시간 지나고 다시보니 셀레늄이랑 뷰리풀숩 역할이 헷갈리더라;
↓
BeautifulSoup(driver.page_source, 'html.parser')는
Selenium을 사용하여 가져온 웹 페이지의 소스 코드를 BeautifulSoup을 사용하여 파싱(분석)하여 사용자가 원하는 작업을 수행하기 위해 웹 페이지의 요소에 접근하는 도구로 활용할 수 있게 됩니다.
아무튼 얘를 써야 웹페이지에서 분석을 할 수 있는 거임.
[과제]
Q) 사용자로부터 검색어와 검색 건수를 입력 받아 네이버 블로그에서 검색한 결과 중 제목만 추출해서 저장하는 코드를 완성하시오(검색 건수만큼 추출해야됨)
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
import urllib.request
import time, os
import math
import sys
# 검색어와 검색 건수 입력받기
# query_txt = input('1.크롤링할 검색어는?: ')
# cnt = int(input('2.크롤링 할 건수는?: '))
query_txt="강릉"
cnt=10
# Step 3. 크롬 드라이버를 사용해서 웹 브라우저를 실행합니다.
driver = webdriver.Chrome()
pageNum = math.ceil(cnt/7)+1
arr=[]
for i in range(1,pageNum):
base_link = "https://section.blog.naver.com/Search/Post.naver?pageNo="+str(i)+"&rangeType=ALL&orderBy=sim&keyword="
driver.get(base_link + query_txt)
time.sleep(2)
soup= BeautifulSoup(driver.page_source,"html.parser")
# 게시물 제목만 추출하기
title = soup.find_all('span', class_='title')
for index, i in enumerate(title,start=1):
arr.append(i.get_text())
print(arr)
with open("제목.txt","w")as f:
for idx,i in enumerate(arr,start=1):
f.write(i)
f.write("\n")
if idx==cnt:
break
driver.close()
'크롤러' 카테고리의 다른 글
[Python 크롤링] 데이터 수집과 웹 구조, HTML5 문법, 실습 코드 (0) | 2023.08.01 |
---|