ひとり情シス日記#6 Python基礎とwebスクレイピング

小さな組織でひとり情シスやる事になったので、自己リマインド&勉強アウトプット用の記事。


環境構築

Anaconda(Pythonディストリビューション)
Visual Studio Code(コードエディタ)、python拡張機能(コード補完など)

変数

値を覚えさせておく入れ物。=と同じ記号を使うことで、変数に値を記憶させることを代入という。数値や文字例を代入することが可能。
※数式の=ではない。

最後に代入した値のみが格納される。
X = 100
X = -0.001
print(X) #-0.001

変数に使用する主な型一覧(Pythonでは型の宣言を自動割り当て)
int 整数型 (integer)
float 不動小数点
str 文字列(string)
list 配列
bool TrueまたはFalseの真偽値(boolean)
dict 辞書、キーと値のペア(dictionary)

変数は英字または数字のみ、かつ頭文字は英字のみ使用可。スペースもNG
〇name_1 = ”Taro”
×name 1 = ”Taro”
×名前 = ”Taro”
×1name = ”Taro”

配列

変数は単一情報するが、変数は複数の値を順序つけて代入する入れ物。
score=[80,89,71,34,1]
score[0]=80

関数

プログラムを保存する入れ物。何度も使うプログラムを関数として保存しておいて、その関数名だけを呼び出すことで、保存しておいたプログラムが実行される。pytonには事前に組み込まれている関数もある(printなど)自分で作る場合は関数を定義するという。

def(define/和訳:定義する)で関数を定義する。

・引数(ひきすう)
 処理内容への入力値、コード上では関数名に続けて定義する。

・戻り値
 処理内容を実行した結果、出力された値

関数定義と実行の全体像

・関数名は分かりやすい任意の名前にする。組み込み関数名は使用不可。
・引数は指定しなくても良い。その場合、()空欄としておく。
・引数は複数指定できる(引数1、引数2・・・・)・return(戻り値)は指定しなくても良い。処理内容がprint()など
・引数には違いがある。関数定義:def 関数名(仮引数)、実行:関数名(実引数)
・処理内容で変数を定義したもの(ローカル変数
)は、関数外の変数(グローバル変数)として使用できない。

関数に引数、戻り値を使用しない具体例

def say_hello():
      print("hello world")

say_hello()

hello world

関数に引数を使用する具体例
def say_hello(greeting):
      print("greeting")

say_hello(”hello world”) ※関数に文字列を渡す

hello world

pythonは変数に関数を代入することができる
def say_hello(greeting):
      print("greeting")

hello = say_hello ※helloという変数に関数を代入
hello ("Good Morning")

Good Morning

戻り値returnを使用する具体例
def grade(score):
   if score >= 60:
      return "合格"
   else:
      return "不合格"

score = 86
print(grade(score))

合格

クラス

クラスは「データ(アトリビュート)」と「処理(メソッド)」をまとめたもの。

・クラスはレシピ
クラスは料理のレシピのようなものです。レシピには、その料理を作るために必要な材料や手順が詳しく書かれています。レシピ自体は食べることができませんが、このレシピを基にして実際の料理を作ることができます。

クラスの定義とメソッド

class Recipe: #クラス名
      def __init__(self, name, ingredients): #初期化メソッド
        self.name = name #アトリビュート
        self.ingredients = ingredients #アトリビュート

      def cook(self): #メソッドの定義
            print(f"Cooking {self.name} with {', '.join(self.ingredients)}")

cook メソッドは Recipe クラスの一部として定義されています。このメソッドはインスタンスの name 属性と ingredients 属性を使って、料理の名前と材料を出力します。

・インスタンスは実際の料理
インスタンスは、レシピを基に作られた実際の料理です。レシピからたくさんの料理を作ることができ、それぞれの料理(インスタンス)は独立しています。

インスタンスの作成

spaghetti = Recipe("Spaghetti", ["pasta", "tomato sauce", "garlic"])
pancake = Recipe("Pancake", ["flour", "milk", "egg", "sugar"])

Recipe クラスから spaghetti と pancake という2つのインスタンスを作成しています。それぞれのインスタンスは、名前と材料リストを持ちます。

・アトリビュート(属性)は料理の材料や名前
属性は料理の材料や名前を表します。例えば、材料(ingredients)や料理の名前(name)が属性にあたります。これらの属性は各料理ごとに異なる値を持つことができます。

アトリビュート(属性)の値を出力

print(spaghetti.name)  # 出力: Spaghetti
print(pancake.ingredients)  # 出力: ['flour', 'milk', 'egg', 'sugar']

spaghetti インスタンスの name 属性の値を取得し、その値をコンソールに出力します。この場合、spaghetti.name は "Spaghetti" なので、出力は Spaghetti になります。
pancake インスタンスの ingredients 属性の値を取得し、その値をコンソールに出力します。この場合、pancake.ingredients は ['flour', 'milk', 'egg', 'sugar'] なので、出力は ['flour', 'milk', 'egg', 'sugar'] になります。

