highlighter

Donnerstag, 12. Juni 2025

dummy

this is a dummy post. I'll delete it later.

Sonntag, 9. Februar 2025

瀧山大滝・熊野岳(蔵王山) 2025/2/8(sat) - 2025/2/9(sun)

  Club Tourismさんでの参加です. 東北地方の山形県や岩手県辺りになつてきますと個人で車で往くには往復の時間が大分えらい事になりますので新幹線移動が前提となつてきます.

  一日目は瀧山大滝(りゅうざんおおたき)での氷瀑見学を行いました, 目的の滝迄はおおよそ二時間の歩行時間が目安で堰堤を二つ越えると間もなく到着します, 当日は一瞬だけ晴れて青空が覗くも矢張り天気予報通りほぼ一日雪模様でした, また, 最奥の滝迄登つていたのは私達団体を除きますと現地に住まわれている男性御一方のみでしたので半分以上ラッセルで進む形でした. ですが肝心の薄青色の美麗な氷柱が見られて大変良かつたです.

  ガイドさんの説明ままですが, 東北の蔵王近辺に措ける氷柱は珍しいそうです. 理由は二点あり火山活動で出来た山が多いため地下から上がつて来る水が温かいので凍り難いと謂ふのが理由の一つ, もう一点は凍つても深雪に埋もれて隠れてしまうとの事でした.

  宿泊は天童市街中心付近に在りますホテルビューくろださんで一泊しています, 夕・朝食がとても美味で芋煮が最高でしたし全体的にボリュームが凄いです, 朝から焼売にロールキャベツとか. 天童市と謂えば将棋の駒で有名ですので何時かは街観光でも訪れたく思ひます.

  二日目が今ツアーのメインである熊野岳(蔵王山), 登りでは蔵王ライザスキー場でリフトを二つ乗りスキー場の最上部から登山を開始しています. 本来は熊野岳山頂迄登る予定でしたが素晴らしい寒波が丁度訪れておりましたので稜線付近は地吹雪&強風で素人目に見上げても洒落にならないよねと謂つた具合でしたので, ガイドさん判断により七八合目近辺で折り返す結果となつております. 樹氷(スノーモンスター)は一応見られましたので樹氷見学登山との目標は達成されたと思ひます, 下りはリフトへは乗らずにゲレンデ横の樹林帯を通り下迄下りました.

  下山後はホテルルーセントタカミヤさんにて温泉に浸かり, 後帰路へ就きました.

  行き帰りに使う駅は共に山形駅予定ではあつたのですが雪が多過ぎて新幹線が山形側には行かぬという事で行きが仙台駅, 帰りは福島駅と謂う大分例外な形でした. ガイドさんやバス運転手さんは仕事とは謂え大変ですよね, 向かつている途中, 又は, 既に到着して待機しているところに別の駅に来てくれとなつて百キロ以上離れた場所へ急いで移動したりする訳ですから, ツアー様様です. 雪は好きですが多過ぎつてやつは困りもので.

  添乗員は奥泉さん(以前に奥穂のツアーでご一緒している), バスの運転手はトランスオーシャンバス株式会社のオオタさんで御座いました. クラツーでの東北山域ツアーではガイドが五十嵐さんの場合が多いとの事ですのでご利用されますとお会いする機会もあるのではないかと存じます.

  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  

Samstag, 25. Januar 2025

Extracting tags with BeautifulSoup4

  h2とh3の構成と内容だけ知りたい事がままあると思います.

  既にcmdやpowershell上でpythonコマンドが実行可能な状態である事だけが前提で, 下記の二行が追加で必要なコマンドです.

  • python -m pip install requests
  • python -m pip install beautifulsoup4

  以下は参考にいたしましたpython programming youtuberさんの動画です(使用モジュールは説明そのままです).
  youtube : 【PythonでWebスクレイピング】Beautiful Soupの使い方解説! 〜 初心者向け 〜 プログラミング入門
  動画を10分一寸のところ迄見れば後は自分で自在に使えるやうになる筈です.

  以下はソース, 適当なテキストファイルに記述して拡張子は.pyで保存します.

