Mengikis Craigslist dengan Python: Panduan Lengkap

Komentar: 0

Platform iklan seperti Craigslist tetap relevan di era digital. Pengumpul membantu mengotomatiskan ekstraksi informasi dari iklan, terutama dengan mendapatkan data langsung dari situs web. Berkat pustaka yang fleksibel dan kuat seperti BeautifulSoup dan Requests, pengumpulan data dapat dilakukan secara efisien. Tutorial ini berfokus pada scraping craigslist dengan python, menyoroti BeautifulSoup, Requests, dan rotasi proxy untuk menghindari deteksi bot.

Sekarang, kami akan menjelaskan cara mengikis Craigslist selangkah demi selangkah.

Langkah-langkah Dasar untuk Mengikis Data Craigslist dengan Python

Sekarang, kita akan membahas langkah-langkah web scraping Craigslist secara lebih rinci mulai dari mengirim permintaan HTTP ke halaman web tertentu, membagi halaman yang diperlukan, mengumpulkan data yang diinginkan dan menyimpannya dalam format yang telah ditentukan.

Menyiapkan Lingkungan Anda

Paket-paket berikut ini harus diunduh dan diinstal:


pip install beautifulsoup4
pip install requests

Mengirim Permintaan HTTP ke Halaman Craigslist

Untuk mengambil data dari halaman web, pertama-tama Anda harus mengirim permintaan HTTP ke URL yang ingin Anda kikis. Dengan menggunakan pustaka permintaan, Anda dapat mengirim permintaan GET untuk mengambil konten HTML, yang kemudian dapat Anda proses untuk mengekstrak informasi yang Anda butuhkan.


import requests

# Daftar URL Craigslist untuk Mengikis
urls = [
    "link",
    "link"
]

for url in urls:
    # Kirim permintaan mendapatkan ke URL
    response = requests.get(url)
    
    # Periksa apakah permintaan berhasil (kode status 200)
    if response.status_code == 200:
        # Ekstrak konten HTML dari respons
        html_content = response.text
        
    else:
        # Jika permintaan gagal, cetak pesan kesalahan dengan kode status
        print(f"Failed to retrieve {url}. Status code: {response.status_code}")

Mengurai konten HTML menggunakan BeautifulSoup

Dengan BeautifulSoup, Anda bisa menelusuri HTML dan memilih bagian yang Anda butuhkan dari Craigslist. Aplikasi ini memungkinkan Anda menemukan tag, mendapatkan teks, dan mengambil hal-hal seperti tautan atau harga. Ini adalah cara yang sederhana untuk mengambil informasi yang berguna dari halaman web yang berantakan.


from bs4 import BeautifulSoup

# Iterasi melalui setiap URL dalam daftar
for url in urls:
    # Kirim permintaan mendapatkan ke URL
    response = requests.get(url)
    
    # Periksa apakah permintaan berhasil (kode status 200)
    if response.status_code == 200:
        # Ekstrak konten HTML dari respons
        html_content = response.text
        
        # Parse konten html menggunakan cantik
        soup = BeautifulSoup(html_content, 'html.parser')
        
    else:
        # Jika permintaan gagal, cetak pesan kesalahan dengan kode status
        print(f"Failed to retrieve {url}. Status code: {response.status_code}")

Memanen Data Dengan Perpustakaan BeautifulSoup

Setelah mengambil konten HTML, langkah selanjutnya adalah menguraikannya menggunakan pustaka BeautifulSoup. Dengan menggunakan fungsi-fungsi, kami melakukan pengikisan data Craigslist seperti daftar seperti judul dan harga barang. Ini seperti memiliki alat yang membantu Anda menyaring kode yang berantakan untuk menemukan bagian yang berguna dengan cepat dan efisien.


from bs4 import BeautifulSoup

