Selenium 및 Python으로 Amazon 결과 스크랩.

Unsplash에 Luca Bravo의 사진

BeautifulSoup4로 처음 웹 스크래핑을 시작했을 때 점프하기 가장 어려운 후프가 페이지 매김이라는 것을 알았습니다. 정적 페이지에서 요소를 가져 오는 것은 매우 간단 해 보였지만 원하는 데이터가 스크립트에로드 한 초기 페이지에 없으면 어떻게됩니까? 이 프로젝트에서는 Selenium을 사용하여 페이지 매김을 시도하여 Amazon 결과 페이지의 페이지를 순환하고 모든 데이터를 .jsonl 파일에 저장합니다.

셀레늄이란?

Selenium 은 주로 웹 애플리케이션 테스트에 사용되는 오픈 소스 브라우저 자동화 도구입니다. 마우스 이동, 키 누르기 및 페이지 탐색과 같은 사용자 입력을 모방 할 수 있습니다. 페이지에서 요소 선택을 허용하는 많은 방법이 있습니다. 라이브러리의 주요 작업은 브라우저 작업의 자동화를 상당히 간단하게 만드는 Webdriver입니다.

https://www.browserstack.com/guide/selenium-webdriver-tutorial

필요한 패키지를 설치합니다.

이 프로젝트에서는 몇 가지 다른 패키지와 함께 Selenium 을 설치 해야 합니다. 참고 :이 프로젝트에서는 Mac을 사용합니다.

Selenium을 설치하려면 터미널에 다음을 입력하십시오.

pip install selenium

pip install webdriver-manager

pip install selectorlib

다음으로 바탕 화면에 새 폴더를 만들고 일부 파일을 추가하십시오.


$ cd Desktop
$ mkdir amazon_scraper
$ cd amazon_scraper/
$ touch amazon_results_scraper.py 
$ touch search_results_urls.txt
$ touch search_results_output.jsonl

그런 다음 코드 편집기를 열고 amazon_results_scraper.py 파일에서 다음을 가져옵니다.

from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.common.exceptions import NoSuchElementException
from selectorlib import Extractor
import requests
import json
import time

def search_amazon(item):
    #we will put our code here.

def search_amazon(item):
    driver = webdriver.Chrome(ChromeDriverManager().install())

Selenium은 페이지 요소를 선택하는 다양한 방법을 제공합니다. ID, 클래스 이름, XPath, 이름, 태그 이름, 링크 텍스트 및 CSS 선택기로 요소를 선택할 수 있습니다. 상대 위치 지정자 를 사용 하여 다른 요소에 상대적인 페이지 요소를 대상 으로 지정할 수도 있습니다 . 목적을 위해 ID, 클래스 이름 및 XPath를 사용 합니다. Amazon 홈페이지를로드하겠습니다. 드라이버 요소 아래에 다음을 입력하십시오.

driver.get('https://www.amazon.com')
  • 검색하려는 항목의 이름을 검색 창에 입력합니다.
  • 검색 버튼을 클릭하세요.
  • 항목의 결과 페이지로 이동합니다.
  • 결과 페이지를 반복합니다.

검색 창 위로 마우스를 가져간 다음 검색 창을 클릭하여 DOM에서 요소를 찾습니다.

검색 창은 'twotabssearchtextbox'ID와 '입력'요소입니다. find_element_by_id () 메서드를 사용하여 Selenium을 사용하여이 항목과 상호 작용 한 다음 .send_keys ( '검색 상자에 원하는 텍스트')를 다음과 같이 연결하여 텍스트 입력을 보낼 수 있습니다.

search_box = driver.find_element_by_id('twotabsearchtextbox').send_keys(item)

Selenium으로 항목을 클릭하려면 먼저 항목을 선택한 다음 .click ()을 문의 끝에 연결해야합니다.

search_button = driver.find_element_by_id("nav-search-submit-text").click()

import time
time.sleep(5)

driver.implicitly_wait(5)

보시다시피 결과 페이지 수는 "a-pagination"클래스가있는 목록의 6 번째 목록 요소 (<li> 태그)에 표시됩니다. 재미를 위해 try / except 블록에 두 개의 선택 항목을 배치 할 것입니다. 하나는 "a-pagination"태그에 대한 것이고, 어떤 이유로 든 실패하면 그 아래에있는 요소를 "a-last"클래스로 선택합니다. .

Selenium을 사용할 때 일반적인 오류는 NoSuchElementExcemtion으로, Selenium이 페이지에서 요소를 찾을 수 없을 때 발생합니다. 이는 요소가 아직로드되지 않았거나 페이지에서 요소의 위치가 변경된 경우에 발생할 수 있습니다. 이 오류를 포착하고 try-except를 사용하면 첫 번째 옵션이 실패하면 다른 것을 선택할 수 있습니다.

try:
    num_page = driver.find_element_by_xpath('//*[@class="a-pagination"]/li[6]')
except NoSuchElementException:
    num_page = driver.find_element_by_class_name('a-last').click()

driver.implicitly_wait(3)

url_list = []

