Bỏ để qua phần nội dung

Hướng dẫn cơ bản để cạo Amazon bằng Python (2023)

Thu thập dữ liệu từ Amazon, một trong những nền tảng thương mại điện tử lớn nhất có thể cung cấp thông tin chi tiết có giá trị. Cho dù bạn đang tìm cách so sánh giá cả, phân tích đánh giá của khách hàng hoặc theo dõi tình trạng sẵn có của sản phẩm, thì việc quét web có thể là một công cụ hữu ích. Hướng dẫn này cung cấp các hướng dẫn chi tiết và các ví dụ về mã Python để thu thập thông tin trên Amazon.

Đạo đức quét web

Trước khi chúng tôi đi sâu vào, điều quan trọng cần lưu ý là việc quét phải được thực hiện một cách có trách nhiệm để giảm thiểu nhu cầu trên máy chủ của trang web. Một cách để làm điều này là tập trung vào trang Tìm kiếm của Amazon nơi bạn có thể trích xuất dữ liệu sản phẩm cơ bản như tên, giá, URL hình ảnh, xếp hạng và số lượng đánh giá. Cách tiếp cận này sẽ giảm đáng kể số lượng yêu cầu bạn cần thực hiện với Amazon, giúp trình cạp của bạn chạy nhanh hơn và rẻ hơn​.

Thư viện quét web Python

Python cung cấp rất nhiều thư viện để quét web và việc chọn thư viện phù hợp tùy thuộc vào nhu cầu cụ thể và mức độ thoải mái của bạn với Python. Dưới đây là một số thư viện được sử dụng phổ biến nhất:

  1. yêu cầu: Một thư viện Python phổ biến để thực hiện các yêu cầu HTTP. Nó trừu tượng hóa sự phức tạp của việc tạo yêu cầu đằng sau một API đơn giản, cho phép bạn gửi yêu cầu HTTP/1.1 bằng nhiều phương thức khác nhau như GET, POST và các phương thức khác.
  2. ĐẹpSúp: Nó được sử dụng để phân tích cú pháp tài liệu HTML và XML và trích xuất dữ liệu. Nó tạo ra một cây phân tích cú pháp từ mã nguồn trang có thể được sử dụng để trích xuất dữ liệu theo cách có thứ bậc và dễ đọc hơn.
  3. Trị liệu: Một khung Python mã nguồn mở được thiết kế đặc biệt để quét web. Đó là một khung linh hoạt có thể xử lý nhiều tác vụ cạo và có khả năng cạo các tập dữ liệu lớn.
  4. Selenium: Một công cụ mạnh để điều khiển trình duyệt web thông qua chương trình. Nó rất thuận tiện cho việc quét web vì nó có thể xử lý tất cả các loại nội dung trang web, bao gồm cả nội dung do JavaScript tạo. Nó cũng cho phép người dùng tương tác như nhấp, cuộn, v.v.
  5. bưu kiện: Được sử dụng để trích xuất dữ liệu từ HTML và XML bằng bộ chọn XPath và CSS. Nó được xây dựng trên thư viện lxml, làm cho nó linh hoạt và dễ sử dụng.

Cạo dữ liệu sản phẩm từ các trang tìm kiếm của Amazon

Bước đầu tiên trong việc thu thập dữ liệu của Amazon là trích xuất dữ liệu từ các trang tìm kiếm. Các thư viện Python Requests và Parsel có thể được sử dụng cho tác vụ này. Đây là tập lệnh ví dụ để loại bỏ dữ liệu sản phẩm từ tất cả các Trang tìm kiếm có sẵn của Amazon cho một từ khóa nhất định (ví dụ: 'iPad'):