import requests
import sys
from bs4 import BeautifulSoup
import time

def main():
  soup = BeautifulSoup(requests.get(sys.argv[1]).text, 'html.parser')
  if None != soup.find('body'):
    for h2 in soup.find_all('h2', class_="hogepi_2"):
      time.sleep(1)
      if h2.string != None:
        print(f'{h2.string}')
      for h3 in soup.find_all('h3', class_="hogepi_3"):
        time.sleep(1)
        if h3.string != None:
          print(f'    {h3.string}')

if __name__ == '__main__':
  if len(sys.argv) < 2:
    sys.exit()
  main()

tag2 1

tag3 1

tag3 2

tag3 3

tag2 2

tag3 4

tag3 5

tag3 6

  で, 適当に自分の記事に掛けて結果をテキストファイルへ出力してみますと......私は普段見出しを"無視して書いている"のとblogの設定的な事もあるのか思つた通りの形ではありませんがそれとなく取得出来たやうです(正しく構成されたページだと綺麗に取得出来ました).
  
  h2の下にh3が居るので単純にh2の前でh1かbodyを見ればいけるか(?)と試したら駄目で, 個別ページのソース全体を確認したところ右側のサイドバーのウィジェットがh2で定義されていたのでその回数分ループが回り, h3も釣られて大量に回つていたのでした. classを適当に追加したら予期した形となりましためでたし......じゃないですねえ, 良い感じだけれどh3の1~3と4~6が綺麗に分かれていませんでした. h3が全て同じclassなのでどのh2配下なのか区別出来ないからしゃーない.
  

  ちょびつとhtmlの構成を覗きたい時用に.

import sys
import requests

class req():
  def __init__(self, url):
    self.r = requests.get(url)

  def r1(self):
    print(f'encoding:{self.r.encoding}, apparent_encoding:{self.r.apparent_encoding}, headers:{self.r.headers}')
    print(f'response_body:{self.r.content}')
    print(f'encoded_response_body:{self.r.text}')
  def r2(self):
    # unimplemented
    pass
  def r3(self):
    # unimplemented
    pass

def main(url):
  r = req(url)
  r.r1()

if __name__ == '__main__':
  if len(sys.argv) > 1:
    main(sys.argv[1])
  else:
    sys.exit()

Montag, 30. Dezember 2024

松之山温泉スノーパーク 2024/12/30 (mon)

  此処数年の年末と謂えば何処かしらへ雪遊びに出るのが恒例になつており2024年度も例に漏れずスキーをしに新潟へ訪れました, 松之山温泉へは前々回(?)に来ており其処から車で5分も掛からない程度の位置にあります. 前日の29日には県内に居りまして天気予報を確認したところ30日以外に晴天の日が全くありませんでしたので大当たりを引けた結果となりました.

  雪の状態が良く全体的に緩斜面でコースが揃えられておりますのでゆつたり堪能する事ができましたし終日待ち時間0分でリフトへ乗られましたので半日券(4時間分)で十二分に滑走出来て満足致しました. 帰り際に"鷹の湯"さんへ再訪しやうとしましたが他の湯屋さん含め案の定混んでいそうでしたので今回は見送りしました, また訪れるので其の際に寄りたく存じます.

  
  
  
  

Sonntag, 24. November 2024

