셀레늄으로 웹 데이터를 스크랩하는 방법
14095 단어 webdev
전자 상거래 포털, 채용 포털, 소셜 미디어 채널 등과 같은 웹 사이트에서 수집한 정보를 사용하여 고객의 구매 습관, 직원의 이탈 패턴, 고객의 감정 및 감정을 파악할 수 있습니다. 등등.
웹 스크래핑을 위해 Python에서 가장 널리 사용되는 라이브러리 또는 프레임워크는 BeautifulSoup, Scrappy 및 Selenium입니다.
이 기사에서는 Selenium을 사용한 Python 웹 스크래핑에 대해 설명합니다.
셀렌
오픈 소스 웹 기반 자동화 도구는 Selenium입니다. 웹 스크래핑은 업계에서 Selenium의 주요 용도는 아니지만. 이 기사에서는 Google 크롬을 사용하지만 다른 브라우저를 사용해도 됩니다. 거의 동일하게 작동합니다.
설치 및 설정
셀레늄 패키지와 크롬 웹 드라이버를 설치합니다.
pip install selenium #using pip
conda install -c conda-forge selenium #using conda
다음 기술 중 하나를 사용하여 웹 드라이버를 다운로드할 수 있습니다.
아래 URL에서 Chrome 드라이버를 직접 다운로드할 수 있습니다.
https://chromedriver.chromium.org/downloads
또는 아래 코드 드라이버를 사용하여 직접 액세스할 수 있습니다.
webdriver.Chrome(ChromeDriverManager().install())
필요한 라이브러리 가져오기
import io
import os
import time
import requests
from PIL import Image
import selenium
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.common.exceptions import ElementClickInterceptedException
드라이버 설치
driver = webdriver.Chrome(ChromeDriverManager().install())
스크랩하려는 URL 추가
search_url=“https://www.google.com/search?q=cars&sxsrf=ALiCzsa1GYMTLQhI1kpNy0PDELTCyXHp2g:1665325072454&source=lnms&tbm=isch&sa=X&ved=2ahUKEwjo-4Orq9P6AhWjsaQKHWrPBRMQ_AUoAXoECAIQAw&biw=1440&bih=789&dpr=2"
driver.get(search_url.format(q='Car'))
그런 다음 변수
search_url
를 사용하여 URL을 변수에 붙여 넣습니다. 드라이버를 사용하여 셀과 get("search word") 함수를 실행합니다. 이렇게 하면 해당 URL에 대한 새 브라우저 탭이 열립니다.페이지 끝으로 이동
이 코드 줄을 사용하여 페이지 하단으로 이동할 수 있습니다. 그런 다음 아직 로드되지 않은 페이지에서 콘텐츠를 읽으려고 시도하는 문제가 발생하지 않도록 5초의 휴면 기간을 제공합니다.
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(5) #sleep between interactions
페이지에서 스크랩해야 하는 사진 찾기
이제 해당 특정 페이지에 있는 모든 사진 링크를 얻을 수 있습니다. 따라서 이를 달성하려면 브라우저 창을 열고 페이지의 아무 곳이나 마우스 오른쪽 버튼으로 클릭한 다음 요소 검사를 선택하거나
Ctrl+Shift+I
를 사용하여 개발자 도구를 활성화합니다. 모든 사진 중에서 일반적인 id
, class
등을 검색합니다. 이 경우 class
가 사용됩니다.imgFind = driver.find_elements_by_xpath("//img[contains(@class,'Q4LuWd')]")
imgageResults=len(imgFind)
각 이미지의 해당 링크 추출
우리가 알 수 있는 한, 페이지에 표시되는 사진은 여전히 큰 이미지의 축소판일 뿐입니다. 따라서 각 이미지를 다운로드하려면 각 섬네일을 클릭하고 해당 특정 이미지에 대한 관련 데이터를 수집해야 합니다.
img_urls = set()
for i in range(0,len(imgageResults)):
img=imgageResults[i]
try:
img.click()
time.sleep(2)
actual_images = driver.find_elements_by_css_selector('img.n3VNCb')
for actual_image in actual_images:
if actual_image.get_attribute('src') and 'https' in actual_image.get_attribute('src'):
img_urls.add(actual_image.get_attribute('src'))
except ElementClickInterceptedException or ElementNotInteractableException as err:
print(err)
기본적으로 위에서 수행한 작업은 각 섬네일을 한 번에 하나씩 검토한 다음 클릭하고 브라우저에 2초간 절전 모드를 제공하는 것입니다. 웹사이트에서 이미지를 찾으려면 특정 HTML 요소를 검색해야 했습니다. 그래도 주어진 그림에 대해 많은 결과를 받습니다. 하지만 그 사진의 다운로드 URL이 우리에게 중요한 전부입니다. 따라서 해당 그림에 대한 각 결과에서
src
속성을 추출한 후 https
가 src
에 포함되어 있는지 확인합니다. 온라인 링크는 일반적으로 https
로 시작합니다.각 이미지 다운로드 및 저장
os.chdir('C:/User/Desktop/')
baseDir=os.getcwd()
for i, url in enumerate(img_urls):
file_name = f"{i:150}.jpg"
try:
image_content = requests.get(url).content
except Exception as e:
print(f"ERROR - COULD NOT DOWNLOAD {url} - {e}")
try:
image_file = io.BytesIO(image_content)
image = Image.open(image_file).convert('RGB')
file_path = os.path.join(baseDir, file_name)
with open(file_path, 'wb') as f:
image.save(f, "JPEG", quality=85)
print(f"SAVED - {url} - AT: {file_path}")
except Exception as e:
print(f"ERROR - COULD NOT SAVE {url} - {e}")
이를 통해 우리는 마침내 사용하려는 프로젝트에 대해 Google에서 데스크톱으로 이미지를 추출할 수 있었습니다.
결론
이 기사에서는 셀레늄이 무엇인지, 웹 사이트에서 사진을 스크랩하는 데 셀레늄을 사용하는 방법(예: Google을 사용함), 스크랩한 이미지를 로컬 컴퓨터의 폴더에 저장하는 방법을 살펴보았으므로 기쁘게 생각합니다. 끝까지 나와 붙어.
Reference
이 문제에 관하여(셀레늄으로 웹 데이터를 스크랩하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/shittu_olumide_/how-to-scrape-web-data-with-selenium-58kn텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)