Hướng dẫn lấy dữ liệu bất động sản của Zvel với Python
Tóm tắt được tạo bởi AI:
Trích xuất thông tin bất động sản từ Zvel có thể cung cấp phân tích hoàn hảo cho thị trường và đầu tư. Bài đăng này nhằm mục đích thảo luận về danh sách tài sản của Zvelow với Python, nơi nó sẽ chính dựa trên các bước thiết yếu được thực hiện và hướng dẫn. Hướng dẫn này sẽ chỉ cho bạn cách cạo thông tin từ trang web Zvel bằng các thư viện như yêu cầu và LXML.
Cài đặt các thư viện cần thiết và bắt đầu cạo
Trước khi chúng tôi bắt đầu, hãy đảm bảo bạn đã cài đặt Python trên hệ thống của mình. Bạn cũng cần cài đặt các thư viện sau:
pip install requests
pip install lxmlBước 1. Hiểu cấu trúc HTML của Zvel
Để trích xuất dữ liệu từ Zvel, bạn cần hiểu cấu trúc của trang web. Mở một trang danh sách tài sản trên Zvel và kiểm tra các yếu tố bạn muốn cạo (ví dụ: tiêu đề tài sản, giá ước tính cho thuê và giá đánh giá).
Tiêu đề:

Chi tiết giá:

