찾다
백엔드 개발파이썬 튜토리얼Python 크롤러 기술 도입 예시 코드 분석

크롤러 기술의 기본 개념

  1. 크롤러: 네트워크 데이터를 자동으로 얻는 프로그램입니다.

  2. 웹 페이지 구조: HTML, CSS, JavaScript 등

  3. HTTP 요청: 클라이언트가 서버에 데이터를 요청하는 방법입니다.

  4. HTTP 응답: 서버가 클라이언트에 반환하는 데이터입니다.

요청 및 응답

Python의 요청 라이브러리를 사용하여 HTTP 요청을 보냅니다.

import requests
 
url = "https://www.example.com"
response = requests.get(url)

응답 콘텐츠 가져오기

html_content = response.text

HTML 구문 분석 및 데이터 추출

BeautifulSoup 라이브러리를 사용하여 HTML 콘텐츠를 구문 분석하세요.

from bs4 import BeautifulSoup
 
soup = BeautifulSoup(html_content, "html.parser")

CSS 선택기나 기타 방법을 사용하여 데이터를 추출하세요.

title = soup.title.string

실전 전투: Jianshu 웹사이트 홈페이지의 기사 정보를 크롤링

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)

테스트 및 최적화

1. 크롤러 방지 전략을 접할 때 User-Agent를 사용하여 브라우저인 것처럼 가장할 수 있습니다.

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)

2. time.sleep() 함수를 사용하여 요청 빈도를 제어하세요.

import time
 
time.sleep(10)

3. 오류 처리 및 예외 포착.

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의 네트워크 프로그래밍 및 크롤러 기술을 익히는 데 도움이 되는 몇 가지 기본 개념과 원칙을 이해해야 합니다. 다음은 몇 가지 기본 웹 크롤링 개념입니다.

  1. HTTP 프로토콜: HTTP(Hypertext Transfer Protocol)는 HTML과 같은 하이퍼미디어 문서를 전송하는 데 사용되는 애플리케이션 계층 프로토콜입니다. HTTP 프로토콜은 웹 서버에서 웹 브라우저 또는 다른 클라이언트로 데이터를 전송하거나 게시하는 데 사용됩니다.

  2. HTML, CSS 및 JavaScript: HTML은 웹 페이지를 설명하는 데 사용되는 언어입니다. CSS는 HTML의 구조를 표현하는 데 사용되는 스타일입니다. JavaScript는 웹 프로그래밍을 위한 스크립팅 언어로, 주로 웹 페이지에 동적 효과를 구현하고 사용자와 상호 작용하는 데 사용됩니다.

  3. DOM: DOM(문서 개체 모델)은 HTML 및 XML 문서를 처리하기 위한 크로스 플랫폼 프로그래밍 인터페이스입니다. DOM은 문서를 트리 구조로 취급합니다. 여기서 각 노드는 부분(예: 요소, 속성 또는 텍스트)을 나타냅니다.

  4. URL: URL(Uniform Resource Locator)은 인터넷 리소스의 위치를 ​​지정하는 데 사용되는 문자열입니다.

  5. 요청 헤더: HTTP 요청에서 요청 헤더에는 클라이언트 환경, 브라우저 등에 대한 정보가 포함됩니다. 일반적인 요청 헤더 필드에는 User-Agent, Accept, Referer 등이 포함됩니다.

  6. 응답 헤더: HTTP 응답에서 응답 헤더에는 서버에 대한 정보, 응답 상태 코드 및 기타 정보가 포함됩니다. 일반적인 응답 헤더 필드에는 Content-Type, Content-Length, Server 등이 포함됩니다.

  7. 웹 크롤러 전략: 일부 웹사이트에서는 크롤러가 데이터를 크롤링하는 것을 방지하기 위해 IP 차단, 액세스 속도 제한, JavaScript를 사용하여 데이터를 동적으로 로드하는 등 몇 가지 전략을 채택합니다. 실제 응용 프로그램에서는 프록시 IP 사용, 크롤러 크롤링 속도 제한, 브라우저 시뮬레이션 라이브러리(예: Selenium) 사용 등과 같은 전략을 기반으로 해당 대응 조치를 취해야 합니다.

위 내용은 Python 크롤러 기술 도입 예시 코드 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
이 기사는 亿速云에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제
详细讲解Python之Seaborn(数据可视化)详细讲解Python之Seaborn(数据可视化)Apr 21, 2022 pm 06:08 PM

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于Seaborn的相关问题,包括了数据可视化处理的散点图、折线图、条形图等等内容,下面一起来看一下,希望对大家有帮助。

详细了解Python进程池与进程锁详细了解Python进程池与进程锁May 10, 2022 pm 06:11 PM

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于进程池与进程锁的相关问题,包括进程池的创建模块,进程池函数等等内容,下面一起来看一下,希望对大家有帮助。

Python自动化实践之筛选简历Python自动化实践之筛选简历Jun 07, 2022 pm 06:59 PM

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于简历筛选的相关问题,包括了定义 ReadDoc 类用以读取 word 文件以及定义 search_word 函数用以筛选的相关内容,下面一起来看一下,希望对大家有帮助。

归纳总结Python标准库归纳总结Python标准库May 03, 2022 am 09:00 AM

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于标准库总结的相关问题,下面一起来看一下,希望对大家有帮助。

Python数据类型详解之字符串、数字Python数据类型详解之字符串、数字Apr 27, 2022 pm 07:27 PM

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于数据类型之字符串、数字的相关问题,下面一起来看一下,希望对大家有帮助。

分享10款高效的VSCode插件,总有一款能够惊艳到你!!分享10款高效的VSCode插件,总有一款能够惊艳到你!!Mar 09, 2021 am 10:15 AM

VS Code的确是一款非常热门、有强大用户基础的一款开发工具。本文给大家介绍一下10款高效、好用的插件,能够让原本单薄的VS Code如虎添翼,开发效率顿时提升到一个新的阶段。

详细介绍python的numpy模块详细介绍python的numpy模块May 19, 2022 am 11:43 AM

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于numpy模块的相关问题,Numpy是Numerical Python extensions的缩写,字面意思是Python数值计算扩展,下面一起来看一下,希望对大家有帮助。

python中文是什么意思python中文是什么意思Jun 24, 2019 pm 02:22 PM

pythn的中文意思是巨蟒、蟒蛇。1989年圣诞节期间,Guido van Rossum在家闲的没事干,为了跟朋友庆祝圣诞节,决定发明一种全新的脚本语言。他很喜欢一个肥皂剧叫Monty Python,所以便把这门语言叫做python。

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

mPDF

mPDF

mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

Dreamweaver Mac版

Dreamweaver Mac版

시각적 웹 개발 도구

에디트플러스 중국어 크랙 버전

에디트플러스 중국어 크랙 버전

작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

안전한 시험 브라우저

안전한 시험 브라우저

안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.