파이썬으로 Craigslist를 긁어내는 안내서

댓글: 0

Craigslist는 여전히 현재 디지털 장면에서 특정 분류 광고에 액세스하기위한 중요한 플랫폼입니다. 광고에서 세부 사항 추출을 간소화하는 데 Python을 사용하는 것이 매우 유용합니다. 생산적인 웹 스크래핑 작업은 요청 또는 BeautifulSoup과 같은 파이썬의 적응성 및 강력한 라이브러리에 의해 활성화됩니다. 이 안내서는 Python으로 Craigslist 스크래핑 영역을 탐구하여 BeautifulSoup의 활용과 콘텐츠 추출 요청을 강조하고 프록시 회전과 함께 안티 봇 방어를 효과적으로 탐색합니다.

Python

로 Craigslist를 긁는 기본 단계

다음으로, HTTP 요청을 보내고 특정 페이지 요소를 추출하고 필요한 형식으로 데이터를 저장하여 마무리하면서 스크래핑 프로세스를 단계별로 살펴 보겠습니다.

환경 설정

필요한 라이브러리를 설치해야합니다.


pip install beautifulsoup4
pip install requests

Craigslist 페이지에 HTTP 요청을 보내는

요청 라이브러리를 사용하여 HTTP GET 요청을 Craigslist 목록 페이지로 보냅니다.


import requests

# Craigslist URL 목록 스크랩
urls = [
    "link",
    "link"
]

for url in urls:
    # URL에 GET 요청을 보내십시오
    response = requests.get(url)
    
    # 요청이 성공했는지 확인하십시오 (상태 코드 200)
    if response.status_code == 200:
        # 응답에서 HTML 컨텐츠를 추출하십시오
        html_content = response.text
        
    else:
        #요청에 실패한 경우 상태 코드로 오류 메시지를 인쇄합니다.
        print(f"Failed to retrieve {url}. Status code: {response.status_code}")

BeautifulSoup과 함께 HTML 컨텐츠를 구문 분석합니다

검색된 컨텐츠를 통해 HTML 구문 분석 및 탐색에 BeautifulSoup을 사용하십시오.


from bs4 import BeautifulSoup

# 목록의 각 URL을 반복하십시오
for url in urls:
    # URL에 GET 요청을 보내십시오
    response = requests.get(url)
    
    # 요청이 성공했는지 확인하십시오 (상태 코드 200)
    if response.status_code == 200:
        # 응답에서 HTML 컨텐츠를 추출하십시오
        html_content = response.text
        
        # BeautifulSoup을 사용하여 HTML 컨텐츠를 구문 분석하십시오
        soup = BeautifulSoup(html_content, 'html.parser')
        
    else:
        # 요청에 실패한 경우 상태 코드로 오류 메시지를 인쇄합니다.
        print(f"Failed to retrieve {url}. Status code: {response.status_code}")

BeautifulSoup 방법을 사용하여 데이터 추출

BeautifulSoup 방법을 사용하여 Craigslist 목록에서 항목 제목 및 가격과 같은 데이터를 추출합니다.


from bs4 import BeautifulSoup

# 목록의 각 URL을 반복하십시오
for url in urls:
    # URL에 GET 요청을 보내십시오
    response = requests.get(url)
    
    # 요청이 성공했는지 확인하십시오 (상태 코드 200)
    if response.status_code == 200:
        # 응답에서 HTML 컨텐츠를 추출하십시오
        html_content = response.text
        
        # BeautifulSoup을 사용하여 HTML 컨텐츠를 구문 분석하십시오
        soup = BeautifulSoup(html_content, 'html.parser')
        
        # 특정 데이터 포인트 추출
        # 목록의 제목을 찾으십시오
        title = soup.find('span', id='titletextonly').text.strip()
        
        # 목록의 가격을 찾으십시오
        price = soup.find('span', class_='price').text.strip()
        
        # 목록에 대한 설명을 찾으십시오 (여러 단락이 포함될 수 있음)
        description = soup.find('section', id='postingbody').find_all(text=True, recursive=False)
        
        # 추출 된 데이터 인쇄 (데모 목적)
        print(f"Title: {title}")
        print(f"Price: {price}")
        print(f"Description: {description}")
        
    else:
        # 요청이 실패하면 상태 코드로 오류 메시지를 인쇄합니다.
        print(f"Failed to retrieve {url}. Status code: {response.status_code}")

제목:

1.png

가격:

2.png

설명:

3.png

스크랩 된 데이터 저장 CSV 파일

데이터가 추출되면 추가 분석 또는 다른 도구와의 통합을 위해 CSV 파일에 저장하십시오.


import csv

# CSV 파일 경로 및 필드 이름을 정의하십시오
csv_file = 'craigslist_data.csv'
fieldnames = ['Title', 'Price', 'Description']

