Củ web là một cách mạnh mẽ để trích xuất dữ liệu từ các trang web cho các mục đích khác nhau, chẳng hạn như phân tích, nghiên cứu và trí thông minh trong kinh doanh. Hướng dẫn này giúp bạn cạo thông tin sản phẩm Walmart bằng Python tập trung vào các chiến lược và kỹ thuật chính. Walmart Scraping trình bày một ví dụ trong đó chúng ta có thể khai thác các chi tiết về các sản phẩm như tên, giá cả hoặc đánh giá được tìm thấy tại các trang khác nhau trong các trang web Walmart.
Hướng dẫn này sẽ sử dụng thư viện yêu cầu để thực hiện các yêu cầu HTTP và thư viện LXML để phân tích nội dung HTML.
Trước khi chúng tôi bắt đầu, đảm bảo bạn đã cài đặt Python trên máy của bạn. Bạn có thể cài đặt các thư viện cần thiết bằng PIP:
pip install requests
pip install lxml
pip install urllib3
Tiếp theo, hãy nhập các thư viện cần thiết:
import requests
from lxml import html
import csv
import random
import urllib3
import ssl
Danh sách các URL sản phẩm Walmart để cạo.
product_urls = [
'link with https',
'link with https',
'link with https'
]
Để cạo một trang web, điều rất quan trọng là người ta sử dụng các tiêu đề phù hợp, đáng chú ý là tiêu đề tác nhân người dùng, để bắt chước yêu cầu từ trình duyệt thực tế. Hơn nữa, người ta có thể tránh bị hạn chế do các biện pháp chống BOT được đưa ra bởi các chủ sở hữu trang web sử dụng các máy chủ proxy có thể xoay. Dưới đây là các ví dụ về các chuỗi tác nhân người dùng cùng với mô tả về cách tích hợp các máy chủ proxy yêu cầu ủy quyền dựa trên địa chỉ IP.
user_agents = [
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
]
proxy = [
'<ip>:<port>',
'<ip>:<port>',
'<ip>:<port>',
]
Đặt tiêu đề thành bắt chước các yêu cầu trình duyệt và tránh phát hiện.
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',
'priority': 'u=0, i',
'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Google Chrome";v="126"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Linux"',
'sec-fetch-dest': 'document',
'sec-fetch-mode': 'navigate',
'sec-fetch-site': 'none',
'sec-fetch-user': '?1',
'upgrade-insecure-requests': '1',
}
Tạo một danh sách trống để lưu trữ chi tiết sản phẩm.
product_details = []
Quá trình liệt kê cho các trang URL hoạt động như sau: Đối với mỗi trang URL, yêu cầu GET được gửi bằng cách sử dụng một tác nhân người dùng và proxy người dùng được chọn ngẫu nhiên. Khi nhận được phản hồi HTML, nó được phân tích cú pháp để trích xuất các chi tiết như tên sản phẩm, giá cả và đánh giá. Dữ liệu được trích xuất được lưu trữ dưới dạng từ điển, sau đó được thêm vào danh sách được tạo trước đó.
for url in product_urls:
headers['user-agent'] = random.choice(user_agents)
proxies = {
'http': f'http://{random.choice(proxy)}',
'https': f'http://{random.choice(proxy)}',
}
try:
# Gửi HTTP Nhận yêu cầu đến URL
response = requests.get(url=url, headers=headers, proxies=proxies, verify=False)
print(response.status_code)
response.raise_for_status()
except requests.exceptions.RequestException as e:
print(f'Error fetching data: {e}')
# Phân tích nội dung HTML bằng LXML
parser = html.fromstring(response.text)
# Trích xuất tiêu đề sản phẩm
title = ''.join(parser.xpath('//h1[@id="main-title"]/text()'))
# Trích xuất giá sản phẩm
price = ''.join(parser.xpath('//span[@itemprop="price"]/text()'))
# Trích xuất chi tiết đánh giá
review_details = ''.join(parser.xpath('//div[@data-testid="reviews-and-ratings"]/div/span[@class="w_iUH7"]/text()'))
# Lưu trữ chi tiết chi tiết trong một từ điển
product_detail = {
'title': title,
'price': price,
'review_details': review_details
}
# Phụ lục chi tiết sản phẩm vào danh sách
product_details.append(product_detail)
Tiêu đề:
Giá:
Xem xét chi tiết:
with open('walmart_products.csv', 'w', newline='') as csvfile:
fieldnames = ['title', 'price', 'review_details']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
for product_detail in product_details:
writer.writerow(product_detail)
Dưới đây là mã hoàn chỉnh với các nhận xét để giúp bạn hiểu rõ hơn:
import requests
from lxml import html
import csv
import random
import urllib3
import ssl
ssl._create_default_https_context = ssl._create_stdlib_context
urllib3.disable_warnings()
# Danh sách các URL sản phẩm để cạo
product_urls = [
'link with https',
'link with https',
'link with https'
]
# Ngẫu nhiên chuỗi tác nhân người dùng để ẩn danh
user_agents = [
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
]
# Danh sách proxy cho xoay IP
proxy = [
'<ip>:<port>',
'<ip>:<port>',
'<ip>:<port>',
]
# Tiêu đề cho các yêu cầu của trình duyệt bắt chước
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',
'priority': 'u=0, i',
'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Google Chrome";v="126"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Linux"',
'sec-fetch-dest': 'document',
'sec-fetch-mode': 'navigate',
'sec-fetch-site': 'none',
'sec-fetch-user': '?1',
'upgrade-insecure-requests': '1',
}
# Khởi tạo một danh sách trống để lưu trữ chi tiết sản phẩm
product_details = []
# Vòng lặp qua từng URL sản phẩm
for url in product_urls:
headers['user-agent'] = random.choice(user_agents)
proxies = {
'http': f'http://{random.choice(proxy)}',
'https': f'http://{random.choice(proxy)}',
}
try:
# Gửi HTTP Nhận yêu cầu đến URL
response = requests.get(url=url, headers=headers, proxies=proxies, verify=False)
print(response.status_code)
response.raise_for_status()
except requests.exceptions.RequestException as e:
print(f'Error fetching data: {e}')
# Phân tích nội dung HTML bằng LXML
parser = html.fromstring(response.text)
# Trích xuất tiêu đề sản phẩm
title = ''.join(parser.xpath('//h1[@id="main-title"]/text()'))
# Trích xuất giá sản phẩm
price = ''.join(parser.xpath('//span[@itemprop="price"]/text()'))
# Trích xuất chi tiết đánh giá
review_details = ''.join(parser.xpath('//div[@data-testid="reviews-and-ratings"]/div/span[@class="w_iUH7"]/text()'))
# Lưu trữ chi tiết chi tiết trong một từ điển
product_detail = {
'title': title,
'price': price,
'review_details': review_details
}
# Phụ lục chi tiết sản phẩm vào danh sách
product_details.append(product_detail)
# Viết dữ liệu được trích xuất vào tệp CSV
with open('walmart_products.csv', 'w', newline='') as csvfile:
fieldnames = ['title', 'price', 'review_details']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
for product_detail in product_details:
writer.writerow(product_detail)
Hướng dẫn của chúng tôi trình bày cách sử dụng các thư viện Python để cạo dữ liệu sản phẩm từ Walmart và lưu nó ở định dạng CSV để phân tích tiếp theo. Kịch bản được cung cấp là cơ bản và cung cấp một nền tảng có thể được tăng cường để tăng hiệu quả của quá trình cạo. Các cải tiến có thể bao gồm giới thiệu sự chậm trễ ngẫu nhiên giữa các yêu cầu bắt chước các mẫu duyệt người, thực hiện xoay tác nhân người dùng và proxy để tránh phát hiện và phát triển hệ thống xử lý lỗi mạnh mẽ để quản lý các gián đoạn hoặc thất bại tiềm năng.
Мы получили вашу заявку!
Ответ будет отправлен на почту в ближайшее время.
С уважением proxy-seller.com!
Bình luận: 0