・メソッドは料理を作る手順
メソッドは料理を作る手順や動作を表します。例えば、料理を実際に作る動作です。メソッドを呼び出すことで、その料理を作る手順を実行できます。

インスタンスの実行

spaghetti.cook() # 出力: Cooking Spaghetti with pasta, tomato sauce, garlic
pancake.cook() # 出力: Cooking Pancake with flour, milk, egg, sugar

spaghetti インスタンスの cook メソッドを呼び出しています。これにより、spaghetti インスタンスの name と ingredients 属性に基づいて、"Cooking Spaghetti with pasta, tomato sauce, garlic" が出力されます。
同様に、pancake インスタンスの cook メソッドを呼び出して、"Cooking Pancake with flour, milk, egg, sugar" が出力されます。

ライブラリ>パッケージ>モジュール

モジュールは複数の関数や変数がまとまったPythonフォルダのこと。パッケージは複数のモジュールがまとめられてフォルダ。ライブラリはいくつかのパッケージをまとめたもの。

ライブラリ例
・データ処理 NUmpy,Pandas
・スクレイピング Selenium,BeautifulSoup
・可視化 Matplotlib,SeaBprn
・画像処理  OpenCV,Pillow
・機械学習  Scikit-learn,Pycaret
・自然言語処理  MeCab,Ginza
・ディープラーニング  Pytorch,TensorFlow

webスクレイピング(selenium)

・準備
ターミナルでSeleniumをインストール(pip install selenium)
Chromeドライバー →Selenium4.6.0からは自動でダウンロード

・コード例

  1. webdriver.Chromeを使ってChromeブラウザを開く。

  2. 指定されたURL(https://example.com)にアクセス。

  3. ページのタイトルを取得して表示。

  4. 特定の要素(この例ではIDがsome_idの要素)を取得して、そのテキストを表示。

  5. フォーム(名前がqの要素)にテキストSeleniumを入力し、Enterキーを押す。

  6. 検索結果が表示されるのを待つ。

  7. 検索結果の最初のリンクのテキストを取得して表示。

  8. ブラウザを閉じる。

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time
driver_path = '/path/to/chromedriver'driver = webdriver.Chrome(executable_path=driver_path)
driver.get('https://example.com')
time.sleep(2)
print(driver.title)
element = driver.find_element(By.ID, 'some_id')
print(element.text)
search_box = driver.find_element(By.NAME, 'q')
search_box.send_keys('Selenium')
search_box.send_keys(Keys.RETURN)
time.sleep(2)
results = driver.find_elements(By.CSS_SELECTOR, 'h3')
if results:
print(results[0].text)
driver.quit()

・webサイト内のHTMLコード確認
Googlechromeのデベロッパーツールから「ページ内の要素を選択して検査」を選択し、対象の画面領域をカーソル移動。ソースコードを確認。

・selenium IDE(chrome拡張機能)
対象のwebサイトでカーソル操作のキャプチャにより、pythonコード出力できる便利な機能。

(参考)HTML

ウェブページの構造を記述するための言語で、テキスト、画像、リンク、リスト、テーブル、フォームなどを様々なタグを使用して(囲って)記述される。

DOCTYPE宣言: <!DOCTYPE html>
ドキュメントがHTML5であることを宣言します。

html要素: <html lang="ja">
ドキュメント全体を囲むルート要素です。lang="ja"属性はドキュメントの言語を日本語と指定しています。

head要素: <head>
メタデータを含むセクションです。ここにはドキュメントのタイトルや文字エンコーディング、ビューポート設定などが含まれます。

meta要素: <meta charset="UTF-8">
ドキュメントの文字エンコーディングを指定します。UTF-8はほとんどの言語をサポートするエンコーディングです。

title要素: <title>基本的なHTMLドキュメント</title>
ブラウザのタイトルバーやタブに表示されるタイトルを指定します。

body要素: <body>
ドキュメントのコンテンツを含むセクションです。見出し、段落、リスト、リンクなどが含まれます。

header要素: <header>
ページのヘッダーセクションです。ナビゲーションメニューやタイトルが含まれます。

h1要素: <h1>ようこそ</h1>
ページの主要見出しです。通常はドキュメント内で1つだけ使用されます。

nav要素: <nav>
ナビゲーションメニューを含むセクションです。

ul要素: <ul>
順序なしリストを表します。リスト項目は<li>タグで囲まれます。

a要素: <a href="#section1">セクション1</a>
ハイパーリンクを表します。href属性はリンク先のURLを指定します。ここではページ内リンクを示しています。

main要素: <main>
ドキュメントの主要コンテンツを含むセクションです。

section要素: <section id="section1">
ドキュメントのセクションを表します。id属性はページ内リンクのターゲットとして使用されます。

h2要素: <h2>セクション1</h2>
セクション内の見出しです。<h1>よりも下位の見出しレベルです。

p要素: <p>これはセクション1の内容です。</p>
段落を表します。

footer要素: <footer>
ページのフッターセクションです。著作権情報などが含まれます。

この記事が気に入ったらサポートをしてみませんか?