Scraper API를 사용하여 Python에서 Amazon Scraper 생성



ScrapingTheFamous의 이 게시물에서는 Amazon에서 데이터를 스크랩할 스크레이퍼를 작성하려고 합니다. Amazon이 무엇인지 말할 필요가 없습니다. 당신은 이미 그것에 대해 알고 있기 때문에 여기에 있습니다 🙂

그래서 우리는 두 개의 서로 다른 스크립트를 작성할 것입니다. 하나는 개별 목록의 URL을 가져오고 텍스트 파일에 저장하는 fetch.py입니다. 나중에 또 다른 스크립트인 parse.py는 개별 목록 URL을 가져오고, 데이터를 스크랩하고, JSON 형식으로 저장하는 기능을 갖게 됩니다.

Scraper API 서비스를 구문 분석 목적으로 사용하여 모든 것을 처리하므로 동적 사이트를 차단하고 렌더링하는 모든 걱정에서 벗어날 것입니다.

첫 번째 스크립트는 카테고리 목록을 가져오는 것입니다. 그러니 해보자!

import requests
from bs4 import BeautifulSoup

if __name__ == ' __main__':
    headers = {
        'authority': '[www.amazon.com'](http://www.amazon.com'),
        'pragma': 'no-cache',
        'cache-control': 'no-cache',
        'rtt': '600',
        'downlink': '1.5',
        'ect': '3g',
        'upgrade-insecure-requests': '1',
        'dnt': '1',
        'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36',
        'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
        'sec-fetch-site': 'same-origin',
        'sec-fetch-mode': 'navigate',
        'sec-fetch-user': '?1',
        'sec-fetch-dest': 'document',
        'referer': '[https://google.com'](https://google.com'),
        'accept-language': 'en-US,en;q=0.9,ur;q=0.8,zh-CN;q=0.7,zh;q=0.6',
    }

API_KEY = None
    links_file = 'links.txt'
    links = []

with open('API_KEY.txt', encoding='utf8') as f:
        API_KEY = f.read()