yêu cầu nhập từ parsel Bộ chọn nhập từ urllib.parse nhập urljoin keyword_list = ['ipad'] product_overview_data = [] cho từ khóa trong keyword_list: url_list = [f'https://www.amazon.com/s?k={keyword} &page=1'] cho url trong url_list: thử: response = request.get(url) if response.status_code == 200: sel = Selector(text=response.text) # Trích xuất Trang Sản phẩm search_products = sel.css("div .s-result-item[data-component-type=s-search-result]") cho sản phẩm trong search_products: relative_url = product.css("h2>a::attr(href)").get() asin = relative_url.split('/')[3] if len(relative_url.split('/')) >= 4 other Không có product_url = urljoin('https://www.amazon.com/', relative_url).split( "?")[0] product_overview_data.append( { "keyword": keyword, "asin": asin, "url": product_url, "ad": True if "/slredirect/" in product_url other False, "title": product.css("h2>a>span::text").get(), "price-data-a-size=xl .a-offscreen::text").get(), "real_price": product. css(".a-price[data-a-size=b].a-offscreen::text").get(), "rating": (product.css("span[aria-label~=stars]: :attr "rating_count": product.css("span[aria-label~=stars] + span::attr(aria-label)").get(), "thumbnail_url": product.xpath("//img[ has-class('s-image')]/@src").get(), } ) # Nhận tất cả các trang nếu "&page=1" trong url: available_pages = sel.xpath( '//a[has-class ("s-pagination-item")][not(has-class("s-pagination-separator"))]/text()' ).getall() cho trang trong available_pages: search_url_paginated = f'https:// www.amazon.com/s?k={keyword}&page={page}' url_list.append(search_url_paginated) ngoại trừ Ngoại lệ như e: print("Error", e)

Tập lệnh này sẽ thu thập một mảng dữ liệu sản phẩm, mỗi mảng được biểu thị dưới dạng từ điển với các khóa sau:

  • keyword: Từ khóa tìm kiếm được sử dụng (ví dụ: 'iPad')
  • asin: Số nhận dạng tiêu chuẩn Amazon duy nhất của sản phẩm
  • url: URL của sản phẩm
  • ad: Boolean cho biết liệu sản phẩm có phải là quảng cáo hay không
  • title: Tên sản phẩm
  • price: Giá thành sản phẩm
  • real_price: Giá gốc của sản phẩm trước khi giảm giá
  • rating: Đánh giá sản phẩm
  • rating_count: Số lượng xếp hạng mà sản phẩm đã nhận được
  • thumbnail_url: URL của hình thu nhỏ của sản phẩm

Tập lệnh cũng xác định tất cả các trang có sẵn cho từ khóa tìm kiếm và nối chúng vào url_list để cạo【9†nguồn】.

Cạo dữ liệu sản phẩm từ các trang sản phẩm của Amazon

Khi bạn có danh sách các URL sản phẩm của Amazon, bạn có thể cạo tất cả dữ liệu sản phẩm từ từng trang sản phẩm riêng lẻ của Amazon. Đây là một tập lệnh ví dụ sử dụng các thư viện Python Requests và Parsel để thực hiện việc này:

nhập lại các yêu cầu nhập từ parsel Bộ chọn nhập từ urllib.parse nhập urljoin product_urls = [ 'https://www.amazon.com/2021-Apple-10-2-inch-iPad-Wi-Fi/dp/B09G9FPHY6/ref= sr_1_1', ] product_data_list = [] cho product_url trong product_urls: thử: response = request.get(product_url) if response.status_code == 200: sel = Selector(text=response.text) image_data = json.loads(re.findall (r"colorImages':.*'initial':\s*(\[.+?\])},\n", response.text)[0]) biến thể_data = re.findall(r'dimensionValuesDisplayData"\s *:\s* ({.+?}),\n', response.text) feature_bullets = [bullet.strip() cho dấu đầu dòng trong sel.css("#feature-bullets li ::text").getall( )] price = sel.css('.a-price span[aria-hidden="true"] ::text').get("") nếu không phải là price: price = sel.css('.a-price . ngoài màn hình ::text').get("") product_data_list.append({ "name": sel.css("#productTitle::text").get("").strip(), "price": giá, "sao": sel.css("i[data-hook=average-star-rating] ::text").get("").strip(), "rating_count": sel.css("div[ data-hook=total-review-count] ::text").get("").strip(), "feature_bullets": Feature_bullets, "images": image_data, "variant_data": biến thể_data, }) ngoại trừ Ngoại lệ như e : print("Lỗi",e)

