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