셀레늄으로 웹 데이터를 스크랩하는 방법

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 속성을 추출한 후 httpssrc에 포함되어 있는지 확인합니다. 온라인 링크는 일반적으로 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을 사용함), 스크랩한 이미지를 로컬 컴퓨터의 폴더에 저장하는 방법을 살펴보았으므로 기쁘게 생각합니다. 끝까지 나와 붙어.

좋은 웹페이지 즐겨찾기