Tập lệnh này thu thập một mảng dữ liệu sản phẩm, với mỗi sản phẩm được biểu thị dưới dạng từ điển với các khóa sau:

  • name: Tên sản phẩm
  • price: Giá thành sản phẩm
  • stars: Xếp hạng sao của sản phẩm
  • rating_count: Tổng số đánh giá mà sản phẩm đã nhận được
  • feature_bullets: Danh sách các gạch đầu dòng về tính năng của sản phẩm
  • images: Danh sách hình ảnh độ phân giải cao của sản phẩm
  • variant_data: Dữ liệu về các biến thể của sản phẩm (ví dụ: có sẵn các màu hoặc kích cỡ khác nhau)

Cần lưu ý rằng tập lệnh này được thiết kế để trích xuất dữ liệu từ các trang sản phẩm có bố cục cụ thể. Nếu Amazon thay đổi cách bố trí các trang sản phẩm của mình, tập lệnh có thể cần được cập nhật【11†source】.

Xem xét bổ sung

Mặc dù các tập lệnh trên cung cấp điểm khởi đầu để thu thập dữ liệu trên Amazon, nhưng có những cân nhắc bổ sung cần tính đến để có một giải pháp thu thập dữ liệu hoàn chỉnh và mạnh mẽ:

1. Xử lý nội dung động

Một số trang sản phẩm của Amazon sử dụng nội dung động, yêu cầu tải JavaScript. Nếu bạn cố gắng cạo các trang này bằng các phương pháp được mô tả ở trên, bạn có thể thấy rằng một số dữ liệu bạn muốn bị thiếu. Trong những trường hợp này, bạn sẽ cần sử dụng một công cụ có thể kết xuất JavaScript, như Selenium hoặc Puppeteer.

2. Tôn trọng Robots.txt

Amazon robots.txt tệp cho trình thu thập thông tin web biết những trang nào chúng được phép truy cập. Mặc dù tệp này không ràng buộc về mặt pháp lý nhưng việc bỏ qua tệp này có thể khiến địa chỉ IP của bạn bị cấm. Tốt nhất là nên tôn trọng robots.txt tập tin để tránh bất kỳ vấn đề tiềm năng.

3. Giới hạn tỷ lệ

Amazon có thể giới hạn số lượng yêu cầu bạn có thể thực hiện trong một khoảng thời gian nhất định. Nếu bạn thực hiện quá nhiều yêu cầu quá nhanh, Amazon có thể cấm địa chỉ IP của bạn, bạn có thể cần proxy cho Amazon. Để tránh điều này, bạn có thể sử dụng các kỹ thuật như điều tiết các yêu cầu của mình hoặc xoay địa chỉ IP.

KHAI THÁC. Cân nhắc đạo đức

Quét web có thể đặt ra nhu cầu đáng kể trên máy chủ của trang web, vì vậy điều quan trọng là phải cạo một cách có trách nhiệm. Nếu bạn có thể lấy dữ liệu mình cần từ ít trang hơn, thì việc làm như vậy sẽ hợp đạo đức hơn. Ví dụ: nếu bạn chỉ cần dữ liệu sản phẩm cơ bản (tên, giá, URL hình ảnh, xếp hạng, số lượng bài đánh giá, v.v.), bạn có thể loại bỏ dữ liệu này khỏi các trang tìm kiếm thay vì các trang sản phẩm, giúp giảm số lượng yêu cầu bạn cần làm theo hệ số 20.


Tóm lại, mặc dù quét web có thể là một công cụ mạnh mẽ để trích xuất dữ liệu từ các trang web như Amazon, nhưng điều quan trọng là phải sử dụng các kỹ thuật này một cách có trách nhiệm và tuân theo các điều khoản dịch vụ của trang web cũng như các yêu cầu mà bạn đặt trên máy chủ của trang web.

Tham gia vào cuộc đối thoại

Chúng tôi sẽ không công khai email của bạn. Các ô đánh dấu * là bắt buộc *