URL_TO_SCRAPE = '[https://www.amazon.com/s?i=electronics&rh=n%3A172541%2Cp\_n\_feature\_four\_browse-bin%3A12097501011&lo=image'](https://www.amazon.com/s?i=electronics&rh=n%3A172541%2Cp_n_feature_four_browse-bin%3A12097501011&lo=image')

payload = {'api_key': API_KEY, 'url': URL_TO_SCRAPE, 'render': 'false'}

r = requests.get('[http://api.scraperapi.com'](http://api.scraperapi.com'), params=payload, timeout=60)

if r.status_code == 200:
        text = r.text.strip()
        soup = BeautifulSoup(text, 'lxml')
        links_section = soup.select('h2 > .a-link-normal')
        for link in links_section:
            url = '[https://amazon.com'](https://amazon.com') + link['href']
            links.append(url)

if len(links) > 0:
        with open(links_file, 'a+', encoding='utf8') as f:
            f.write('\n'.join(links))

print('Links stored successfully.')


여기 스크립트가 있습니다. 저는 전자제품 카테고리를 골랐습니다. 원하는 사람을 선택할 수 있습니다. 관련 헤더를 정리했습니다. Chrome Inspector를 통해 수동으로 선택하거나 https://curl.trillworks.com/을 사용하여 cURL 요청을 복사하여 이를 수행할 수 있습니다.

페이로드와 api_key를 모두 설정하여 ScraperAPI API 엔드포인트를 사용하고 있습니다. 필요하지 않은 .a-link-normal 링크가 많기 때문에 h2 > .a-link-normal 선택기를 사용하고 있으므로 필요한 링크를 선택하기 위해 h2 >를 사용하고 있습니다.

링크가 있으면 텍스트 파일에 저장합니다.

이제 게시물의 다음 부분은 정보 구문 분석에 관한 것입니다.

import requests
from bs4 import BeautifulSoup

def parse(url):
    record = {}
    headers = {
        'authority': '[www.amazon.com'](http://www.amazon.com'),
        'pragma': 'no-cache',
        'cache-control': 'no-cache',
        'rtt': '1000',
        'downlink': '1.5',
        'ect': '3g',
        'dnt': '1',
        'upgrade-insecure-requests': '1',
        'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36',
        'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
        'sec-fetch-site': 'none',
        'sec-fetch-mode': 'navigate',
        'sec-fetch-user': '?1',
        'sec-fetch-dest': 'document',
        'accept-language': 'en-US,en;q=0.9,ur;q=0.8,zh-CN;q=0.7,zh;q=0.6',
    }

payload = {'api_key': API_KEY, 'url': url, 'render': 'false'}

r = requests.get('[http://api.scraperapi.com'](http://api.scraperapi.com'), params=payload, timeout=60)

if r.status_code == 200:
        data = r.text.strip()
        soup = BeautifulSoup(data, 'lxml')
        title_section = soup.select('#productTitle')
        price_section = soup.select('#priceblock_ourprice')
        availability_section = soup.select('#availability')
        features_section = soup.select('#feature-bullets')
        asin_section = soup.find('link', {'rel': 'canonical'})
        print(asin_section)

if title_section:
            title = title_section[0].text.strip()

if price_section:
            price = price_section[0].text.strip()

if availability_section:
            availability = availability_section[0].text.strip()

if features_section:
            features = features_section[0].text.strip()
        if asin_section:
            asin_url = asin_section['href']
            asin_url_parts = asin_url.split('/')
            asin = asin_url_parts[len(asin_url_parts) - 1]

record = {'title': title, 'price': price, 'availability': availability, 'asin': asin, 'features': features}

return record

if __name__ == ' __main__':
    API_KEY = None

with open('API_KEY.txt', encoding='utf8') as f:
        API_KEY = f.read()

result = parse('[https://www.amazon.com/Bambino-Seconds-Stainless-Japanese-Automatic-Leather/dp/B07B49QG1H/'](https://www.amazon.com/Bambino-Seconds-Stainless-Japanese-Automatic-Leather/dp/B07B49QG1H/'))
    print(result)


꽤 직설적 인. 제목을 가져오고, Amazon ASIN을 스크랩하고, 기타 항목을 가져왔습니다. Amazon 리뷰와 같은 다른 많은 것들도 긁을 수 있습니다. 데이터는 JSON 형식으로 저장됩니다.

결론



이 게시물에서는 Python에서 Scraper API를 사용하여 Amazon 데이터를 쉽게 스크랩하는 방법을 배웠습니다. 가격 모니터링 스크립트 작성 또는 ASIN 스크레이퍼와 같은 필요에 따라 이 스크립트를 향상시킬 수 있습니다.

스크레이퍼를 작성하는 것은 흥미로운 여정이지만 사이트에서 IP를 차단하면 벽에 부딪힐 수 있습니다. 개인으로서 값비싼 프록시도 감당할 수 없습니다. Scraper API은 번거로움 없이 웹사이트를 스크랩할 수 있는 저렴하고 사용하기 쉬운 API를 제공합니다. Scraper API는 기본적으로 프록시를 사용하여 웹 사이트에 액세스하므로 차단될 염려가 없습니다. 게다가 Scraper API는 헤드리스 브라우저 기능도 제공하므로 Selenium에 대해 걱정할 필요가 없습니다. 나는 또한 그것을 사용하는 방법에 대해 a post 썼다.

여기를 클릭하여 myreferral link로 가입하거나 프로모션 코드 adnan10을 입력하면 10% 할인을 받을 수 있습니다. 할인을 받지 못한 경우 제 사이트의 이메일을 통해 알려주시면 도와드리겠습니다.

2020년 11월 16일 http://blog.adnansiddiqi.me에 처음 게시되었습니다.

좋은 웹페이지 즐겨찾기