>백엔드 개발 >파이썬 튜토리얼 >Python의 실제 크롤러 전투: Baidu는 크롤러를 알고 있습니다.

Python의 실제 크롤러 전투: Baidu는 크롤러를 알고 있습니다.

王林
王林원래의
2023-06-10 11:55:38703검색

Python은 강력한 프로그래밍 언어로서 인터넷에서 많은 양의 데이터를 보다 편리하게 얻을 수 있도록 도와줍니다. 그 중 크롤러 기술은 매우 대표적인 부분이다. 크롤러는 인터넷에서 다양한 데이터를 얻고 분석하여 우리에게 많은 양의 귀중한 정보를 제공할 수 있습니다. Python에서는 크롤러 기술도 널리 사용될 수 있습니다. Baidu Zhizhi는 수많은 지식 질문과 답변을 제공하는 웹사이트입니다. 이 글에서는 Baidu Zhizhi 크롤러를 Python으로 구현하는 방법을 소개합니다.

  1. 크롤링 시작

먼저 Baidu 웹사이트를 크롤링하는 방법을 이해해야 합니다. Python에서는 요청 라이브러리나 urllib 라이브러리의 urlopen 함수를 사용하여 웹 사이트의 소스 코드를 얻을 수 있습니다. 소스 코드를 얻은 후 BeautifulSoup 라이브러리를 사용하여 웹 페이지 문서를 구문 분석하여 필요한 정보를 쉽게 필터링할 수 있습니다. 여기서 크롤링해야 할 것은 각 질문과 해당 베스트 답변입니다. Baidu가 알고 있는 소스 코드를 살펴보면 각 우수 답변에는 고유한 classID가 있음을 알 수 있으며 이를 기반으로 해당 콘텐츠를 선택할 수 있습니다.

다음은 코드 구현 과정입니다.

import requests
from bs4 import BeautifulSoup

# 网页地址
url = "https://zhidao.baidu.com/question/2031956566959407839.html"

# 发送请求
r = requests.get(url)

# 解析网页
soup = BeautifulSoup(r.text, "html.parser")

# 获取问题
question = soup.find("span", class_="ask-title").text
print("问题: ", question)

# 获取最佳答案
answer = soup.find("pre", class_="best-text mb-10").text
print("最佳答案: ", answer)
  1. 여러 질문과 답변 크롤링

다음으로 여러 질문과 답변을 크롤링해야 합니다. 질문 목록을 만들고 for 루프를 통해 각 질문과 답변을 크롤링한 다음 인쇄할 수 있습니다. Baidu에서는 각 질문 URL의 접미사가 다르기 때문에 문자열 형식을 통해 크롤링해야 하는 웹페이지 주소를 자동으로 생성해야 합니다.

다음은 구현 코드입니다.

import requests
from bs4 import BeautifulSoup

# 创建问题列表
questions = [
    "2031956566959407839", 
    "785436012916117832", 
    "1265757662946113922", 
    "455270192556513192", 
    "842556478655981450"
]

# 循环爬取问题和最佳答案
for q in questions:
    # 根据问题ID拼接URL
    url = f"https://zhidao.baidu.com/question/{q}.html"

    # 发送请求
    r = requests.get(url)

    # 解析网页
    soup = BeautifulSoup(r.text, "html.parser")

    # 获取问题
    try:
        question = soup.find("span", class_="ask-title").text
    except:
        question = ""

    # 获取最佳答案
    try:
        answer = soup.find("pre", class_="best-text mb-10").text
    except:
        answer = ""

    # 打印问题和答案
    print("问题: ", question)
    print("最佳答案: ", answer)
    print("----------------------")
  1. 크롤링 결과를 파일에 저장

마지막으로 크롤링 결과를 파일에 저장합니다. Python의 내장 모듈 csv를 사용하여 각 질문과 답변을 csv 파일에 저장할 수 있습니다. 또한, 중국어 문자 깨짐 문제를 방지하기 위해 csv 파일의 헤더에 BOM(Byte Order Mark)을 추가할 수 있습니다.

다음은 구현 코드입니다.

import requests
from bs4 import BeautifulSoup
import csv
import codecs

# 创建问题列表
questions = [
    "2031956566959407839", 
    "785436012916117832", 
    "1265757662946113922", 
    "455270192556513192", 
    "842556478655981450"
]

# 创建文件
with open("questions.csv", "w", newline='', encoding='utf-8-sig') as file:
    writer = csv.writer(file)
    writer.writerow(['问题', '最佳答案'])

    # 循环爬取问题和最佳答案
    for q in questions:
        # 根据问题ID拼接URL
        url = f"https://zhidao.baidu.com/question/{q}.html"

        # 发送请求
        r = requests.get(url)

        # 解析网页
        soup = BeautifulSoup(r.text, "html.parser")

        # 获取问题
        try:
            question = soup.find("span", class_="ask-title").text
        except:
            question = ""

        # 获取最佳答案
        try:
            answer = soup.find("pre", class_="best-text mb-10").text
        except:
            answer = ""

        # 保存到csv文件
        writer.writerow([question, answer])
  1. Summary

이 글에서는 Python을 사용하여 바이두 웹사이트를 크롤링하는 방법을 소개했습니다. 요청 및 urllib 라이브러리를 사용하여 요청을 보내는 방법, BeautifulSoup 라이브러리를 사용하여 웹 페이지를 구문 분석하는 방법, 크롤링된 결과를 csv 파일에 저장하는 방법을 배웠습니다. 이러한 방법을 통해 우리는 인터넷에서 쉽게 데이터를 얻고 분석할 수 있습니다. 크롤러 기술은 인터넷 시대의 빅데이터 분석에서 매우 중요한 역할을 합니다. Python 프로그래머로서 관련 지식을 배우고 익히는 것이 중요합니다.

위 내용은 Python의 실제 크롤러 전투: Baidu는 크롤러를 알고 있습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.