ホームページ  >  記事  >  バックエンド開発  >  PythonベースのWebクローラ技術を詳しく解説

PythonベースのWebクローラ技術を詳しく解説

王林
王林オリジナル
2023-06-17 10:28:44912ブラウズ

インターネットとビッグデータ時代の到来により、ますます多くのデータが動的に生成され、Web ページ上に表示されるようになり、データの収集と処理に新たな課題が生じています。このとき、Web クローラー技術が登場しました。 Webクローラ技術とは、プログラムを書くことでインターネット上の情報を自動的に取得する技術のことを指します。強力なプログラミング言語である Python には、学習が簡単、効率的で使いやすい、クロスプラットフォームであるという利点があり、Web クローラー開発において重要な選択肢となっています。

この記事では、リクエスト モジュール、解析モジュール、ストレージ モジュールなど、Python で一般的に使用される Web クローラー テクノロジを体系的に紹介します。

1. リクエスト モジュール

リクエスト モジュールは Web クローラーの中核であり、ブラウザをシミュレートしてリクエストを送信し、必要なページ コンテンツを取得できます。一般的に使用されるリクエスト モジュールには、urllib、Requests、Selenium などがあります。

  1. urllib

urllib は Python に付属する HTTP リクエスト モジュールです。URL に基づいてネットワークから Web ページ データを取得できます。URL エンコード、変更をサポートしています。リクエストヘッダー、投稿、Cookie、その他の機能の。一般的に使用される関数には、urllib.request.urlopen()、urllib.request.urlretrieve()、urllib.request.build_opener() などが含まれます。

urllib.request.urlopen() 関数を通じて Web サイトのソース コードを取得できます。

import urllib.request

response = urllib.request.urlopen('http://www.example.com/')
source_code = response.read().decode('utf-8')
print(source_code)
  1. Requests

Requests は Python です。サードパーティのライブラリ。urllib よりもシンプルで使いやすく、Cookie、POST、プロキシなどの機能をサポートしています。一般的に使用される関数には、requests.get()、requests.post()、requests.request() などが含まれます。

requests.get() 関数を通じて応答コンテンツを取得できます。

import requests

response = requests.get('http://www.example.com/')
source_code = response.text
print(source_code)
  1. Selenium

Selenium は自動テスト ツールであり、以下で使用されます。 Webクローラとは、ブラウザを起動することで人間の操作を模擬したり、JSで動的に生成されたページデータを取得する機能などを実現します。一般的に使用される関数には、selenium.webdriver.Chrome()、selenium.webdriver.Firefox()、selenium.webdriver.PhantomJS() などが含まれます。

Selenium を通じて Web ページのソース コードを取得します:

from selenium import webdriver

browser = webdriver.Chrome()  # 打开Chrome浏览器
browser.get('http://www.example.com/')
source_code = browser.page_source  # 获取网页源代码
print(source_code)

2. 解析モジュール

Web ページのソース コードを取得したら、次のステップはファイルを解析することです。 Python で一般的に使用される解析モジュールには、正規表現、BeautifulSoup、PyQuery などがあります。

  1. 正規表現

正規表現は、パターンに従って文字列を照合し、必要なデータを迅速に抽出できる魔法の強力なツールです。 Python の re モジュールを使用して正規表現を呼び出すことができます。

たとえば、Web ページ内のすべてのリンクを抽出します。

import re

source_code = """
<!DOCTYPE html>
<html>
<head>
    <title>Example</title>
</head>
<body>
    <a href="http://www.example.com/">example</a>
    <a href="http://www.google.com/">google</a>
</body>
</html>
"""

pattern = re.compile('<a href="(.*?)">(.*?)</a>')  # 匹配所有链接
results = re.findall(pattern, source_code)

for result in results:
    print(result[0], result[1])
  1. BeautifulSoup