convert to png from heif | jpg on windows using with python

  iPhoneで撮り溜めた写真を一枚ずつ画像編集ソフトで変換すると辛いのでいい加減スクリプトを導入しました, 使うものはwindows標準のPowerShellとNotepadのみです.

  C:\\Users\\foobar\\Desktop*1へ変換後のファイルを出力しやうと思いましたらば権限エラーとなりましたので適当なフォルダをデスクトップ上に作成し其処へ出力する形にしたら無事変換出来ました. 読み込みはDesktop上直からで問題なかつたのでDesktopへの書き出し権限を変更出来るなら可能かもしれません(?).

  今回は盛り込みませんでしたがpythonの実行時に引数を渡せるのでそれをsys.argvで取得する事でファイルの読み込みパスと出力先パスの指定は簡単に変更可能です.

  画像のサイズ変更処理を追加&変換処理を関数へ切り出しました. 画像サイズの縦横比が1だつた場合は考慮しておりません(サイズ変更を行わない). 後は適当に使い勝手の良いやうにすれば良いと思います(調べればグレースケールetc etc情報が沢山出てきますので画像変換で遊ぶのも良いかと思われます).

  python-pillow.org :: Pillow

  以下必要な操作概略です.

  • ScoopとPythonのインストール(Pythonをインストールするに際し今回はScoopというパッケージマネージャを選択しました)
    • Set-ExecutionPolicy RemoteSigned -scope CurrentUser
    • invoke-Expression (New-Object System.Net.WebClient).DownloadString('https://get.scoop.sh')
    • scoop install python
    • scoop list
  • Pythonで変換する上で必要なモジュールのインストール
    • python -m pip install --upgrade pip
    • python -m pip install image
    • python -m pip install pillow
    • python -m pip install pillow_heif
  • 変換実行
    • 作成したスクリプトを変換したいHEICファイルの保存されているディレクトリに配置する
    • PowerShellのプロンプトでスクリプトを配置したディレクトリへ移動し"python foobar.py"*2と入力しエンターキー

import os
import sys
from PIL import Image
import pillow_heif

def heic_conv():
  heic_files = [f for f in os.listdir("./") if f.endswith('.HEIC') or f.endswith('.heic')]
  for heic in heic_files:
    output_file_name = os.path.splitext(heic)[0] + '.png'
    output_file_path = os.path.join(os.getcwd() + '\\output_pngs\\', output_file_name)
    output_heif_file = pillow_heif.read_heif(heic)
    image = Image.frombytes(
      output_heif_file.mode,
      output_heif_file.size,
      output_heif_file.data,
      "raw",
      output_heif_file.mode,
      output_heif_file.stride,
    )
    print(f'width:{output_heif_file.size[0]}, height:{output_heif_file.size[1]}')
    image_width  = 1600
    image_height = 1200
    if output_heif_file.size[0] > output_heif_file.size[1]:
      resized_image = image.resize((image_width, image_height))
    elif output_heif_file.size[0] < output_heif_file.size[1]:
      resized_image = image.resize((image_height, image_width))
    resized_image.save(output_file_path, 'PNG')
    print(f'converted {heic}')

if __name__ == "__main__":
  heic_conv()
import os
import sys
from PIL import Image

# jpg → png版, pillow_heicを使わない点とfrombytesの引数が若干違うだけです
def jpg_conv():
  jpg_files = [f for f in os.listdir("./") if f.endswith('.JPG') or f.endswith('.jpg')]
  for jpg in jpg_files:
    output_file_name = os.path.splitext(jpg)[0] + '.png'
    output_file_path = os.path.join(os.getcwd() + '\\outputs\\', output_file_name)
    img = Image.open(jpg)
    image = Image.frombytes(
      "RGB",
      img.size,
      img.tobytes("raw"),
      "raw",
      img.mode
    )
    print(f'width:{img.width}, height:{img.height}')
    image_width = 1600
    image_height = 1200
    if img.width > img.height:
      resized_image = image.resize((image_width, image_height))
    else:
      resized_image = image.resize((image_height, image_width))
    resized_image.save(output_file_path, 'PNG')
    print(f'converted {jpg}')

if __name__ == '__main__':
  jpg_conv()

  *1: foobarの部分はPCを使う方に因つて固有なものなので任意の名称を付けてください.
  *2: 脚注*1と同様です.