Truy cập dữ liệu từ những người khổng lồ thương mại điện tử như Amazon là rất quan trọng để phân tích thị trường, chiến lược giá cả và nghiên cứu sản phẩm. Dữ liệu này có thể được thu thập thông qua việc quét web, một phương pháp liên quan đến việc trích xuất một lượng lớn thông tin từ các trang web. Tuy nhiên, Amazon bảo vệ nghiêm ngặt dữ liệu của mình, làm cho các kỹ thuật cạo truyền thống thường không hiệu quả. Trong hướng dẫn toàn diện này, chúng tôi sẽ đi sâu vào các phương pháp thu thập dữ liệu sản phẩm từ Amazon và thảo luận về các chiến lược để phá vỡ các hệ thống chống xơ cứng mạnh mẽ của nền tảng. Chúng tôi sẽ khám phá việc sử dụng python, proxy và các kỹ thuật cào nâng cao có thể giúp khắc phục những thách thức này và thu hoạch hiệu quả dữ liệu cần thiết cho mục đích kinh doanh hoặc nghiên cứu của bạn.
Để xóa dữ liệu thành công từ Amazon, bạn có thể theo thuật toán có cấu trúc được nêu dưới đây. Phương pháp này đảm bảo bạn lấy thông tin cần thiết một cách hiệu quả và chính xác.
Bước 1 : Gửi các yêu cầu HTTP đến các trang sản phẩm Amazon:
Bước 2 : Phân tích nội dung HTML:
Bước 3 : Lưu trữ dữ liệu:
Amazon sử dụng một số biện pháp để cản trở các nỗ lực cào, bao gồm các giới hạn tốc độ kết nối, tích hợp captcha và chặn IP. Người dùng có thể áp dụng các biện pháp đối phó để phá vỡ những trở ngại này, chẳng hạn như sử dụng các proxy chất lượng cao.
Đối với các hoạt động cạo rộng rãi, các kỹ thuật Python tiên tiến có thể được sử dụng để thu hoạch một lượng đáng kể dữ liệu sản phẩm. Những kỹ thuật này bao gồm nhồi tiêu đề và dấu vân tay TLS, giúp trốn tránh phát hiện và đảm bảo trích xuất dữ liệu thành công.
Các bước này được giải thích trong các phần sắp tới của bài viết, nơi sẽ thấy việc triển khai thực tế của nó bằng Python 3.12.2
Để bắt đầu dự án cạo web, chúng tôi sẽ bắt đầu bằng cách thiết lập một cạp cơ bản bằng thư viện LXML để phân tích cú pháp HTML và thư viện yêu cầu để quản lý các yêu cầu HTTP hướng vào máy chủ web Amazon.
Trọng tâm của chúng tôi sẽ là trích xuất thông tin cần thiết như tên sản phẩm, giá cả và xếp hạng từ các trang sản phẩm của Amazon. Chúng tôi cũng sẽ giới thiệu các kỹ thuật để phân tích HTML một cách hiệu quả và quản lý các yêu cầu, đảm bảo trích xuất dữ liệu chính xác và có tổ chức.
Để duy trì các phụ thuộc dự án và tránh xung đột, nên tạo ra một môi trường ảo riêng cho nỗ lực cào trên web này. Sử dụng các công cụ như là VEN VENV, hoặc Py PyenV được khuyến nghị để thiết lập các môi trường ảo.
Bạn sẽ cần các thư viện Python của bên thứ ba sau:
Được sử dụng để gửi yêu cầu HTTP và truy xuất nội dung web. Nó thường được sử dụng để quét web và tương tác với API Web.
Cài đặt:
pip install requests
Một thư viện để phân tích cú pháp và thao tác các tài liệu XML và HTML. Nó thường được sử dụng để quét web và làm việc với dữ liệu có cấu trúc từ các trang web.
Cài đặt:
pip install lxml
Ở đây chúng tôi cần nhập các thư viện cần thiết cho cạp của chúng tôi để chạy. Bao gồm thư viện yêu cầu để xử lý các yêu cầu HTTP, thư viện CSV để xử lý hoạt động tệp CSV, thư viện ngẫu nhiên để tạo các giá trị ngẫu nhiên và đưa ra các lựa chọn ngẫu nhiên, thư viện LXML để phân tích nội dung HTML thô, và Dict và Liệt kê để đánh dấu kiểu.
import requests
import csv
import random
from lxml import html
from typing import Dict, List
Đoạn mã sau đọc một tệp CSV có tên Amazon_Product_URLS.CSV trong đó mỗi dòng chứa URL của trang sản phẩm Amazon. Mã lặp lại trên các hàng, trích xuất các URL từ mỗi hàng và thêm chúng vào một danh sách có tên là URL.
with open('amazon_product_urls.csv', 'r') as file:
reader = csv.DictReader(file)
for row in reader:
urls.append(row['url'])
Yêu cầu tiêu đề đóng một vai trò quan trọng trong các yêu cầu HTTP, cung cấp thông tin khách hàng phức tạp và yêu cầu. Trong khi cạo, điều quan trọng là phải sao chép các tiêu đề người dùng được ủy quyền để tránh phát hiện và dễ dàng truy cập thông tin bạn muốn. Bằng cách bắt chước các tiêu đề thường được sử dụng, bộ phế liệu có thể tránh các kỹ thuật phát hiện, đảm bảo rằng dữ liệu được trích xuất nhất quán trong khi duy trì các tiêu chuẩn đạo đức.
Các proxy hoạt động như các trung gian trong việc cạo web, che giấu địa chỉ IP cạp để ngăn chặn phát hiện và chặn máy chủ. Proxy xoay cho phép bạn gửi từng yêu cầu với địa chỉ IP mới tránh các khối tiềm năng .. Việc sử dụng các proxy dân cư hoặc di động tăng cường khả năng phục hồi đối với các biện pháp chống xẹp do phát hiện máy chủ và nhà cung cấp thực.
Mã để tích hợp các tiêu đề yêu cầu và máy chủ proxy với ủy quyền địa chỉ IP:
headers = {
'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.7',
'accept-language': 'en-IN,en;q=0.9',
'dnt': '1',
'sec-ch-ua': '"Google Chrome";v="123", "Not:A-Brand";v="8", "Chromium";v="123"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Windows"',
'sec-fetch-dest': 'document',
'sec-fetch-mode': 'navigate',
'sec-fetch-site': 'same-origin',
'sec-fetch-user': '?1',
'upgrade-insecure-requests': '1',
}
proxies = {'http': '', 'https': ''}
Ở đây, chúng tôi sẽ tạo một danh sách các bộ sưu tập tác nhân người dùng, từ đó một tác nhân người dùng ngẫu nhiên sẽ được chọn cho mỗi yêu cầu. Việc thực hiện cơ chế xoay tiêu đề, chẳng hạn như xoay tác nhân người dùng sau mỗi yêu cầu, có thể hỗ trợ thêm trong việc bỏ qua các biện pháp phát hiện bot.
useragents = [
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4591.54 Safari/537.36",
"Mozilla/5.0 (Windows NT 7_0_2; Win64; x64) AppleWebKit/541.38 (KHTML, like Gecko) Chrome/105.0.1585 Safari/537.36",
"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.7863.44 Safari/537.36"
]
headers['user-agent'] = random.choice(useragnets)
Gửi HTTP Nhận yêu cầu đến một URL được chỉ định với các tiêu đề tùy chỉnh, thời gian chờ 30 giây và proxy được chỉ định cho yêu cầu.
response = requests.get(url=url, headers=headers, proxies=proxies, timeout=30)
Điểm dữ liệu bắt buộc: Tiêu đề, giá cả và xếp hạng. Bây giờ, hãy kiểm tra và xác định XPath tương ứng cho các phần tử được hiển thị trong ảnh chụp màn hình cùng với các điểm dữ liệu tương ứng của chúng.
Ảnh chụp màn hình dưới đây hiển thị tính năng "kiểm tra" Chrome DevTools đang được sử dụng để tìm XPath `// Span [@id =" ProductTitle "]/text ()` để trích xuất tiêu đề sản phẩm từ trang sản phẩm Amazon.
Ảnh chụp màn hình sau đây cho thấy việc tìm kiếm Xpath tương ứng `//div[@id="corePrice_feature_div"]/div/div/span/span/text()` Để trích xuất giá sản phẩm từ một trang sản phẩm Amazon.
Ảnh chụp màn hình cho thấy việc tìm kiếm Xpath tương ứng `//span[@id="acrPopover"]/@title'` Để trích xuất xếp hạng sản phẩm từ một trang sản phẩm Amazon.
Tạo một từ điển cung cấp các biểu thức XPath để trích xuất thông tin cụ thể từ một trang web: tiêu đề, xếp hạng và giá của một sản phẩm.
xpath_queries = {'title': '//span[@id="productTitle"]/text()', 'ratings': '//span[@id="acrPopover"]/@title', 'price': '//span[@class="a-offscreen"]/text()'}
Mã bên dưới phân tích nội dung HTML thu được từ yêu cầu GET đến máy chủ Amazon thành định dạng giống như cây có cấu trúc, cho phép điều hướng và thao tác dễ dàng hơn các yếu tố và thuộc tính của nó.
tree = html.fromstring(response.text)
Snippet mã sau đây trích xuất dữ liệu từ cây HTML được phân tích cú pháp bằng truy vấn XPath và gán nó cho một từ điển với một khóa được chỉ định. Dải () được sử dụng để loại bỏ khoảng trắng ở đầu và cuối nếu có. Nó lấy kết quả đầu tiên của truy vấn XPath và lưu trữ nó dưới phím đã cho trong từ điển trích xuất_data.
data = tree.xpath(xpath_query)[0].strip()
extracted_data[key] = data
Mã sau đây ghi dữ liệu từ từ điển trích xuất_data vào tệp CSV có tên là Product_Data.csv. Đảm bảo rằng dòng tiêu đề chỉ được viết nếu tệp trống. Nếu tệp không trống, nó sẽ thêm dữ liệu làm hàng bổ sung vào tệp CSV. Hàm này cho phép tệp CSV được cập nhật liên tục với dữ liệu được trích xuất mới mà không ghi đè văn bản hiện có.
csv_file_path = 'product_data.csv'
fieldnames = ['title', 'ratings', 'price']
with open(csv_file_path, 'a', newline='') as csvfile:
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
if csvfile.tell() == 0:
writer.writeheader()
writer.writerow(extracted_data)
Vui lòng tham khảo mã hoàn chỉnh của chúng tôi, điều này sẽ giúp bạn bắt đầu nhanh chóng. Mã này có cấu trúc tốt và được ghi lại, làm cho nó thân thiện với người mới bắt đầu. Để thực thi mã này, người dùng phải có tệp CSV được gọi là "amazon_product_urls" trong cùng một thư mục. Dưới đây là cấu trúc của tệp CSV:
import requests
import csv
import random
from lxml import html
from typing import Dict, List
def send_requests(
url: str, headers: Dict[str, str], proxies: Dict[str, str]
) -> List[Dict[str, str]]:
"""
Gửi HTTP Nhận yêu cầu đến nhiều URL với các tiêu đề và proxy.
Args:
urls (str): URL để gửi yêu cầu đến.
headers (Dict[str, str]): Từ điển chứa các tiêu đề yêu cầu.
proxies (Dict[str, str]): Từ điển chứa cài đặt proxy.
Returns:
Response: Đối tượng phản hồi chứa dữ liệu phản hồi cho mỗi URL.
"""
try:
response = requests.get(url, headers=headers, proxies=proxies, timeout=30)
# Xác thực phản hồi
if len(response.text)> 10000:
return response
return None
except Exception as e:
print(f"Error occurred while fetching URL {url}: {str(e)}")
def extract_data_from_html(
response, xpath_queries: Dict[str, str]
) -> Dict[str, List[str]]:
"""
Trích xuất dữ liệu từ nội dung HTML bằng các truy vấn XPath.
Args:
response (Response): Đối tượng phản hồi.
xpath_queries (Dict[str, str]): Từ điển chứa các truy vấn XPath để trích xuất dữ liệu.
Returns:
Dict[str, str]: Từ điển chứa dữ liệu trích xuất cho mỗi truy vấn XPath.
"""
extracted_data = {}
tree = html.fromstring(response.text)
for key, xpath_query in xpath_queries.items():
data = tree.xpath(xpath_query)[0].strip()
extracted_data[key] = data
return extracted_data
def save_to_csv(extracted_data: Dict[str, any]):
"""
Lưu một từ điển dưới dạng một hàng trong tệp CSV bằng DictWriter.
Args:
extracted_data (Dict[str, any]): Từ điển đại diện cho một hàng dữ liệu.
"""
csv_file_path = "product_data.csv"
fieldnames = ["title", "ratings", "price"]
with open(csv_file_path, "a", newline="") as csvfile:
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
if csvfile.tell() == 0:
writer.writeheader() # Chỉ ghi tiêu đề nếu tệp trống
writer.writerow(extracted_data)
def main():
# Đọc URL từ tệp CSV
urls = []
with open("amazon_product_urls.csv", "r") as file:
reader = csv.DictReader(file)
for row in reader:
urls.append(row["url"])
# Định nghĩa tiêu đề yêu cầu
headers = {
"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.7",
"accept-language": "en-IN,en;q=0.9",
"dnt": "1",
"sec-ch-ua": '"Google Chrome";v="123", "Not:A-Brand";v="8", "Chromium";v="123"',
"sec-ch-ua-mobile": "?0",
"sec-ch-ua-platform": '"Windows"',
"sec-fetch-dest": "document",
"sec-fetch-mode": "navigate",
"sec-fetch-site": "same-origin",
"sec-fetch-user": "?1",
"upgrade-insecure-requests": "1",
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36",
}
useragents = [
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4591.54 Safari/537.36",
"Mozilla/5.0 (Windows NT 7_0_2; Win64; x64) AppleWebKit/541.38 (KHTML, like Gecko) Chrome/105.0.1585 Safari/537.36",
"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.7863.44 Safari/537.36"
]
# Xác định proxy
proxies = {"http": "IP:Port", "https": "IP:Port"}
# Gửi yêu cầu đến URL
for url in urls:
# Xoay vòng người dùng trong tiêu đề
headers["user-agent"] = random.choice(useragnets)
response = send_requests(url, headers, proxies)
if response:
# Trích xuất dữ liệu từ nội dung HTML
xpath_queries = {
"title": '//span[@id="productTitle"]/text()',
"ratings": '//span[@id="acrPopover"]/@title',
"price": '//span[@class="a-offscreen"]/text()',
}
extracted_data = extract_data_from_html(response, xpath_queries)
# Lưu dữ liệu được trích xuất vào tệp CSV
save_to_csv(extracted_data)
if __name__ == "__main__":
main()
Các giải pháp proxy khác nhau, bao gồm IPv4 trung tâm dữ liệu, di động xoay, ISP và proxy dân cư, có sẵn để trích xuất dữ liệu không bị gián đoạn. Logic xoay đúng và các tác nhân người dùng được sử dụng để mô phỏng hành vi người dùng thực, trong khi các proxy đặc biệt hỗ trợ cạo quy mô lớn với vòng quay nội bộ và các nhóm IP rộng lớn. Hiểu được ưu và nhược điểm của từng tùy chọn proxy là rất quan trọng để trích xuất dữ liệu không bị gián đoạn.
Kiểu | Ưu điểm | Nhược điểm |
---|---|---|
Proxy trung tâm dữ liệu |
Tốc độ cao và hiệu suất. Hiệu quả chi phí. Lý tưởng cho các yêu cầu khối lượng lớn. |
Có thể dễ dàng phát hiện và đưa vào danh sách đen. Không đáng tin cậy chống lại các hệ thống chống xào hoặc chống BOT. |
Proxy dân cư |
Tính hợp pháp cao do IPS dân cư thực sự. Tính khả dụng của IP toàn cầu rộng rãi cho việc cạo dữ liệu cụ thể về vị trí. Khả năng xoay IP. |
Đắt hơn các proxy trung tâm dữ liệu. |
Proxy di động |
IPS rất hợp pháp. Hiệu quả để tránh các khối và lời nhắc xác minh. |
Đắt hơn các loại proxy khác. Chậm hơn các proxy trung tâm dữ liệu do sự phụ thuộc mạng di động. |
Proxy ISP |
IPS đáng tin cậy cao. Nhanh hơn IPS dân cư. |
Tính khả dụng IP hạn chế. Xoay IP không có sẵn. |
Quét dữ liệu sản phẩm từ Amazon liên quan đến việc chuẩn bị tỉ mỉ để điều hướng các cơ chế chống xẹp của nền tảng một cách hiệu quả. Việc sử dụng các máy chủ proxy cùng với Python cho phép xử lý dữ liệu hiệu quả và trích xuất mục tiêu các thông tin cần thiết. Khi chọn proxy cho việc cạo web, điều quan trọng là phải xem xét các yếu tố như hiệu suất, chi phí, độ tin cậy của máy chủ và các yêu cầu cụ thể của dự án của bạn. Sử dụng các proxy động và thực hiện các chiến lược để chống lại các biện pháp bảo mật có thể giảm thiểu rủi ro bị chặn và nâng cao hiệu quả chung của quá trình cạo.
Мы получили вашу заявку!
Ответ будет отправлен на почту в ближайшее время.
С уважением proxy-seller.com!
Bình luận: 0