エンジニアのはしがき

プログラミングの日々の知見を書き連ねているブログです

JavaでJsoupとSeleniumでWebサイトをスクレイピングしてみた

最近IT系のニュースサイトをスクレイピングするプログラムを走らせて、ネットサーフィンする時間を節約するようになりました。 スクレイピングにはJavaのJsoup, Seleniumを使っているのですが、今回はその実装内容について書き残してみます!

続きを読む

任意の容量のファイルを生成したいとき

やりたかったこと

  • 任意の容量のファイルを生成したい
    • 背景としてファイルのアップロード処理における容量制限の手動テストをしたかった

動作環境

macOS, Linuxのターミナル、もしくはWindowsのGit Bashなら動作します

生成方法

# 乱数で構成された1KBのテキストファイルを生成する
$ base64 /dev/urandom | head -c 1000 > ./testfile.txt

# 生成されたか確認する
$ ls -l
total 4
...
-rw-rw-r-- 1 ec2-user ec2-user 1000 Apr 25 13:46 testfile.txt
...

コマンドの解説

base64 /dev/urandom

/dev/urandomで疑似乱数を取得し、base64Base64エンコードをしています。

/dev/urandomで取得できるランダム値はバイナリですが、Base64エンコードをすることでテキストとして扱えるようになります。

試しにtestfile.txtの中身を覗いてみると以下のようになっています。

$ cat testfile.txt
3DpGlb38eADUOZ77efFn8wfbArSBUg1+sewRT6mjFx9wJoEbdoSc94aabtyCTLYHTNXG93ME1iku
iJpHQoaGZjnBierOKYX2OQbKR8DAf8uYw5VLq74mhUGQKS6+9pp4yyG+eg754Kuz8UTaToCnNaJP
UAeCM4/oGVZJhE+DPvg86UZRxcsGTsmuAXXivVamxCZlwMJg0rkboSOZ2vxnDFl3JTB/FbvmyeHI
YfO8NEGWTrMZFJJqAOJ230fwUZAv4aLqGpdmFusSuaiptKibVR+H8ci8+oWmosi8tDfNHlval8yO
vM4I8KdVIRflZNPc05UU3qFgarkY3q7yNmJyU0q9nFzet3lsLfzFQ3HSCOzUCh/aOU5NPzRoLrgd
K1cEK4yWsuRauUr0EEHdLaF5+WjOu/41KR8zr1WO73q9dckDfcxyihfqKdqu1eGCX6h5KU6FmH2P
Ej41j+lP2TIYN11x/n5dlHShyv+hZy9F9VnW4mkrNOoCU7Uw/rv9GPf5FDLlNK3pZ7/0sxcQql4x
dpv0aNephMNWsaH4nPq8uAZ1WLN88MlDFQU2qPb5mUKKOHYawDLnq5UJaav/bFjzuXzYvuhauLKx
meAjuGBZrJVDOLnStIT7ictt15waWthMFhdyHcthrfZaE75kJJBQX8FMClOGpXvXCEdVKMfs96Og
bqV+9tqkcl0v7TXF8w+f0gPlISlmAkcS0vXaGsMcfcMy6fKOnf2CwxyWN/mhxvwZHWaA4/wlHtUz
zg098OaHPxGkmnkT0jZYvscHCfF1tYuBh4KWS+kkDIBpJC8aSkyoZ3izG/uULrlMgljilgnkEIt9
3WAOa+Wq40fb+i+0ifEsI2urGMHpOdGlv9sS7j4giEBQJYWc0MRflaEcyPCHOrGTyOzeif2yejiA
cjSgoh+UEQtn7zTswHAWZx/u8utGc65HzMt4oPvVHqfLiBlO1fxhTe6jDlciA6NTauC/4SLEe0I7

head -c 1000

先頭から1000byte分の値を抜き出します。

パイプでbase64 /dev/urandomと組み合わせることによって、Base64エンコードしたテキストの先頭1000byte分だけを抜き出しています。

あとがき

コマンドを叩くと問答無用でファイル生成するので、head -c ****で指定するbyte数を間違えないように気を付けましょう。

私は間違えて1GBのファイルを生成しました🤤

WindowsのGit Bashでmysqlに接続できなかった

Windowsで開発する時は、ターミナルとしてGit Bashを多用しています。が、たまに特有の仕様にひっかかってしまうことがあり、今回もそんなトピックとなります。

続きを読む

Serverless Framework+AWS Lambda(Java8)でHello worldしようとしたらNoClassDefFoundError

少しずつですがJavaのビルドツール周りも分かりかけてきたなという矢先、エラーで数時間ハマりました…😭

続きを読む

JavaのStream APIでよく使いそうな処理をまとめてみる

Javaの勉強中、コレクションを扱う時にC#Linq的な書き方ができたらなぁと思っていたのですが、Stream APIでかなり近いことができるようなのでまとめました。

続きを読む

Raspberry Pi OSのMariaDBへ別ホストからアクセスできるようにしたかった

Spring Data JPAについて調べる際に、ラズパイのMariaDBを検証用DBとして使っていたのですが、別ホストからのアクセス制御にちょっと時間を食ったので記録を残しておきたいと思います。なお、JPAについての記載は主題ではないため、あえて割愛しました。

続きを読む

CloudFront+S3でUnity WebGLを配信した

先日S3の静的ウェブサイトホスティングを使ってUnity WebGLを配信しました。 ただhttps化したい場合、S3単独ではできないのでCloudFrontと組み合わせる方法を解説してます。

手順的にはほぼReactやAngular等のフロントエンドアプリを独自ドメイン配信する時と同じです。

続きを読む

Javaでの非同期処理の方法についてピックアップした

まだまだJavaの勉強中です。 先日、そういえばJavaで非同期処理する方法をまだ知らなかったなぁと思い調べてみました。

続きを読む