Beautiful Soup は、HTML ファイルやファイルを変換できる Python のライブラリです。 XML ファイルはツリー構造に解析され、HTML/XML ファイル内のデータを簡単に取得できます。さまざまなパーサーをサポートしています。一般的に使用されるパーサーは、Python の組み込み html.parser、lxml、および html5lib です。

たとえば、Web ページ内のすべてのリンクを解析します。

from bs4 import BeautifulSoup

source_code = """
<!DOCTYPE html>
<html>
<head>
    <title>Example</title>
</head>
<body>
    <a href="http://www.example.com/">example</a>
    <a href="http://www.google.com/">google</a>
</body>
</html>
"""

soup = BeautifulSoup(source_code, 'html.parser')
links = soup.find_all('a')

for link in links:
    print(link.get('href'), link.string)
  1. PyQuery

PyQuery は、HTML ドキュメントを変換する jQuery に似た Python ライブラリです。 jQuery と同様の構造で、Web ページ内の要素は CSS セレクターを通じて直接取得できます。 lxmlライブラリに依存します。

たとえば、Web ページ内のすべてのリンクを解析します:

from pyquery import PyQuery as pq

source_code = """
<!DOCTYPE html>
<html>
<head>
    <title>Example</title>
</head>
<body>
    <a href="http://www.example.com/">example</a>
    <a href="http://www.google.com/">google</a>
</body>
</html>
"""

doc = pq(source_code)
links = doc('a')

for link in links:
    print(link.attrib['href'], link.text_content())

3. ストレージ モジュール

必要なデータを取得したら、次のステップはデータを保存することです。ローカルまたはデータベースの中間にあります。 Python で一般的に使用されるストレージ モジュールには、ファイル モジュール、MySQLdb、pymongo などが含まれます。

  1. ファイル モジュール

ファイル モジュールはデータをローカルに保存できます。一般的に使用されるファイル モジュールには、CSV、JSON、Excel などが含まれます。その中でもCSVモジュールは、CSVファイルにデータを書き込むことができる、最もよく使われるファイルモジュールの1つです。

たとえば、データを CSV ファイルに書き込みます。

import csv

filename = 'example.csv'
data = [['name', 'age', 'gender'],
        ['bob', 25, 'male'],
        ['alice', 22, 'female']]

with open(filename, 'w', encoding='utf-8', newline='') as f:
    writer = csv.writer(f)
    for row in data:
        writer.writerow(row)
  1. MySQLdb

MySQLdb は、Python が MySQL データベースに接続するためのライブラリです。トランザクション、カーソル、その他の機能をサポートします。

たとえば、データを MySQL データベースに保存します:

import MySQLdb

conn = MySQLdb.connect(host='localhost', port=3306, user='root', 
                       passwd='password', db='example', charset='utf8')
cursor = conn.cursor()

data = [('bob', 25, 'male'), ('alice', 22, 'female')]

sql = "INSERT INTO users (name, age, gender) VALUES (%s, %s, %s)"

try:
    cursor.executemany(sql, data)
    conn.commit()
except:
    conn.rollback()

cursor.close()
conn.close()
  1. pymongo

pymongo は、Python が MongoDB データベースにリンクするためのライブラリです。追加、削除、変更、確認などのさまざまな操作をサポートします。

例: MongoDB データベースにデータを保存します:

import pymongo

client = pymongo.MongoClient('mongodb://localhost:27017/')
db = client['example']
collection = db['users']

data = [{'name': 'bob', 'age': 25, 'gender': 'male'}, 
        {'name': 'alice', 'age': 22, 'gender': 'female'}]

collection.insert_many(data)

4. 概要

Python の Web クローラー テクノロジには、リクエスト モジュール、解析モジュール、ストレージ モジュールなどが含まれます。リクエスト モジュールは Web クローラーのコアであり、解析モジュールはデータを取得するための重要なチャネルであり、ストレージ モジュールはデータを永続化する唯一の方法です。 Python には、Web クローラー開発において、学習が簡単、効率的で使いやすい、クロスプラットフォームであるという利点があり、Web クローラー開発における重要な選択肢となっています。

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

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