for i in range(int(num_page.text)):
        page_ = i + 1
        url_list.append(driver.current_url)
        driver.implicitly_wait(4)
        click_next = driver.find_element_by_class_name('a- 
        last').click()                        
        print("Page " + str(page_) + " grabbed")

driver.quit()

with open('search_results_urls.txt', 'w') as filehandle:
        for result_page in url_list:
            filehandle.write('%s\n' % result_page)
print("---DONE---")

Amazon Search Results Page Scraper를 스크립트에 통합합니다.

항목을 검색하고 결과 페이지를 반복하는 함수를 작성 했으므로 이제 해당 데이터를 가져와 저장하려고합니다. 이를 위해 scrapehero-code 의 Amazon 검색 결과 페이지 스크레이퍼를 사용 합니다 .

스크랩 기능은 텍스트 파일의 URL을 사용하여 HTML을 다운로드하고 가격, 이름 및 제품 URL과 같은 관련 정보를 추출합니다. 그런 다음 'search_results.yml'파일에 넣으십시오. search_amazon () 함수 아래에 다음을 배치합니다.

그런 다음 검색하려는 항목의 이름으로 search_amazon () 함수를 호출합니다.

search_amazon('phones')

Voilà! 이 코드를 실행하면 search_results_output.jsonl 파일에 검색에서 스크랩 한 모든 항목에 대한 정보가 저장됩니다.

완성 된 스크립트는 다음과 같습니다.

한계.

이 스크립트는 광범위한 검색에서 잘 작동하지만 5 페이지 미만의 결과를 반환하는 항목이있는보다 구체적인 검색에서는 실패합니다. 앞으로 개선 할 수 있도록 노력하겠습니다.

부인 성명

Amazon은 웹 사이트의 자동 스크래핑을 좋아하지 않으므로 대규모 데이터 수집을 수행 할 때는 항상 .robots 파일을 참조해야합니다 . 이 프로젝트는 교육적이며 학습 목적으로 수행되었습니다. 따라서 차단되면 경고를 받았습니다!

여기 에서이 프로젝트의 Github 저장소를 확인할 수 있습니다 .

해피 코딩 :)

Suggested posts

중요하지만 종종 간과되는 데이터 과학 및 분석 기술

중요하지만 종종 간과되는 데이터 과학 및 분석 기술

이제 데이터 과학 및 분석에 들어가는 데 필요한 기술 기술을 배울 수있는 방법이 그 어느 때보 다 많았습니다. 온라인 과정, Kaggle 대회, YouTube 자습서, 스택 오버플로가있는 금광 등이 있습니다. 현장에 침입하려는 사람들은 종종 "X 데이터 작업을 수행하려면 어떤 프로그래밍 기술이 필요한가요?", "어떤 기계 학습 기술을 배워야합니까?", "기술을 구축하려면 어떤 프로젝트를 수행해야합니까?"와 같은 질문을 자주합니다. / 포트폴리오?”.

Python으로 차트 주석 자동 생성

Python으로 차트 주석 자동 생성

따라서 매일 업데이트되는 최신의 아름다운 대화 형 대시 보드를 만들었으며 이제 경영진은 로그인하여 자신이 원할 때마다 판매 상황을 확인할 수 있습니다. 그러나 항상 그래프를 싫어하고 보고서에 숫자를 제공하기를 원하는 사람들이 있습니다. 그들은 차트를 클릭하지 않을 것입니다.

Related posts

"실용적인 프로그래머"의 5 가지 필수 사항

역대 베스트셀러 코딩 북의 요점

"실용적인 프로그래머"의 5 가지 필수 사항

Pragmatic Programmer는 1999 년에 처음 출판되었으며 이후 역대 최고의 프로그래밍 책으로 선정되었습니다. 저자 Andy Hunt와 David Thomas는 Agile Manifesto의 원저자 중 하나였으며 몇 가지 심각한 자격을 가지고 있습니다.

대규모 GraphQL 쿼리 공격으로부터 보호

공격자가 공개적으로 사용 가능한 GraphQL 인터페이스를 사용하여 사이트를 스크랩하거나 서비스 거부 공격을 실행하는 방법에 대해 알아보십시오. 이들은 4 가지 방법 중 하나로이를 수행 할 수 있습니다. 단일 대형 쿼리를 신중하게 구성하여 실행하고, 관련 데이터를 가져올 수있는 병렬 쿼리를 많이 작성하고, 일괄 요청을 사용하여 많은 쿼리를 연속적으로 실행하고, 마지막으로 많은 요청을 보냅니다.

기술 인터뷰의 사회적 구성 요소

코딩 문제는 스트레스가 많지만 스트레스에 대한 당신의 반응은 당신의 기술적 능력보다 더 크게 말합니다.

기술 인터뷰의 사회적 구성 요소

기술 업계의 직책을 위해 인터뷰 할 때 일반적으로 제안을 고려하기 전에 최소한 3 차례의 인터뷰를 거치게됩니다. 라운드는 일반적으로 다음과 같습니다. 그렇게 생각하면 잘못된 것입니다.

훌륭한 개발자의 3 가지 행동 특성

훌륭한 개발자의 3 가지 행동 특성

훌륭한 개발자를 만드는 비 기술적 인 것들 나는이 기사를 작성하는 것을 한동안 미루고 있습니다. 나는 그것을 작성할 자격이 있다고 생각하지 못했습니다. 오늘은 쓸 때라고 생각했습니다.