ひとり情シス日記#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/和訳:定義する)で関数を定義する。
・引数(ひきすう)
処理内容への入力値、コード上では関数名に続けて定義する。
・戻り値
処理内容を実行した結果、出力された値
![](https://assets.st-note.com/img/1716936536512-fh5CRyuYXl.png?width=800)
・関数名は分かりやすい任意の名前にする。組み込み関数名は使用不可。
・引数は指定しなくても良い。その場合、()空欄としておく。
・引数は複数指定できる(引数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))
合格
クラス
クラスは「データ(アトリビュート)」と「処理(メソッド)」をまとめたもの。
![](https://assets.st-note.com/img/1717219745625-qG7kPTLnqV.png?width=800)
・クラスはレシピ
クラスは料理のレシピのようなものです。レシピには、その料理を作るために必要な材料や手順が詳しく書かれています。レシピ自体は食べることができませんが、このレシピを基にして実際の料理を作ることができます。
![](https://assets.st-note.com/img/1717240455801-h2UmfPhdri.png?width=800)
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 属性を使って、料理の名前と材料を出力します。
・インスタンスは実際の料理
インスタンスは、レシピを基に作られた実際の料理です。レシピからたくさんの料理を作ることができ、それぞれの料理(インスタンス)は独立しています。
![](https://assets.st-note.com/img/1717241262532-XV6h6lVrxg.png?width=800)
spaghetti = Recipe("Spaghetti", ["pasta", "tomato sauce", "garlic"])
pancake = Recipe("Pancake", ["flour", "milk", "egg", "sugar"])
Recipe クラスから spaghetti と pancake という2つのインスタンスを作成しています。それぞれのインスタンスは、名前と材料リストを持ちます。
・アトリビュート(属性)は料理の材料や名前
属性は料理の材料や名前を表します。例えば、材料(ingredients)や料理の名前(name)が属性にあたります。これらの属性は各料理ごとに異なる値を持つことができます。
![](https://assets.st-note.com/img/1717241446460-pRjOikBbUD.png?width=800)
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'] になります。
・メソッドは料理を作る手順
メソッドは料理を作る手順や動作を表します。例えば、料理を実際に作る動作です。メソッドを呼び出すことで、その料理を作る手順を実行できます。
![](https://assets.st-note.com/img/1717241796466-LgJqZCyh6C.png?width=800)
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からは自動でダウンロード
・コード例
![](https://assets.st-note.com/img/1717249147510-grjQsoiN9F.png?width=800)
webdriver.Chromeを使ってChromeブラウザを開く。
指定されたURL(https://example.com)にアクセス。
ページのタイトルを取得して表示。
特定の要素(この例ではIDがsome_idの要素)を取得して、そのテキストを表示。
フォーム(名前がqの要素)にテキストSeleniumを入力し、Enterキーを押す。
検索結果が表示されるのを待つ。
検索結果の最初のリンクのテキストを取得して表示。
ブラウザを閉じる。
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
ウェブページの構造を記述するための言語で、テキスト、画像、リンク、リスト、テーブル、フォームなどを様々なタグを使用して(囲って)記述される。
![](https://assets.st-note.com/img/1717825752690-igTWEq0xJA.png?width=800)
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>
ページのフッターセクションです。著作権情報などが含まれます。
この記事が気に入ったらサポートをしてみませんか?