Lấy Dữ Liệu Chi Tiết Sản Phẩm Từ Amazon Sử Dụng Python

Trong lĩnh vực thương mại điện tử, việc thu thập thông tin chi tiết về sản phẩm là một bước quan trọng để thực hiện phân tích thị trường, đánh giá đối thủ cạnh tranh và lên kế hoạch kinh doanh. Với lượng lớn thông tin sản phẩm, Amazon là một trong những nền tảng thương mại điện tử hàng đầu thế giới. Bài viết này sẽ hướng dẫn cách sử dụng Python để xây dựng một chương trình thu thập dữ liệu từ trang web Amazon, kèm theo các ví dụ mã nguồn chi tiết.

1. Chuẩn Bị

Trước khi bắt đầu viết chương trình thu thập dữ liệu, cần thực hiện một số bước chuẩn bị:

  • Cài đặt các thư viện Python cần thiết: Chúng ta sẽ sử dụng `requests` để gửi yêu cầu HTTP, `BeautifulSoup` để phân tích trang HTML, và `lxml` làm bộ phân tích.
  • Nắm bắt quy định của Amazon về robots.txt: Tuân thủ chính sách của Amazon để đảm bảo hành vi thu thập dữ liệu của chúng ta là hợp pháp.

2. Gửi Yêu Cầu HTTP

Bước đầu tiên là sử dụng thư viện `requests` để gửi yêu cầu HTTP và lấy nội dung HTML của trang sản phẩm trên Amazon.

import requests

def lay_noi_dung_trang(url):
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
    }
    phan_hoi = requests.get(url, headers=headers)
    if phan_hoi.status_code == 200:
        return phan_hoi.text
    else:
        return None

3. Phân Tích Nội Dung HTML

Sau khi có được nội dung HTML, chúng ta sử dụng `BeautifulSoup` để phân tích và rút trích thông tin chi tiết về sản phẩm.

from bs4 import BeautifulSoup

def phan_tich_thong_tin_san_pham(noi_dung_html):
    soup = BeautifulSoup(noi_dung_html, 'lxml')
    thong_tin_san_pham = {}

    # Rút trích tiêu đề sản phẩm
    tieu_de = soup.find('span', id='productTitle').text.strip()
    thong_tin_san_pham['tieu_de'] = tieu_de

    # Rút trích giá sản phẩm
    gia = soup.find('span', id='priceblock_ourprice').text.strip()
    thong_tin_san_pham['gia'] = gia

    # Rút trích điểm đánh giá
    diem_danh_gia = soup.find('span', id='acrPopover').text.strip()
    thong_tin_san_pham['diem_danh_gia'] = diem_danh_gia

    # Rút trích số lượng đánh giá
    so_luong_danh_gia = soup.find('span', id='acrCustomerReviewText').text.strip()
    thong_tin_san_pham['so_luong_danh_gia'] = so_luong_danh_gia

    return thong_tin_san_pham

4. Lưu Trữ Dữ Liệu

Sau khi thu thập được thông tin sản phẩm, chúng ta có thể lưu nó vào một tệp CSV để phân tích sau này.

import csv

def luu_vao_csv(thong_tin_san_pham, ten_file='san_pham_amazon.csv'):
    with open(ten_file, 'a', newline='', encoding='utf-8') as file_csv:
        ten_cot = ['tieu_de', 'gia', 'diem_danh_gia', 'so_luong_danh_gia']
        ghi_csv = csv.DictWriter(file_csv, fieldnames=ten_cot)
        
        if file_csv.tell() == 0:
            ghi_csv.writeheader()
        
        ghi_csv.writerow(thong_tin_san_pham)

5. Thu Thập Nhiều Sản Phẩm

Để thu thập thông tin từ nhiều sản phẩm, chúng ta có thể tạo một vòng lặp để gửi yêu cầu cho mỗi URL sản phẩm và phân tích dữ liệu.

def thu_thap_nhieu_san_pham(danh_sach_url):
    for url in danh_sach_url:
        noi_dung_html = lay_noi_dung_trang(url)
        if noi_dung_html:
            thong_tin_san_pham = phan_tich_thong_tin_san_pham(noi_dung_html)
            luu_vao_csv(thong_tin_san_pham)

# Danh sách URL mẫu
danh_sach_url = [
    "https://www.amazon.com/dp/B08F7N8PDP",
    "https://www.amazon.com/dp/B08F7PTF53",
    # Thêm nhiều URL khác...
]

thu_thap_nhieu_san_pham(danh_sach_url)

6. Xử Lý Ngoại Lệ

Thêm cơ chế xử lý ngoại lệ vào chương trình thu thập dữ liệu để đảm bảo tính ổn định.

def lay_noi_dung_trang(url):
    try:
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
        }
        phan_hoi = requests.get(url, headers=headers)
        if phan_hoi.status_code == 200:
            return phan_hoi.text
        else:
            print(f"Lỗi khi tải trang: {url}")
            return None
    except requests.RequestException as e:
        print(f"Lỗi yêu cầu: {e}")
        return None

Thẻ: python WebScraping Amazon requests BeautifulSoup

Đăng vào ngày 13 tháng 7 lúc 09:18