# CSV 파일에 데이터를 작성합니다
try:
    # UTF-8 인코딩으로 쓰기 모드에서 CSV 파일을 엽니 다.
    with open(csv_file, mode='w', newline='', encoding='utf-8') as file:
        # 지정된 필드 이름으로 CSV DictWriter 객체를 만듭니다
        writer = csv.DictWriter(file, fieldnames=fieldnames)
        
        # CSV 파일에 헤더 행을 씁니다
        writer.writeheader()
        
        # Scraped_Data 목록의 각 항목을 반복하십시오
        for item in scraped_data:
            # CSV 파일에서 각 항목을 행으로 작성하십시오.
            writer.writerow(item)
        
    # CSV 파일에 데이터를 작성한 후 성공 메시지 인쇄
    print(f"Data saved to {csv_file}")

except IOError:
    # CSV 파일에 쓰는 동안 ioerror가 발생하는 경우 오류 메시지 인쇄
    print(f"Error occurred while writing data to {csv_file}")

잠재적 장애물 처리

Craigslist는 IP 차단 또는 보안 문자 문제와 같은 스크래핑을 방지하기위한 조치를 구현할 수 있습니다. 이러한 문제를 완화하려면 프록시 및 회전 사용자 에이전트 사용을 고려하십시오.

프록시 사용 :

이 예제는 IP 주소 인증이있는 프록시 사용을 보여줍니다.


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

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

사용자 에이전트 회전 :


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',
    # 필요에 따라 더 많은 사용자 에이전트를 추가하십시오
]

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

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

전체 코드

이 완전한 Python 스크립트는 다양한 구성 요소를 통합하여 여러 URL에서 데이터를 추출, 구문 분석 및 검색하는 효율적인 Craigslist 스크레이퍼를 구축하는 방법을 보여줍니다.


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


# Craigslist URL 목록 스크랩
urls = [
    "link",
    "link"
]

# 사용자 에이전트 및 프록시
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'},
]

# 스크랩 된 데이터를 저장하려면 목록
scraped_data = []

# 목록의 각 URL을 루프하십시오
for url in urls:
    # 탐지를 피하기 위해 각 요청에 대해 사용자 에이전트를 회전시킵니다
    headers = {
        'User-Agent': random.choice(user_agents)
    }

    # IP 차단을 피하려면 각 요청마다 다른 프록시를 사용하십시오.
    proxy = random.choice(proxies)

    try:
        # 헤더 및 프록시를 사용하여 Craigslist URL에 요청을 보내십시오.
        response = requests.get(url, headers=headers, proxies=proxy, timeout=30, verify=False)
        
        # 요청이 성공했는지 확인하십시오 (상태 코드 200)
        if response.status_code == 200:
            # 응답의 HTML 컨텐츠를 구문 분석합니다
            html_content = response.text
            soup = BeautifulSoup(html_content, 'html.parser')

            # 구문 분석 HTML에서 데이터를 추출합니다
            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')  # 설명 추출

            # 스크랩 된 데이터를 목록의 사전으로 추가하십시오
            scraped_data.append({'Title': title, 'Price': price, 'Description': description})
            print(f"Data scraped for {url}")
        else:
            # 요청이 실패하면 오류 메시지를 인쇄하십시오
            print(f"Failed to retrieve {url}. Status code: {response.status_code}")
    except Exception as e:
        # 스크래핑 중에 오류가 발생하면 예외 메시지를 인쇄하십시오
        print(f"Exception occurred while scraping {url}: {str(e)}")

# 스크랩 된 데이터 저장을위한 CSV 파일 설정
csv_file = 'craigslist_data.csv'
fieldnames = ['Title', 'Price', 'Description']

# CSV 파일에 스크랩 된 데이터를 작성합니다
try:
    with open(csv_file, mode='w', newline='', encoding='utf-8') as file:
        writer = csv.DictWriter(file, fieldnames=fieldnames)

        # CSV 파일에 헤더 행을 쓰십시오
        writer.writeheader()

        # scraped_data 목록을 통해 반복하고 각 항목을 CSV 파일에 작성하십시오.
        for item in scraped_data:
            writer.writerow(item)

    # 데이터가 성공적으로 저장되면 성공 메시지를 인쇄하십시오
    print(f"Data saved to {csv_file}")
except IOError:
    # CSV 파일에 쓰는 동안 ioerror가있는 경우 오류 메시지 인쇄
    print(f"Error occurred while writing data to {csv_file}")

Craigslist는 시장을 검사하는 데 유용한 정보를 제공하는 분류 된 광고를 찾을 수있는 장소를 제공하기 때문에 중요합니다. Craigslist 웹 스크래핑은 BeautifulSoup 및 요청과 같은 라이브러리를 사용하여 Python에 의해 쉽게 만들어집니다. 이 튜토리얼에서 논의 된 주요 전술은 동적 컨텐츠와 회전 프록시를 처리하는 것입니다. Python을 책임감있게 활용하면 Craigslist 목록에서 실행 가능한 통찰력을 추출하여 다양한 도메인에서 정보에 입각 한 의사 결정을 지원할 수 있습니다.

댓글:

0 댓글