# Iterasi melalui setiap URL dalam daftar
for url in urls:
    # Kirim permintaan mendapatkan ke URL
    response = requests.get(url)
    
    # Periksa apakah permintaan berhasil (kode status 200)
    if response.status_code == 200:
        # Ekstrak konten HTML dari respons
        html_content = response.text
        
        # Parse konten html menggunakan cantik
        soup = BeautifulSoup(html_content, 'html.parser')
        
        # Mengekstraksi titik data tertentu
        # Temukan judul daftar
        title = soup.find('span', id='titletextonly').text.strip()
        
        # Temukan harga daftar
        price = soup.find('span', class_='price').text.strip()
        
        # Temukan deskripsi daftar (dapat berisi beberapa paragraf)
        description = soup.find('section', id='postingbody').find_all(text=True, recursive=False)
        
        # Cetak data yang diekstraksi (untuk tujuan demonstrasi)
        print(f"Title: {title}")
        print(f"Price: {price}")
        print(f"Description: {description}")
        
    else:
        #Jika permintaan gagal, cetak pesan kesalahan dengan kode status
        print(f"Failed to retrieve {url}. Status code: {response.status_code}")

Judul:

1.png

Harga:

2.png

Deskripsi:

3.png

Menyimpan Data yang Dikikis ke File CSV

Setelah kami mengekstrak data Craigslist, pastikan data tersebut disimpan dalam format CSV untuk memudahkan penggunaan atau analisis di masa mendatang dan untuk interoperabilitas dengan aplikasi lain.


import csv

# Tentukan jalur file CSV dan nama bidang
csv_file = 'craigslist_data.csv'
fieldnames = ['Title', 'Price', 'Description']

# Menulis data ke file CSV
try:
    # Buka file CSV dalam mode tulis dengan pengkodean UTF-8
    with open(csv_file, mode='w', newline='', encoding='utf-8') as file:
        # Buat objek Diktwriter CSV dengan FieldNames yang ditentukan
        writer = csv.DictWriter(file, fieldnames=fieldnames)
        
        # Tulis baris header di file CSV
        writer.writeheader()
        
        # Iterasi melalui setiap item dalam daftar scraped_data
        for item in scraped_data:
            # Tulis setiap item sebagai baris dalam file CSV
            writer.writerow(item)
        
    # Cetak Pesan Sukses Setelah Menulis Data ke File CSV
    print(f"Data saved to {csv_file}")

except IOError:
    # Cetak pesan kesalahan jika IoError terjadi saat menulis ke file CSV
    print(f"Error occurred while writing data to {csv_file}")

Cara menggunakan Craigslist Api Python

Jika Anda ingin mengumpulkan daftar secara otomatis dari situs web Craigslist, salah satu cara termudah adalah dengan menggunakan API tidak resmi melalui perpustakaan. Ini memungkinkan Anda melakukan kueri pada situs, memfilter hasil berdasarkan kategori, kota, harga, kata kunci, dan banyak lagi.

Mulailah dengan menginstal perpustakaan:


pip install python-craigslist


Berikut contoh sederhana untuk mencari sewa apartemen di New York:


from craigslist import CraigslistHousing

cl_h = CraigslistHousing(site='newyork', category='apa', filters={'max_price': 2000})
for result in cl_h.get_results(limit=10):
    print(result['name'], result['price'], result['url'])

Kode ini mengambil 10 daftar pertama dari bagian apartemen/rumah untuk disewakan di New York City yang harganya di bawah $2000.

Pustaka ini juga mendukung kategori seperti pekerjaan, mobil, barang yang dijual, dan banyak lagi - bersama dengan berbagai macam filter. Ini adalah alat yang hebat untuk membangun alat berbasis Python dengan cepat, seperti bot, pelacak daftar, atau analisis pasar.

Menangani Hambatan Potensial

Ada sejumlah tantangan tambahan yang mungkin dihadapi ketika melakukan web scraping, terutama dengan Craigslist. Layanan ini mengimplementasikan blok IP dan tantangan CAPTCHA untuk mencegah upaya penguraian. Untuk menghindari masalah ini, Anda bisa mengimplementasikan proksi bersamaan dengan rotasi agen pengguna.

Menggunakan proxy:

Menggunakan proksi dan merotasi agen-pengguna secara bersamaan adalah cara yang cerdas untuk terus melakukan scraping tanpa ketahuan.


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

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

