Panduan untuk Mengikis Craigslist dengan Python

Komentar: 0

Craigslist masih merupakan platform yang signifikan untuk mengakses iklan rahasia tertentu dalam adegan digital saat ini. Menggunakan Python dalam merampingkan detail ekstraksi dari iklan terbukti sangat membantu. Operasi pengikisan web yang produktif diaktifkan oleh kemampuan beradaptasi dan perpustakaan yang kuat di Python seperti permintaan atau cantik. Panduan ini menggali ke ranah craigslist mengikis dengan Python, menyoroti pemanfaatan indah dan permintaan ekstraksi konten, di samping rotasi proxy untuk menavigasi pertahanan anti-bot secara efektif.

Langkah Dasar untuk Mengikis Craigslist dengan Python

Selanjutnya, kita akan melalui proses pengikisan langkah demi langkah, dimulai dengan mengirim permintaan HTTP dan mengekstraksi elemen halaman tertentu, dan menyelesaikan dengan menyimpan data dalam format yang diperlukan.

Menyiapkan lingkungan Anda

Anda harus menginstal pustaka yang diperlukan:


pip install beautifulsoup4
pip install requests

Mengirim permintaan http ke halaman craigslist

Gunakan Perpustakaan Permintaan untuk mengirim permintaan HTTP Get ke halaman daftar craigslist.


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}")

Parsing konten html dengan cantik

Gunakan Beautifulsoup untuk parsing html dan menavigasi melalui konten yang diambil.


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}")

Mengekstraksi Data Menggunakan Metode Beautiful

Ekstrak data seperti judul item dan harga dari daftar craigslist menggunakan metode indah.


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

Keterangan:

3.png

Menyimpan data tergores ke file CSV

Setelah data diekstraksi, simpan ke file CSV untuk analisis atau integrasi lebih lanjut dengan alat 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}")

Menangani penghalang jalan potensial

Craigslist dapat menerapkan langkah -langkah untuk mencegah pengikisan, seperti pemblokiran IP atau tantangan CAPTCHA. Untuk mengurangi masalah ini, pertimbangkan untuk menggunakan proxy dan berputar agen pengguna.

Menggunakan proxy:

Contoh ini menunjukkan penggunaan proxy dengan otorisasi alamat IP.


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:


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

Skrip python lengkap ini menunjukkan cara mengintegrasikan komponen yang berbeda untuk membangun scraper craigslist yang efisien yang mengekstrak, parse, dan mengambil data dari beberapa 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()


# 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}")

Craigslist penting karena menyediakan tempat di mana kami dapat menemukan iklan rahasia yang memberi kami informasi yang berguna untuk memeriksa pasar, menemukan arahan di antara yang lain. Pengikisan web Craigslist menjadi mudah oleh Python menggunakan perpustakaan seperti cantik dan permintaan. Taktik utama yang dibahas dalam tutorial ini adalah menangani konten dinamis dan proxy berputar. Dengan memanfaatkan Python secara bertanggung jawab, Anda dapat mengekstraksi wawasan yang dapat ditindaklanjuti dari daftar Craigslist, mendukung pengambilan keputusan berdasarkan informasi di berbagai domain.

Komentar:

0 komentar