Hướng dẫn cạo craigslist với Python

Bình luận: 0

Craigslist vẫn là một nền tảng quan trọng để truy cập các quảng cáo được phân loại cụ thể trong bối cảnh kỹ thuật số hiện tại. Sử dụng Python trong việc giới thiệu chi tiết về chi tiết từ quảng cáo chứng tỏ rất hữu ích. Các hoạt động cạo web năng suất được kích hoạt bởi khả năng thích ứng và các thư viện mạnh trong Python như yêu cầu hoặc BeautifulSoup. Hướng dẫn này đi sâu vào vương quốc của craigslist cào bằng python, nêu bật việc sử dụng đẹp và yêu cầu trích xuất nội dung, cùng với vòng quay proxy để điều hướng phòng thủ chống BOT một cách hiệu quả.

Các bước cơ bản để cạo craigslist bằng python

Tiếp theo, chúng tôi sẽ trải qua quá trình cạo từng bước, bắt đầu bằng việc gửi các yêu cầu HTTP và trích xuất các yếu tố trang cụ thể và hoàn thiện với việc lưu dữ liệu theo định dạng cần thiết.

Thiết lập môi trường của bạn

Bạn sẽ cần cài đặt các thư viện cần thiết:


pip install beautifulsoup4
pip install requests

Gửi các yêu cầu HTTP đến các trang Craigslist

Sử dụng thư viện yêu cầu để gửi HTTP Nhận yêu cầu đến các trang liệt kê Craigslist.


import requests

# Danh sách các url craigslist để cạo
urls = [
    "link",
    "link"
]

for url in urls:
    # Gửi yêu cầu nhận đến URL
    response = requests.get(url)
    
    # Kiểm tra xem yêu cầu có thành công không (mã trạng thái 200)
    if response.status_code == 200:
        # Trích xuất nội dung HTML từ phản hồi
        html_content = response.text
        
    else:
        # Nếu yêu cầu không thành công, hãy in thông báo lỗi bằng mã trạng thái
        print(f"Failed to retrieve {url}. Status code: {response.status_code}")

Phân tích nội dung HTML với BeautifulSoup

Sử dụng BeautifulSoup để phân tích cú pháp HTML và điều hướng qua nội dung được truy xuất.


from bs4 import BeautifulSoup

# Lặp lại thông qua từng url trong danh sách
for url in urls:
    # Gửi yêu cầu nhận đến URL
    response = requests.get(url)
    
    # Kiểm tra xem yêu cầu có thành công không (mã trạng thái 200)
    if response.status_code == 200:
        # Trích xuất nội dung HTML từ phản hồi
        html_content = response.text
        
        # Phân tích nội dung HTML bằng cách sử dụng đẹp
        soup = BeautifulSoup(html_content, 'html.parser')
        
    else:
        # Nếu yêu cầu không thành công, hãy in thông báo lỗi bằng mã trạng thái
        print(f"Failed to retrieve {url}. Status code: {response.status_code}")

Trích xuất dữ liệu bằng các phương thức đẹp

Trích xuất dữ liệu như tiêu đề mục và giá từ danh sách Craigslist bằng các phương thức đẹp.


from bs4 import BeautifulSoup

# Lặp lại thông qua từng url trong danh sách
for url in urls:
    # Gửi yêu cầu nhận đến URL
    response = requests.get(url)
    
    # Kiểm tra xem yêu cầu có thành công không (mã trạng thái 200)
    if response.status_code == 200:
        # Trích xuất nội dung HTML từ phản hồi
        html_content = response.text
        
        # Phân tích nội dung HTML bằng cách sử dụng đẹp
        soup = BeautifulSoup(html_content, 'html.parser')
        
        # Trích xuất các điểm dữ liệu cụ thể
        # Tìm tiêu đề của danh sách
        title = soup.find('span', id='titletextonly').text.strip()
        
        # Tìm giá của danh sách
        price = soup.find('span', class_='price').text.strip()
        
        # Tìm mô tả về danh sách (có thể chứa nhiều đoạn văn)
        description = soup.find('section', id='postingbody').find_all(text=True, recursive=False)
        
        # In dữ liệu được trích xuất (cho mục đích trình diễn)
        print(f"Title: {title}")
        print(f"Price: {price}")
        print(f"Description: {description}")
        
    else:
        # Nếu yêu cầu không thành công, hãy in thông báo lỗi bằng mã trạng thái
        print(f"Failed to retrieve {url}. Status code: {response.status_code}")

Tiêu đề:

1.png

Giá:

2.png

Sự miêu tả:

3.png

Lưu dữ liệu được quét vào tệp CSV

Khi dữ liệu được trích xuất, hãy lưu nó vào tệp CSV để phân tích hoặc tích hợp thêm với các công cụ khác.


import csv

# Xác định đường dẫn tệp CSV và tên trường
csv_file = 'craigslist_data.csv'
fieldnames = ['Title', 'Price', 'Description']

# Viết dữ liệu vào tệp CSV
try:
    # Mở tệp CSV ở chế độ ghi bằng mã hóa UTF-8
    with open(csv_file, mode='w', newline='', encoding='utf-8') as file:
        # Tạo một đối tượng CSV Dictwriter với các tên trường được chỉ định
        writer = csv.DictWriter(file, fieldnames=fieldnames)
        
        # Viết hàng tiêu đề trong tệp CSV
        writer.writeheader()
        
        # Lặp lại thông qua từng mục trong danh sách Scraped_data
        for item in scraped_data:
            # Viết từng mục dưới dạng một hàng trong tệp CSV
            writer.writerow(item)
        
    # In tin nhắn thành công sau khi ghi dữ liệu vào tệp CSV
    print(f"Data saved to {csv_file}")

