Craigslist와 같은 광고 플랫폼은 디지털 시대에도 여전히 관련성이 높습니다. 수집기는 특히 웹사이트에서 직접 데이터를 가져와 광고에서 정보를 자동으로 추출하는 데 도움을 줍니다. BeautifulSoup 및 Requests와 같은 유연하고 강력한 라이브러리 덕분에 데이터 수집을 효율적으로 수행할 수 있습니다. 이 튜토리얼에서는 파이썬을 사용한 Craigslist 스크래핑에 중점을 두고 봇 탐지를 피하기 위해 BeautifulSoup, Requests 및 프록시 로테이션을 강조합니다.
이제 크랙스리스트를 스크랩하는 방법을 단계별로 자세히 알아보겠습니다.
이제 특정 웹페이지에 HTTP 요청을 보내고, 필요한 페이지를 섹션화하고, 원하는 데이터를 수집하여 미리 정해진 형식으로 저장하는 것부터 시작하여 웹 스크래핑 Craigslist 단계를 자세히 살펴보겠습니다.
다음 패키지를 다운로드하여 설치해야 합니다:
pip install beautifulsoup4
pip install requests
웹 페이지에서 데이터를 가져오려면 먼저 스크랩하려는 URL에 HTTP 요청을 보내야 합니다. 요청 라이브러리를 사용하여 GET 요청을 보내 HTML 콘텐츠를 가져온 다음, 이를 처리하여 필요한 정보를 추출할 수 있습니다.
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을 살펴보고 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')
else:
# 요청에 실패한 경우 상태 코드로 오류 메시지를 인쇄합니다.
print(f"Failed to retrieve {url}. Status code: {response.status_code}")
HTML 콘텐츠를 가져온 후 다음 단계는 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}")
제목:
가격:
설명:
Craigslist 데이터를 추출한 후에는 향후 사용이나 분석이 용이하고 다른 애플리케이션과의 상호 운용성을 위해 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 웹사이트에서 자동으로 목록을 수집하려면 가장 쉬운 방법 중 하나는 라이브러리를 통해 비공식 API를 사용하는 것입니다. 이를 통해 사이트를 쿼리하고 카테고리, 도시, 가격, 키워드 등을 기준으로 결과를 필터링할 수 있습니다.
라이브러리를 설치하는 것으로 시작하세요:
pip install python-craigslist
다음은 뉴욕의 아파트 임대 숙소를 검색하는 간단한 예입니다:
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'])
이 코드는 뉴욕시의 아파트/주택 임대 섹션에서 가격이 $2000 미만인 숙소의 첫 10개 목록을 가져옵니다.
이 라이브러리는 다양한 필터와 함께 구인, 자동차, 판매용 아이템 등의 카테고리도 지원합니다. 봇, 리스팅 추적기, 시장 분석과 같은 Python 기반 도구를 빠르게 구축할 수 있는 훌륭한 도구입니다.
특히 Craigslist에서 웹 스크래핑을 할 때 직면할 수 있는 여러 가지 추가적인 문제가 있습니다. 스크래핑 시도를 방지하기 위해 IP 차단과 캡차 챌린지를 구현합니다. 이러한 문제를 방지하기 위해 사용자 에이전트 로테이션과 함께 프록시를 구현할 수 있습니다.
프록시 사용:
프록시를 사용하고 사용자 에이전트를 함께 교체하는 것은 잡히지 않고 스크래핑을 계속하는 현명한 방법입니다.
proxies = {
'http': 'http://your_proxy_ip:your_proxy_port',
'https': 'https://your_proxy_ip:your_proxy_port'
}
response = requests.get(url, proxies=proxies)
사용자 에이전트 교대는 스크래퍼가 요청할 때마다 보내는 브라우저 ID를 변경하는 것을 의미합니다. 항상 동일한 사용자 에이전트를 사용하면 의심스러운 사용자로 보입니다. 다른 사용자 에이전트를 전환하면 스크래퍼가 일반 사용자처럼 보이게 되어 차단을 피할 수 있습니다:
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 Craigslist 스크레이퍼를 개발할 수 있습니다. 이 프로그램은 여러 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()
# 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}")
이제 웹 스크래핑의 작동 원리를 이해하셨으니, 시장 분석이든 리드 탐색이든 웹 스크래핑이 왜 그렇게 편리한지 쉽게 알 수 있을 것입니다. 웹사이트는 귀중한 정보로 가득 차 있으며, BeautifulSoup 및 Requests와 같은 도구를 사용하면 데이터를 아주 간단하게 가져올 수 있습니다. 이 가이드에서는 동적 콘텐츠 처리와 로테이팅 프록시 사용과 같은 중요한 팁도 다루었습니다. 파이썬으로 스크래핑을 올바르게 수행하면 비즈니스와 사람들이 모든 종류의 영역에서 더 현명한 의사 결정을 내리는 데 큰 도움이 될 수 있습니다.
댓글: 0