highlighter

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と同様です.

Samstag, 3. August 2024

三ノ塔-行者岳 2024/08/03 (sat)

  今夏, 三ノ塔から登り行者岳を経て政次郎尾根で下山をした際に撮つた写真の全てです. 当初の目的は丹沢山頂から少し奥へ行つた地点にある米軍機のプロペラを観に往くものでしたが如何せん登りが暑過ぎて脱水した為か体調が悪くなつたのでこのコースとなりました, しかしながら山頂から秦野の夜景を夜間ずつと眺めていられましたし星(流れ星を含む)もこれでもかと謂ふ程満喫できましたので良しと致しました.
  夜間はアナグマ(?)のやうな外見の動物に遭遇したり, 翌日下山後にはキジ(?)のやうな容姿の鳥にもお逢いしましたし十二分ではないでせうか.


  二日間の合計歩行距離は18.60km前後(coros appでの確認)でした.
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  

Samstag, 15. Juni 2024

八海山 2024/06/15 (sat)

  お酒に近づかない方でも名前位は御存知であろうかと思われます新潟県南魚沼市に在ります岩峰群(いわみねぐん)・霊峰の一つである八海山, 最高峰は入道岳の1,778mです. 今回, 六日町八海山スキー場へ駐車し八海山ロープウェーへ乗り1,160m前後迄上がつてからの行程で登山を行いました, ロープウェーの山頂駅から西(霊泉小屋経由)で上がるコースもありますが今回選んだコースが最も多く使われているコースであると思われます.

  頂上付近の岩場迄は特段の事は御座いませぬが, 池ノ峰(1,296m) => コギ池 => 女人堂(にょにんどう) => 薬師岳(やくしだけ) => 千本桧小屋(せんぼんひのきこや)の順に上がり往復致しました. 千本桧小屋から先が所謂八海山の本体(?)で入道岳迄険峻な隆起が続きます, 当連峰を舐めていた訳では御座いませぬが足元の装備により不動岳(ふどうだけ)で引き返しております. 次回訪れる際は是非入道岳へ登りたく思つております. 少し見た感じですが巻き道もそこそこ険しい雰囲気でした.

  薬師岳辺りからは一気に風景が開けますので, 周囲の風景を愉しみつつも次に訪れる山を品定めするのも良いかと思います. 近くに魅力的な山はゴロゴロ転がつておりますので.

  巻機山でもそうでしたが無雪期でも駐車場やロープウェー乗り場の職員の兄貴に足装備を心配されましたので足元を軽装で歩いておられる方が訪れる場合は留意しておくと良いかもしれませぬ.