Bước 2. Thực hiện các yêu cầu HTTP
Bây giờ chúng ta hãy gửi yêu cầu HTTP. Đầu tiên, chúng ta cần tìm nạp nội dung HTML của trang Zvel. Chúng tôi sẽ sử dụng thư viện yêu cầu để gửi yêu cầu HTTP nhận được URL đích. Chúng tôi cũng sẽ thiết lập các tiêu đề yêu cầu bắt chước yêu cầu trình duyệt thực và sử dụng các proxy để tránh chặn IP.
import requests
# Xác định URL mục tiêu cho danh sách thuộc tính Zvel
url = "https://www.zillow.com/homedetails/1234-Main-St-Some-City-CA-90210/12345678_zpid/"
# Thiết lập các tiêu đề yêu cầu để bắt chước yêu cầu trình duyệt
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-US,en;q=0.9',
'cache-control': 'no-cache',
'dnt': '1',
'pragma': 'no-cache',
'sec-ch-ua': '"Not/A)Brand";v="99", "Google Chrome";v="91", "Chromium";v="91"',
'sec-ch-ua-mobile': '?0',
'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/91.0.4472.124 Safari/537.36',
}
# Tùy chọn, thiết lập proxy để tránh chặn IP
proxies = {
'http': 'http://username:password@your_proxy_address',
'https://username:password@your_proxy_address',
}
# Gửi HTTP Nhận yêu cầu với các tiêu đề và proxy
response = requests.get(url, headers=headers, proxies=proxies)
response.raise_for_status() # Ensure we got a valid responseBước 3. Phân tích nội dung HTML
Tiếp theo, chúng ta cần phân tích nội dung HTML bằng LXML. Chúng tôi sẽ sử dụng hàm FromString từ mô -đun LXML.html để phân tích nội dung HTML của trang web vào một đối tượng phần tử.
from lxml.html import fromstring
# Phân tích nội dung HTML bằng LXML
parser = fromstring(response.text)Bước 4. Trích xuất dữ liệu
Bây giờ, chúng tôi sẽ trích xuất các điểm dữ liệu cụ thể như tiêu đề tài sản, giá ước tính cho thuê và giá đánh giá bằng cách sử dụng các truy vấn XPath trên nội dung HTML được phân tích cú pháp.
# Trích xuất tiêu đề tài sản bằng cách sử dụng XPath
title = ' '.join(parser.xpath('//h1[@class="Text-c11n-8-99-3__sc-aiai24-0 dFxMdJ"]/text()'))
# Trích xuất giá cho thuê tài sản bằng cách sử dụng Xpath
rent_estimate_price = parser.xpath('//span[@class="Text-c11n-8-99-3__sc-aiai24-0 dFhjAe"]//text()')[-2]
# Trích xuất giá đánh giá tài sản bằng cách sử dụng XPath
assessment_price = parser.xpath('//span[@class="Text-c11n-8-99-3__sc-aiai24-0 dFhjAe"]//text()')[-1]
# Lưu trữ dữ liệu được trích xuất trong một từ điển
property_data = {
'title': title,
'Rent estimate price': rent_estimate_price,
'Assessment price': assessment_price
}Bước 5. Lưu dữ liệu vào JSON
Cuối cùng, chúng tôi sẽ lưu dữ liệu được trích xuất vào tệp JSON để xử lý thêm.
import json
# Xác định tên tệp JSON đầu ra
output_file = 'zillow_properties.json'
# Mở tệp ở chế độ ghi và đổ dữ liệu
with open(output_file, 'w') as f:
json.dump(all_properties, f, indent=4)
print(f"Scraped data saved to {output_file}")Xử lý nhiều URL
Để xóa nhiều danh sách tài sản, chúng tôi sẽ lặp lại một danh sách các URL và lặp lại quy trình trích xuất dữ liệu cho từng danh sách.
# Danh sách các URL để cạo
urls = [
"https://www.zillow.com/homedetails/1234-Main-St-Some-City-CA-90210/12345678_zpid/",
"https://www.zillow.com/homedetails/5678-Another-St-Some-City-CA-90210/87654321_zpid/"
]
# Liệt kê để lưu trữ dữ liệu cho tất cả các thuộc tính
all_properties = []
for url in urls:
# Gửi HTTP Nhận yêu cầu với các tiêu đề và proxy
response = requests.get(url, headers=headers, proxies=proxies)
response.raise_for_status() # Ensure we got a valid response
# Phân tích nội dung HTML bằng LXML
parser = fromstring(response.text)
# Trích xuất dữ liệu bằng cách sử dụng XPath
title = ' '.join(parser.xpath('//h1[@class="Text-c11n-8-99-3__sc-aiai24-0 dFxMdJ"]/text()'))
rent_estimate_price = parser.xpath('//span[@class="Text-c11n-8-99-3__sc-aiai24-0 dFhjAe"]//text()')[-2]
assessment_price = parser.xpath('//span[@class="Text-c11n-8-99-3__sc-aiai24-0 dFhjAe"]//text()')[-1]
# Lưu trữ dữ liệu được trích xuất trong một từ điển
property_data = {
'title': title,
'Rent estimate price': rent_estimate_price,
'Assessment price': assessment_price
}
# Nối dữ liệu tài sản vào danh sách
all_properties.append(property_data)Mã đầy đủ
Dưới đây là mã hoàn chỉnh để cạo dữ liệu thuộc tính Zvel và lưu vào tệp JSON:
import requests
from lxml.html import fromstring
import json
# Xác định URL mục tiêu cho danh sách tài sản Zvel
urls = [
"https://www.zillow.com/homedetails/1234-Main-St-Some-City-CA-90210/12345678_zpid/",
"https://www.zillow.com/homedetails/5678-Another-St-Some-City-CA-90210/87654321_zpid/"
]
# Thiết lập các tiêu đề yêu cầu để bắt chước yêu cầu trình duyệt
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-US,en;q=0.9',
'cache-control': 'no-cache',
'dnt': '1',
'pragma': 'no-cache',
'sec-ch-ua': '"Not/A)Brand";v="99", "Google Chrome";v="91", "Chromium";v="91"',
'sec-ch-ua-mobile': '?0',
'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/91.0.4472.124 Safari/537.36',
}
# Tùy chọn, thiết lập proxy để tránh chặn IP
proxies = {
'http': 'http://username:password@your_proxy_address',
'https': 'https://username:password@your_proxy_address',
}
# Liệt kê để lưu trữ dữ liệu cho tất cả các thuộc tính
all_properties = []
for url in urls:
try:
# Gửi HTTP Nhận yêu cầu với các tiêu đề và proxy
response = requests.get(url, headers=headers, proxies=proxies)
response.raise_for_status() # Ensure we got a valid response
# Phân tích nội dung HTML bằng LXML
parser = fromstring(response.text)
# Trích xuất dữ liệu bằng cách sử dụng XPath
title = ' '.join(parser.xpath('//h1[@class="Text-c11n-8-99-3__sc-aiai24-0 dFxMdJ"]/text()'))
rent_estimate_price = parser.xpath('//span[@class="Text-c11n-8-99-3__sc-aiai24-0 dFhjAe"]//text()')[-2]
assessment_price = parser.xpath('//span[@class="Text-c11n-8-99-3__sc-aiai24-0 dFhjAe"]//text()')[-1]
# Lưu trữ dữ liệu được trích xuất trong một từ điển
property_data = {
'title': title,
'Rent estimate price': rent_estimate_price,
'Assessment price': assessment_price
}
# Nối dữ liệu tài sản vào danh sách
all_properties.append(property_data)
except requests.exceptions.HTTPError as e:
print(f"HTTP error occurred: {e}")
except requests.exceptions.RequestException as e:
print(f"An error occurred: {e}")
# Xác định tên tệp JSON đầu ra
output_file = 'zillow_properties.json'
# Mở tệp ở chế độ ghi và đổ dữ liệu
with open(output_file, 'w') as f:
json.dump(all_properties, f, indent=4)
print(f"Scraped data saved to {output_file}")Bằng cách hiểu cấu trúc của các trang HTML và tận dụng các thư viện mạnh mẽ như yêu cầu và LXML, bạn có thể trích xuất chi tiết thuộc tính một cách hiệu quả. Sử dụng các proxy và xoay các tác nhân người dùng cho phép bạn thực hiện một khối lượng lớn các yêu cầu đến các trang web như Zvel mà không có nguy cơ bị chặn. Đối với các hoạt động này, các proxy ISP tĩnh hoặc các proxy dân cư xoay được coi là lựa chọn tối ưu.