except IOError:
    # In một thông báo lỗi nếu ioRror xảy ra trong khi ghi vào tệp CSV
    print(f"Error occurred while writing data to {csv_file}")

Xử lý các rào cản tiềm năng

Craigslist có thể thực hiện các biện pháp để ngăn chặn việc cạo, chẳng hạn như chặn IP hoặc các thách thức CAPTCHA. Để giảm thiểu các vấn đề này, hãy xem xét sử dụng proxy và các tác nhân người dùng xoay.

Sử dụng proxy:

Ví dụ này cho thấy việc sử dụng proxy với ủy quyền địa chỉ IP.


proxies = {
    'http': 'http://your_proxy_ip:your_proxy_port',
    'https': 'https://your_proxy_ip:your_proxy_port'
}

response = requests.get(url, proxies=proxies)

Xoay người dùng-tác nhân:


import random

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 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
    # Thêm nhiều đại lý người dùng khi cần thiết
]

headers = {
    'User-Agent': random.choice(user_agents)
}

response = requests.get(url, headers=headers)

Mã đầy đủ

Tập lệnh Python hoàn chỉnh này cho thấy cách tích hợp các thành phần khác nhau để xây dựng một craigslist craper hiệu quả, trích xuất, phân tích cú pháp và lấy dữ liệu từ nhiều URL.


import requests
import urllib3
from bs4 import BeautifulSoup
import csv
import random
import ssl

ssl._create_default_https_context = ssl._create_stdlib_context
urllib3.disable_warnings()


# Danh sách các url craigslist để cạo
urls = [
    "link",
    "link"
]

# Đại lý người dùng và proxy
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 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
]

proxies = [
    {'http': 'http://your_proxy_ip1:your_proxy_port1', 'https': 'https://your_proxy_ip1:your_proxy_port1'},
    {'http': 'http://your_proxy_ip2:your_proxy_port2', 'https': 'https://your_proxy_ip2:your_proxy_port2'},
]

# Liệt kê để lưu trữ dữ liệu cào
scraped_data = []

# Vòng lặp qua từng URL trong danh sách
for url in urls:
    # Xoay đại lý người dùng cho mỗi yêu cầu để tránh phát hiện
    headers = {
        'User-Agent': random.choice(user_agents)
    }

    # Sử dụng một proxy khác nhau cho mỗi yêu cầu để tránh chặn IP
    proxy = random.choice(proxies)

    try:
        # Gửi yêu cầu đến URL Craigslist với các tiêu đề và proxy
        response = requests.get(url, headers=headers, proxies=proxy, timeout=30, verify=False)
        
        # Kiểm tra xem yêu cầu có thành công không (mã trạng thái 200)
        if response.status_code == 200:
            # Nội dung phân tích HTML của phản hồi
            html_content = response.text
            soup = BeautifulSoup(html_content, 'html.parser')

            # Trích xuất dữ liệu từ HTML phân tích cú pháp
            title = soup.find('span', id='titletextonly').text.strip()
            price = soup.find('span', class_='price').text.strip()
            description = soup.find('section', id='postingbody').get_text(strip=True, separator='\n')  # Trích xuất mô tả

            # Nối dữ liệu được quét dưới dạng từ điển vào danh sách
            scraped_data.append({'Title': title, 'Price': price, 'Description': description})
            print(f"Data scraped for {url}")
        else:
            # In thông báo lỗi nếu yêu cầu không thành công
            print(f"Failed to retrieve {url}. Status code: {response.status_code}")
    except Exception as e:
        # In tin nhắn ngoại lệ nếu xảy ra lỗi trong quá trình cạo
        print(f"Exception occurred while scraping {url}: {str(e)}")

# Thiết lập tệp CSV để lưu trữ dữ liệu đã quét
csv_file = 'craigslist_data.csv'
fieldnames = ['Title', 'Price', 'Description']

# Viết dữ liệu được quét vào tệp CSV
try:
    with open(csv_file, mode='w', newline='', encoding='utf-8') as file:
        writer = csv.DictWriter(file, fieldnames=fieldnames)

        # Viết hàng tiêu đề trong tệp CSV
        writer.writeheader()

        # Lặp lại thông qua danh sách Scraped_data và ghi từng mục vào tệp CSV
        for item in scraped_data:
            writer.writerow(item)

    # In tin nhắn thành công nếu dữ liệu được lưu thành công
    print(f"Data saved to {csv_file}")
except IOError:
    # In thông báo lỗi nếu có ioerror trong khi ghi vào tệp csv
    print(f"Error occurred while writing data to {csv_file}")

Craigslist rất quan trọng vì nó cung cấp một nơi mà chúng ta có thể tìm thấy quảng cáo được phân loại cung cấp cho chúng ta thông tin hữu ích để kiểm tra thị trường, tìm kiếm khách hàng tiềm năng giữa những người khác. Craigslist Scraping được thực hiện dễ dàng bằng cách sử dụng các thư viện như BeautifulSoup và Request. Các chiến thuật chính được thảo luận trong hướng dẫn này là xử lý nội dung động và các proxy xoay. Bằng cách tận dụng Python một cách có trách nhiệm, bạn có thể trích xuất những hiểu biết có thể hành động từ các danh sách Craigslist, hỗ trợ việc ra quyết định sáng suốt trên các lĩnh vực khác nhau.

Bình luận:

0 Bình luận