自動化無しに生活無し

WEB開発関係を中心に備忘録をまとめています

  • 【Python】気象庁のサイトから特定の都市の月ごとの平均気温をスクレイピングする

    気象庁のサイトで都市の月ごとの平均気温を表示させる 下記サイトへ行く。 https://www.data.jma.go.jp/obd/stats/etrn/index.php 地点を選択 月ごとの値を表示する 下記画像の1で地点を選ぶ、続いて月ごとの値を表示する これで問題のページにたどり着く https://www.data.jma.go.jp/obd/stats/etrn/view/monthly_s3.php?prec_no=44&block_no=47662&year=&month=&day=&view= 今回はこれをスクレイピングする。 ソースコード import requests, bs4 URL = "https://www.data.jma.go.jp/obd/stats/etrn/view/monthly_s3.php?prec_no=44&block_no=47662&year=&month=&day=&view=" #サイトへアクセス result = requests.get(URL) #構文解析(※ブラウザに表示されているHTMLとrequestsとBeautifulSoupで取得したHTMLは異なる場合がある。) soup = ...
  • 【Django】sympyで計算した結果をLatex記法でHTML上に出力、mathjaxを使って数式を表示

    Pythonには高度な計算を行う事ができるライブラリが充実している。 それを、端末を問わずに利用できるようにするには、Pythonをウェブアプリとして動作させる必要がある。つまり、Djangoを使うことになる。 だが、指数や対数、平方根などを、通常の文字列だけでHTML上に表現するには限界がある。 そこで、Latexの文字列を数式として表現できるmathjaxを使うことにした。 Djangoはいつもの40 ...
  • 【Django】モデルを使用したフォームクラスで、required属性を付与する

    モデルを使用したフォームクラスは、モデルの制約に依存する。 そのため、モデルの制約がゆるくても、フォームクラスで引き締めたい場合、別途対策が必要になる。 フォームクラスにrequired属性を付与する class TopicCategoryForm(forms.ModelForm): class Meta: model = Topic fields = [ "category" ] #TODO:categoryの入力を必須化させる def __init__(self, *args, **kwargs): super(TopicCategoryForm, self).__init__(*args, **kwargs) self.fields['category'].required = True コンストラクタをオーバーライドすれば良いそうだ。 参照元: https://stackoverflow.com/questions/44810064/form-required-field-in-django-model-forms ...
  • 【Python】正規表現モジュールreでパターンに一致した文字列を全て取り出す・全て置換する

    正規表現は普段から使っていないと、いざという時にどうなってたっけってなる。 だから備忘録としてまとめておく。 とりわけ、Pythonの正規表現モジュールreのメソッドはいろいろあるので、実用的な物に絞っておく。 全て取り出す 返り値はリスト型で出る。 import re target = "n1o2a3u4t5o-6n7o8li9f0e9.com" #数値を取り出す result = re.findall(r'\d', target) if result: print(result) #取り出した数値を連結する。 print("".join(result)) else: print("マッチなし") 全て置換する import re target = "n1o2a3u4t5o-6n7o8li9f0e9.com" print(target) #数値を置換す ...
  • 【Ubuntu】tesseractをインストールして、Pythonから画像の文字起こし(OCR)を試す【pytesseract】

    環境 Ubuntu 20.04 Python 3.8.10 Tesseract Open Source OCR Engine v4.1.1 with Leptonica 今回使用したPythonライブラリ packaging==21.3 Pillow==9.2.0 pyparsing==3.0.9 pytesseract==0.3.10 UbuntuへTesseractのインストール sudo apt install tesseract-ocr libtesseract-dev libleptonica-dev tesseract-ocr-jpn tesseract-ocr-jpn-vert tesseract-ocr-script-jpan tesseract-ocr-script-jpan-vert 日本語のOCRもできるように訓練済みのデータもインストールしている。 tesseract-ocr-jpn tesseract-ocr-jpn-vert tesseract-ocr-script-jpan tesseract-ocr-script-jpan-vert Tesseractの動作確認 以下画像をdjango.pngと名付けて解析してみる。 tesseract django.png output -l jpn ファイルはoutput.txtに出力される。出力結果はこうなった。 以下、流れ。 1. プロジェクトを作 ...
  • DjangoでPythonライブラリのマークダウンを試してみる【pip install Markdown】

    どうやらPythonライブラリにマークダウンを実現させるライブラリがあるそうだ。これがDjangoで扱えるらしい。 かなり前から、どうにかしてDjangoでマークダウンを実現できないかと考えていたが、ようやく見つかって良かった。 さっそく試してみる。 インストール pip install Markdown バージョンはこうなった。 importlib-metadata==5.0.0 Markdown==3.4.1 zipp==3.9.0 動かすとこうなる このマークダウンを読み込み、HTMLに変換してもらう。 ## Pythonの構文 ``` for i in range(6): print(i) print("hello") print("hello") ...
  • Ubuntu、WindowsにSeleniumで使用するFirefox用のgeckodriverをインストールする【Python】

    Seleniumとは? Seleniumとは、ウェブブラウザの操作を自動化するツールのひとつ。 とりわけ、Pythonライブラリとしても提供されている。(JavaやRuby用のライブラリもある。) つまり、Seleniumを使えば、Pythonでブラウザの操作を自動化できる。 必要な物は? Seleniumを使ったブラウザの自動化に必要な物は以下の4つ Pythonのコード SeleniumのPythonライブ ...
  • 【Django】ManyToManyFieldにはフィールドオプションvalidatorsは効果なしなので、フォームクラスに追加のバリデーションを【多対多は特殊】

    • 作成日時:
    • 最終更新日時:
    • Categories: サーバーサイド
    • Tags: django
    ManyToManyFieldにはvalidatorsフィールドオプションは通用しない。 そのため、モデル側から何らかの制約を課すことはできない。 だから、フォームクラスに追加のバリデーションを書き込む。 今回はManyToManyFieldのタグを2個までとするバリデーションを追加する。 モデル from django.db import models from django.conf import settings from django.utils import timezone class Tag(models.Model): name = models.CharField(verbose_name="タグ名 ...
  • 【Django】ManyToManyFieldで検索をする方法、追加・削除を行う方法【多対多はクエリビルダの検索は通用しない】

    • 作成日時:
    • 最終更新日時:
    • Categories: サーバーサイド
    • Tags: django
    背景 TopicとTagの多対多のリレーションを組んだ状況で。 # この場合、1を含んでいるという意味になる data = Topic.objects.filter(tag=1) print(data) # この場合、1もしくは3を含むデータが手に入るが、重複する。.distinct() で除外できる。 # しかし1だけ、3だけのデータも取得できてしまう。ほしいのは1と3を含むデータ data = Topic.objects.filter(tag__in=[1,3]).distinct() print(data) 複数のタグ検索が正常に機能してくれない状況にある。(1だけ、3だけではなく、1と3を含んだデータのみがほしい ...
  • 【Django】Django4.0以上はsettings.pyにて、CSRF_TRUSTED_ORIGINSにオリジンを指定しないとPOSTリクエスト時に403Forbiddenになる

    背景 下記記事に倣って、EC2に独自ドメインを指定して、デプロイを完了させた。 【AWS】EC2にムームドメインで取得した独自ドメインを割り当て、HTTPS通信を行う【Route 53 + Certificate Manager + ロードバランサ(ELB)】 その後、POSTメソッドのリクエストを送信する際、どう頑張ってもCSRF検証に失敗したというエラーが出てしまう。 CSRF Failed: Referer checking failed - https://*********************.com does not match any trusted origins. これはなぜか。どう対策をすれば良いのかをまとめてみた ...