ホームページ  >  記事  >  バックエンド開発  >  Python での実践的なクローラー戦闘: Baidu はクローラーを熟知しています

Python での実践的なクローラー戦闘: Baidu はクローラーを熟知しています

王林
王林オリジナル
2023-06-10 11:55:38682ブラウズ

Python は強力なプログラミング言語として、インターネット上で大量のデータをより簡単に取得するのに役立ちます。その中でもクローラー技術は非常に代表的な部分です。クローラーはインターネット上のさまざまなデータを取得・分析することで、私たちに多くの貴重な情報を提供してくれます。 Python では、クローラー技術も広く使用できます。 Baidu Zhizhi は知識に関する質問と回答を多数提供する Web サイトです。この記事では、Baidu Zhizhi クローラーを Python で実装する方法を紹介します。

  1. クロールを開始する

まず、Baidu Web サイトをクロールする方法を理解する必要があります。 Python では、request ライブラリまたは urllib ライブラリの urlopen 関数を使用して、Web サイトのソース コードを取得できます。ソース コードを取得したら、BeautifulSoup ライブラリを使用して Web ページ ドキュメントを解析し、必要な情報を簡単に除外できます。ここで、クロールする必要があるのは、各質問とそれに対応する最良の回答です。 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 のサフィックスは異なるため、クロールする必要がある Web ページのアドレスを文字列形式で自動的に生成する必要があります。

以下は実装コードです:

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. 概要

この記事では、Python を使用して Baidu Web サイトをクロールする方法を紹介しました。リクエストと urllib ライブラリを使用してリクエストを送信する方法、BeautifulSoup ライブラリを使用して Web ページを解析する方法、クロールされた結果を CSV ファイルに保存する方法を学びました。これらの方法により、私たちはインターネット上で簡単にデータを取得し、分析することができます。インターネット時代のビッグデータ解析においてクローラ技術は非常に重要な役割を果たしており、Pythonプログラマーとしては関連知識を学び習得することが重要です。

以上がPython での実践的なクローラー戦闘: Baidu はクローラーを熟知していますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。