Rotasi agen-pengguna berarti mengubah identitas peramban yang dikirim scraper Anda dengan setiap permintaan. Jika Anda selalu menggunakan agen-pengguna yang sama, maka akan terlihat mencurigakan. Beralih di antara agen-pengguna yang berbeda membuat scraper Anda terlihat seperti pengguna normal, sehingga membantu menghindari pemblokiran:


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',
    # Tambahkan lebih banyak agen pengguna sesuai kebutuhan
]

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

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

Kode Lengkap

Dengan mengintegrasikan semua modul yang dibahas dalam tutorial ini, Anda dapat mengembangkan scraper Craigslist Python yang berfungsi penuh. Program ini dapat mengekstrak, mengurai, dan menavigasi sejumlah URL dan mengambil data yang dibutuhkan.


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()


# Daftar URL Craigslist untuk Mengikis
urls = [
    "link",
    "link"
]

# Agen dan proksi pengguna
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'},
]

# Daftar untuk menyimpan data yang tergores
scraped_data = []

# Lingkari setiap URL dalam daftar
for url in urls:
    # Putar agen pengguna untuk setiap permintaan untuk menghindari deteksi
    headers = {
        'User-Agent': random.choice(user_agents)
    }

    # Gunakan proxy yang berbeda untuk setiap permintaan untuk menghindari pemblokiran IP
    proxy = random.choice(proxies)

    try:
        # Kirimkan permintaan ke URL Craigslist dengan header dan proxy
        response = requests.get(url, headers=headers, proxies=proxy, timeout=30, verify=False)
        
        # Periksa apakah permintaan berhasil (kode status 200)
        if response.status_code == 200:
            # Parse konten html dari respons
            html_content = response.text
            soup = BeautifulSoup(html_content, 'html.parser')

            # Ekstrak data dari HTML yang diuraikan
            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')  # Mengekstraksi deskripsi

            # Tambahkan data tergores sebagai kamus ke daftar
            scraped_data.append({'Title': title, 'Price': price, 'Description': description})
            print(f"Data scraped for {url}")
        else:
            # Cetak pesan kesalahan jika permintaan gagal
            print(f"Failed to retrieve {url}. Status code: {response.status_code}")
    except Exception as e:
        # Cetak pesan pengecualian jika terjadi kesalahan selama pengikisan
        print(f"Exception occurred while scraping {url}: {str(e)}")

# Pengaturan File CSV Untuk Menyimpan Data Tergores
csv_file = 'craigslist_data.csv'
fieldnames = ['Title', 'Price', 'Description']

# Menulis data yang tergores ke file CSV
try:
    with open(csv_file, mode='w', newline='', encoding='utf-8') as file:
        writer = csv.DictWriter(file, fieldnames=fieldnames)

        # Tulis baris header di file csv
        writer.writeheader()

        # Iterasi melalui daftar scraped_data dan tulis setiap item ke file CSV
        for item in scraped_data:
            writer.writerow(item)

    # Cetak Pesan Sukses Jika data disimpan dengan sukses
    print(f"Data saved to {csv_file}")
except IOError:
    # Cetak Pesan Kesalahan Jika ada IoError saat menulis ke file CSV
    print(f"Error occurred while writing data to {csv_file}")

Scraping Craigslist dengan Python: Pemikiran Akhir

Sekarang setelah Anda memahami cara kerja web scraping, mudah untuk melihat mengapa hal ini sangat berguna - apakah Anda menganalisis pasar atau berburu prospek. Situs web penuh dengan informasi berharga, dan peralatan seperti BeautifulSoup dan Requests membuat pengambilan data tersebut menjadi sangat sederhana. Panduan ini juga membahas tips penting, seperti menangani konten dinamis dan menggunakan proxy yang berputar untuk tetap berada di bawah radar. Jika dilakukan dengan benar, scraping dengan Python benar-benar dapat membantu bisnis dan orang-orang membuat keputusan yang lebih cerdas di segala bidang.

Komentar:

0 komentar