크롤러: 네트워크 데이터를 자동으로 얻는 프로그램입니다.
웹 페이지 구조: HTML, CSS, JavaScript 등
HTTP 요청: 클라이언트가 서버에 데이터를 요청하는 방법입니다.
HTTP 응답: 서버가 클라이언트에 반환하는 데이터입니다.
Python의 요청 라이브러리를 사용하여 HTTP 요청을 보냅니다.
import requests url = "https://www.example.com" response = requests.get(url)
응답 콘텐츠 가져오기
html_content = response.text
BeautifulSoup 라이브러리를 사용하여 HTML 콘텐츠를 구문 분석하세요.
from bs4 import BeautifulSoup soup = BeautifulSoup(html_content, "html.parser")
CSS 선택기나 기타 방법을 사용하여 데이터를 추출하세요.
title = soup.title.string
Jianshu 웹사이트 홈페이지의 HTML 콘텐츠를 얻기 위해 요청을 보냅니다.
import requests from bs4 import BeautifulSoup url = "https://www.jianshu.com" response = requests.get(url) html_content = response.text
데이터를 JSON 형식으로 저장합니다.
import json with open("jianshu_articles.json", "w", encoding="utf-8") as f: json.dump(article_info_list, f, ensure_ascii=False, indent=4)
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3"} response = requests.get(url, headers=headers)
import time time.sleep(10)
try: response = requests.get(url, headers=headers, timeout=5) response.raise_for_status() except requests.exceptions.RequestException as e: print(f"Error: {e}")
import requests from bs4 import BeautifulSoup import json import time def fetch_jianshu_articles(): url = "https://www.jianshu.com" headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3"} try: response = requests.get(url, headers=headers, timeout=5) response.raise_for_status() except requests.exceptions.RequestException as e: print(f"Error: {e}") return html_content = response.text soup = BeautifulSoup(html_content, "html.parser") articles = soup.find_all("div", class_="content") article_info_list = [] for article in articles: title = article.h3.text.strip() author = article.find("span", class_="name").text.strip() link = url + article.h3.a["href"] article_info = {"title": title, "author": author, "link": link} article_info_list.append(article_info) return article_info_list def save_to_json(article_info_list, filename): with open(filename, "w", encoding="utf-8") as f: json.dump(article_info_list, f, ensure_ascii=False, indent=4) if __name__ == "__main__": article_info_list = fetch_jianshu_articles() if article_info_list: save_to_json(article_info_list, "jianshu_articles.json") print("Jianshu articles saved to 'jianshu_articles.json'.") else: print("Failed to fetch Jianshu articles.")
이 실용적인 프로젝트를 더 잘 이해하려면 Python의 네트워크 프로그래밍 및 크롤러 기술을 익히는 데 도움이 되는 몇 가지 기본 개념과 원칙을 이해해야 합니다. 다음은 몇 가지 기본 웹 크롤링 개념입니다.
HTTP 프로토콜: HTTP(Hypertext Transfer Protocol)는 HTML과 같은 하이퍼미디어 문서를 전송하는 데 사용되는 애플리케이션 계층 프로토콜입니다. HTTP 프로토콜은 웹 서버에서 웹 브라우저 또는 다른 클라이언트로 데이터를 전송하거나 게시하는 데 사용됩니다.
HTML, CSS 및 JavaScript: HTML은 웹 페이지를 설명하는 데 사용되는 언어입니다. CSS는 HTML의 구조를 표현하는 데 사용되는 스타일입니다. JavaScript는 웹 프로그래밍을 위한 스크립팅 언어로, 주로 웹 페이지에 동적 효과를 구현하고 사용자와 상호 작용하는 데 사용됩니다.
DOM: DOM(문서 개체 모델)은 HTML 및 XML 문서를 처리하기 위한 크로스 플랫폼 프로그래밍 인터페이스입니다. DOM은 문서를 트리 구조로 취급합니다. 여기서 각 노드는 부분(예: 요소, 속성 또는 텍스트)을 나타냅니다.
URL: URL(Uniform Resource Locator)은 인터넷 리소스의 위치를 지정하는 데 사용되는 문자열입니다.
요청 헤더: HTTP 요청에서 요청 헤더에는 클라이언트 환경, 브라우저 등에 대한 정보가 포함됩니다. 일반적인 요청 헤더 필드에는 User-Agent, Accept, Referer 등이 포함됩니다.
응답 헤더: HTTP 응답에서 응답 헤더에는 서버에 대한 정보, 응답 상태 코드 및 기타 정보가 포함됩니다. 일반적인 응답 헤더 필드에는 Content-Type, Content-Length, Server 등이 포함됩니다.
웹 크롤러 전략: 일부 웹사이트에서는 크롤러가 데이터를 크롤링하는 것을 방지하기 위해 IP 차단, 액세스 속도 제한, JavaScript를 사용하여 데이터를 동적으로 로드하는 등 몇 가지 전략을 채택합니다. 실제 응용 프로그램에서는 프록시 IP 사용, 크롤러 크롤링 속도 제한, 브라우저 시뮬레이션 라이브러리(예: Selenium) 사용 등과 같은 전략을 기반으로 해당 대응 조치를 취해야 합니다.
위 내용은 Python 크롤러 기술 도입 예시 코드 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!