ホームページ >バックエンド開発 >Python チュートリアル >Pythonクローラ技術導入サンプルコード解析

Pythonクローラ技術導入サンプルコード解析

王林
王林転載
2023-04-22 13:04:071288ブラウズ

クローラ技術の基本概念

  1. クローラ: ネットワークデータを自動的に取得するプログラム。

  2. Web ページの構造: 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 Web サイトのホームページの記事情報をクロールする

Jianshu Web サイトのホームページの 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. クローラー対策戦略に遭遇した場合、ユーザー エージェントを使用してブラウザーのふりをすることができます。

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}")

Web サイト クローラーの完全なコード:

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 ネットワーク プログラミングとクローラー テクノロジーをマスターします。 Web クローリングの基本的な概念をいくつか示します。

  1. HTTP プロトコル: ハイパーテキスト転送プロトコル (HTTP) は、HTML などのハイパーメディア ドキュメントを送信するために使用されるアプリケーション層プロトコルです。 HTTP プロトコルは、Web サーバーから Web ブラウザまたは他のクライアントにデータを送信またはポストするために使用されます。

  2. HTML、CSS、および JavaScript: HTML は、Web ページを記述するために使用される言語です。 CSS は HTML の構造を表現するために使用されるスタイルです。 JavaScript は Web プログラミング用のスクリプト言語であり、主に Web ページ上で動的な効果を実現したり、ユーザーと対話したりするために使用されます。

  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. Web クローラー戦略: 一部の Web サイトでは、IP のブロック、アクセス速度の制限、JavaScript を使用したデータの動的ロードなど、クローラーによるデータのクロールを防ぐいくつかの戦略が採用されています。実際のアプリケーションでは、プロキシ IP の使用、クローラのクローリング速度の制限、ブラウザ シミュレーション ライブラリ (Selenium など) の使用など、これらの戦略に基づいて対応する対策を講じる必要があります。

以上がPythonクローラ技術導入サンプルコード解析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。