Tech」カテゴリーアーカイブ

pythonを使ったGoogle検索結果のWebスクレイピング にトライ。

Pythonを使ったらWebスクレピング(狙ったWebサイトから、特定の文字列を抜き出すこと)が簡単に実現できる。

いろいろと方法はあるようだけど、一番学習コストが低くてサクッとできそうなので、Beautiful Soup(ビューティフル・スープ)を使ったスクリプトに挑戦

参考サイトはこちら。コードもシンプルで素敵だし、解説も分かりやすくで参考になった。

【Webスクレイピング入門】Google検索の上位サイトを件数指定して表示する方法

一部だけ変更。抽出したURLに「&sa=U&」+α の文字列が表示されていて、そのままではURLをクリックしても「ページが表示されない」ので、当該文字列以降を除外して、URL抽出するようにした。

具体的には、以下の部分。(上の行:もともと、下の行:変更後)

#site_url = site["href"].replace("/url?q=", "")
site_url = site["href"].split("&sa=U&")[0].replace("/url?q=", "")

kCrYT の部分がサイトタイトルとURLのあるHTMLタグだとか、Google検索の仕様のようだが、調べるのに骨が折れそうなので、まとめてあるサイトがあって助かった。

Linux Mint がやっぱり良い、という話。

最近リリースされたばかりの Ubuntu MATE Jammy Jellyfish を半月程度使ってみたが、僕のPCでは低スペックということもあって、操作レスポンスの若干の遅れが気になっていた。

とうとう我慢の限界に達したので、Linux Mint を再インストール。低スペックPCを意識したディストリビューションということで、やっぱり操作性は上だし、使っている主要サービスはクラウドばかりなので正直OSはほぼ関係なく、結果、Mint に軍配が上がった

インストールしたのは Linux Mint 20.3 Cinnamon というディストリビューション。

僕のPCのスペックは以下の通り。

システム情報の画面。Mintのスタートボタンから検索ですぐ出てくる。

ちなみに、2022年9月には、新しい Mint がリリースされる予定らしい。インストールする気満々なので、リリースされるのが楽しみだ。

Linux Mint で作業環境を構築してみた。

中古ノートPCを購入。ヤフオクで、中古相場が3万円の Let’s note を安く落札できた。ラッキー。

ただ、10年くらい前の機種でスペックが低いので、Ubuntuを入れてみたが、どうもメモリ不足で動きがもっさりしているので、かなり久しぶりにLinux Mintを試すことにした

結論、かなりサクサク動く。

Linux Mint って、優秀だ。そもそもの思想的に、低スペックPCでも動くようになっているのもあるが、とにかくサクサク動いてくれるし、正直、他のOSと同等の利用感だ。

それに、最近はSaaSよろしく、大抵がWebブラウザで動くから、僕が求めている環境は標準搭載されているFirefoxで、ほぼ実現できる。ちなみに、以下。

  • Notion ←FirefoxでOK
  • Pythonの開発環境としてテキストエディタ ←標準エディタで十分
  • Teams ←アプリの方が便利
  • GmailとかGoogleのサービス ←FirefoxでOK

これだけというのもあるが、全く不便なく使えている。

ちなみに、Teamsは以下のURLを参考にDL完了。簡単にいうと、Mintに標準で入っている「ソフトウェアマネージャ」を起動させて、検索窓でTeamsを探してインストールすればOK。

How to Install Microsoft Teams on Linux Mint

Mintのソフトウェアマネージャの画面

Pythonの開発環境も、ターミナルと標準テキストエディタを駆使すればOK。大規模な開発だと、Visual Studioとか使いたくなるだろうけど、そうでなければ十分だし、操作に慣れればむしろサクサク開発できる。

試しに使い始めたMintだけど、これがきっかけではまっていくかもしれない。

Ubuntu MATE 22.04 Jammy Jellyfish に MS Teamsをインストールする方法。

Teamsをよく使うので、Ubuntu MATE 22.04 Jammy Jellyfish にもインストールしてみた。が、少し手間取ったので、以下のとおりまとめておく。誰かの役に立てたら幸い。

結論

以下でサクッとインストール完了。

$ sudo snap install teams

注意点

  • GUIでインストールした場合は、インストール完了するも、Teamsを起動すると添付の画面で止まってしまい、起動完了できない。
  • Terminal で「 sudo apt intall teams 」としても、同じ症状が出てしまう。
  • なぜか、snap だと起動できる。
Teams がうまく起動できない状態。エラーなども吐かれない。

経緯(試したこと)

MSのサイトで Teams for Linux をダウンロードして、ダウンロード下ファイルを実行→インストールと、GUI(表示される画面)にしたがってポチポチとクリックすれば、インストールは完了した。

大体は、あとはこれで Teams を起動したら、ログイン画面に進んで無事に起動、となるはずだが、上図のように、起動の途中で止まってしまう。

アンインストールしてもやっぱりダメで、同じ症状が出てしまう。

Teams のブラウザ上で起動できるので、それで対処しようとトライしたが、なんと Firefox は対応していない模様。Chrome をダウンロードして試したが、正常に起動できた。

ただ、Ubuntu だし、使っているPC(10年前くらいの Let’s note CF-SX2)なのでスペックも高くないから、メモリをガンガン消費しまくる Chrome は少し辛い。

ということで、Firefox にこだわって、なんとか Teams をデスクトップアプリとして起動できないかを探ることに。

Ubuntu のコミュニティ(掲示板)に投稿したら、「Terminal から起動したら情報ゲットできると思うよ?」とのコメントあり。

なるほど、たしかにそうだ。GUIに慣れすぎていた。Geek になるために Terminal ともっと仲良しになろう。

ということで、以下を実行。参考サイトも分かりやすかった。

$ sudo apt install teams

無事にインストールが完了。念のためPCを再起動して、以下のコマンドで Teams を起動。

$ teams

しかし、またしても同じ症状が出てしまった。

さて、どうしたものか…。少し考えて、ふと「そういえば、snap って使ったことないな」と思い、試してみることに。

$ sudo snap install teams

すると、無事にインストールも完了し、同じくコマンド起動したら無事に Teams が起動してくれた。その後も、MSにサインインして、正常に動作してくれた。

こういうこともあるもんだ。勉強になった。

参考サイト

How to install Microsoft Teams on Linux

Ubuntu の wifi が動作不安定だったので頑張って解消しようとしたけど、結局、様子を見ることにした話。

10年前くらいのだけど状態が良い Let’s note を、ヤフオクで落札。届いてみたら、本当に状態が良くてびっくり。ほとんど使われていなかったのでは?と思えるくらいのキレイな一品で大満足。

とはいえ、OSがWin7だったので、Linux使いたい気持ちを抑えきれずに Ubuntu MATE Jammy Jellyfish 22.04 を入れてみた。ちょうどローンチされたばかりだり、ちょうど良い。(ちなみに、その前には Linux Mint を入れてみた。動作安定していてなんの遜色もなく使えて、素晴らしいと感動した次第)

Free wifi を使っていると、Free wifi の時間制限でセッション断するタイミングで、こちらの wifi が変になる。具体的には、wifiのインタフェース部分が「デバイスの準備ができていません」と表示されてしまう。Free wifi じゃなければ問題なく使えるのに、なぜだろう…?

以下、ifconfig の結果。

hiro@CF-SX2JEADR:~$ ifconfig
enp0s25: flags=4099 mtu 1500
ether 04:20:9a:41:df:17 txqueuelen 1000 (イーサネット)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 20 memory 0xf7f00000-f7f20000

lo: flags=73 mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10
loop txqueuelen 1000 (ローカルループバック)
RX packets 247 bytes 22877 (22.8 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 247 bytes 22877 (22.8 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions

wlp2s0: flags=4163 mtu 1500
inet 10.51.158.213 netmask 255.255.252.0 broadcast 10.51.159.255
inet6 fe80::7c35:93f6:309:ba30 prefixlen 64 scopeid 0x20
ether 64:80:99:64:a2:e4 txqueuelen 1000 (イーサネット)
RX packets 25560 bytes 33273876 (33.2 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 7535 bytes 673521 (673.5 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

このPCで使っているwifiのインタフェースは wlp2s0 らしい。wifiで通信できているときは、上記のようにIPアドレスが振られているが、通信できていないときは、もちろん表示されない。

色々とぐぐってみると、デバイスドライバをアップデートしたら安定した、という情報があった。OK試してみようと、まずは今のドライババージョンとか情報をチェックしたくなった。

以下が、sudo lshw -C network の結果。

hiro@CF-SX2JEADR:~$ sudo lshw -C network
[sudo] hiro のパスワード:
*-network
詳細: イーサネット interface
製品: 82579LM Gigabit Network Connection (Lewisville)
ベンダー: Intel Corporation
物理ID: 19
バス情報: pci@0000:00:19.0
論理名: enp0s25
バージョン: 04
シリアル: 04:20:9a:41:df:17
容量: 1Gbit/s
幅: 32 bits
クロック: 33MHz
性能: pm msi bus_master cap_list ______ physical tp 10bt 10bt-fd 100bt 100bt-fd 1000bt-fd autonegotiation
設定: autonegotiation=on broadcast=yes driver=e1000e driverversion=5.15.0-23-generic firmware=0.13-4 latency=0 link=no multicast=yes port=twisted pair
リソース: irq:29 メモリー:f7f00000-f7f1ffff メモリー:f7f41000-f7f41fff IOポート:f080(サイズ=32)
*-network 無効
詳細: 無線インターフェース
製品: Centrino Advanced-N + WiMAX 6250 [Kilmer Peak]
ベンダー: Intel Corporation
物理ID: 0
バス情報: pci@0000:02:00.0
論理名: wlp2s0
バージョン: 5e
シリアル: 64:80:99:64:a2:e4
幅: 64 bits
クロック: 33MHz
性能: pm msi pciexpress bus_master cap_list ______ physical wireless
設定: broadcast=yes driver=iwlwifi driverversion=5.15.0-23-generic firmware=41.28.5.1 build 33926 6050-5.uc latency=0 link=no multicast=yes wireless=IEEE 802.11
リソース: irq:33 メモリー:f7d00000-f7d01fff

ん?「*-network 無効」って表示される。これが原因か?


けれど、デスクトップ右上のNWのアイコンをチェックするに、wifiは有効になっている。試しにこの状態で ifconfig してみると、以下の通り、wifiが表示されなかった。

hiro@CF-SX2JEADR:~$ ifconfig
enp0s25: flags=4099 mtu 1500
ether 04:20:9a:41:df:17 txqueuelen 1000 (イーサネット)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 20 memory 0xf7f00000-f7f20000

lo: flags=73 mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10
loop txqueuelen 1000 (ローカルループバック)
RX packets 14332 bytes 1071907 (1.0 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 14332 bytes 1071907 (1.0 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

なるほど、ハードウェアが認識されなくなっているのか。そりゃ、通信できないわ。wifiが有効になっているのと、ハードウェアが認識されているのは、別なのか。。。

PCを再起動すると認識してもらえる。そして、もちろんwifiも使える。
ということで、症状をまとめると、以下だと分かった。

  • Free wifiを使うことができるが、セッションタイムアウトでwifiルータから一方的に切断されると、wifiのハードウェアが認識されない状態になる。ただし、ソフトウェア上はwifiONになっている。
  • PCを再起動すると通常通り使える。すなわち、PC起動中のプロセスでwifiのハードウェアインタフェースもONになるのだろうが、その際はちゃんと認識される
  • Free wifi のセッションタイムアウトのように、wifiルータ側から一方的に通信断されるとハードウェアはOFFになるがソフトウェア的にはwifiONのまま。

ということで、wifiのハードウェアを手動でONにしてみることに。

しかし、以下のエラーが出てONにならず。

hiro@CF-SX2JEADR:~$ sudo ifconfig wlp2s0 up
SIOCSIFFLAGS: 入力/出力エラーです

ググってみたけど、ドライバが正常に動作してない場合とかによく出るメッセージの模様。よし、やっぱりドライバを最新にしてみるか。。

以下、lspci の結果。

hiro@CF-SX2JEADR:~$ lspci
00:00.0 Host bridge: Intel Corporation 3rd Gen Core processor DRAM Controller (rev 09)
00:02.0 VGA compatible controller: Intel Corporation 3rd Gen Core processor Graphics Controller (rev 09)
00:04.0 Signal processing controller: Intel Corporation 3rd Gen Core Processor Thermal Subsystem (rev 09)
00:14.0 USB controller: Intel Corporation 7 Series/C210 Series Chipset Family USB xHCI Host Controller (rev 04)
00:16.0 Communication controller: Intel Corporation 7 Series/C216 Chipset Family MEI Controller #1 (rev 04)
00:19.0 Ethernet controller: Intel Corporation 82579LM Gigabit Network Connection (Lewisville) (rev 04)
00:1a.0 USB controller: Intel Corporation 7 Series/C216 Chipset Family USB Enhanced Host Controller #2 (rev 04)
00:1b.0 Audio device: Intel Corporation 7 Series/C216 Chipset Family High Definition Audio Controller (rev 04)
00:1c.0 PCI bridge: Intel Corporation 7 Series/C216 Chipset Family PCI Express Root Port 1 (rev c4)
00:1c.2 PCI bridge: Intel Corporation 7 Series/C210 Series Chipset Family PCI Express Root Port 3 (rev c4)
00:1c.4 PCI bridge: Intel Corporation 7 Series/C210 Series Chipset Family PCI Express Root Port 5 (rev c4)
00:1d.0 USB controller: Intel Corporation 7 Series/C216 Chipset Family USB Enhanced Host Controller #1 (rev 04)
00:1f.0 ISA bridge: Intel Corporation QM77 Express Chipset LPC Controller (rev 04)
00:1f.2 SATA controller: Intel Corporation 7 Series Chipset Family 6-port SATA Controller [AHCI mode] (rev 04)
00:1f.3 SMBus: Intel Corporation 7 Series/C216 Chipset Family SMBus Controller (rev 04)
00:1f.6 Signal processing controller: Intel Corporation 7 Series/C210 Series Chipset Family Thermal Management Controller (rev 04)
02:00.0 Network controller: Intel Corporation Centrino Advanced-N + WiMAX 6250 [Kilmer Peak] (rev 5e)
03:00.0 Unassigned class [ff00]: Realtek Semiconductor Co., Ltd. RTS5229 PCI Express Card Reader (rev 01)

当該部分は、以下。

2:00.0 Network controller: Intel Corporation Centrino Advanced-N + WiMAX 6250 [Kilmer Peak] (rev 5e)

ネットで調べてみたけど、分からなくなってしまった。そもそも、Free wifi じゃなければ普通に使えるから、変にドライバをアップデートするのも憚られる

今はwifi使いたいから、繋がらなくなったら再起動という運用対処にしておこうと思う。

それに、ググっても最新ドライバがどこにあるのか分からず…。さらに言うと、今使っているドライバのバージョンも分からず…。

かける時間の割に得るものが少ない気がするので、一旦ここでストップしよう。

【追記】

その後、なぜか普通に使うことができている。Free wifi のルータの調子か?それとも、日中だったので、利用ユーザが多かったとかが原因か?兎にも角にも、変にドライバをいじらなくて正解だった。気持ち悪いけど、一旦、このまま様子見とする。

ブログのデザインとGoogle Adsenseでの葛藤。

ブログを書く第一目的は「自分のログ」だ。

今まで自分がどういう思考や体験をして、成長してきたか・成長しているかを記録して、振り返ることでより自分成長につながるだろうし、もしかしたら、世界のどこかの誰かのためになるのでは?という思いで書いている。

とはいえ、せっかくお金も時間もかけて運営しているので、どうせなら収益化にもチャレンジしたい。

ブログ収益化も様々な方法がある中で、自分には「できるだけ放置」が合っていることに気づいたので、Google Adsense を導入している。

ここで、一つの葛藤が生じた。デザインが損なわれる、ということだ。

クリック報酬型なので、露出機会が多く、また大きなサイズでアピールすることもポイントなのだろうが、ブログデザインとのトレードオフになると痛感した。

記事の中に埋め込まれると、文章が非常に読みにくくなる。僕は、途端に読む気が失せてしまうから、違うページに移る。

自分のブログで、読み手にこういうマイナス感情を抱いてほしくないので、広告はできるだけ使いたくない、というか使いたくない。

ということで、Google Adsense の設定で、上部 or 下部のみに表示するようにした。今の所、これが我慢できるギリギリのラインだ。

Google Adsense の設定

上図の表示方法は、「Google Adsenseにログイン>左側メニュから「広告」>サマリ >サイト名の右側にある鉛筆マーク(編集)」 だ。

一旦、この形式で運用しつつ、様子を見ることにしてみる。

文字コードの問題って本当に厄介…。

Visual Studio 使って、Win環境でPythonコーディングしている。

YouTube Data API を使って、取得したデータをCSVに吐き出したい。骨格となるプログラムは組めている。

しかし、出力したあとのCSVファイルの中身を見ると、どうやら Unicode のまま吐き出されていて、しかもなぜか 「Unicode の羅列が文字列として格納」 されている。なぜ?

テキストエディタの読み込み文字エンコードをUTF-8にしても、Unicode の羅列自体が文字列として入力されている?っぽいので、文字化けは直らず。というか、そもそも文字化けでもないってことか…?

Visual Studio は デフォルトで UTF-8 で作業しているから、その関係? Win は 相変わらずShift-jis ?

どこをどう直せば良いのかさっぱり分からず、途方に暮れているところ…。

ノートに書き出してみよう。こういう時は、ノートとペンで頭と状況を整理するのが一番。

インターネットの有線と無線の両方を接続した場合→Windowsは有線が優先。

有線も無線も接続した場合は、確か「有線が優先となる」はずだったよな、と思いつつ、念のため確認してみた。

結果、(少なくともWndowsは)、有線が優先となる。

ちなみに、「タスクマネージャ」で確認できた。Ctrl + Alt + Delete で「タスクマネージャ」を選択→起動して、画面にある「パフォーマンス」のタグを選択。

すると、wifiのみの場合は「wifi」と、有線接続した場合は同じ箇所が「イーサネット」と表示される。これは知らなかったからおもしろかった。なんだか得した気分。

wifiのみ使っている場合。↓

【タスクマネージャ】wifiのみ使っている場合

有線接続した場合(wifiもONにしてIPアドレスふられている)。↓

【タスクマネージャ】有線接続した場合(wifiも接続)

近頃は、99%をwifiで過ごしているから、有線接続したのは久々。安定した通信をしたい場合は、やっぱり有線だよな、としみじみ思った。

YouTube Data API v3 のクォータ使用量を確認…せざるを得なかった話。

YouTube Data API を試していたが、API叩きすぎてクォータ上限に達してしまった。もっと叩かせてください、Google先生…。ま、仕方ないか。

表示されたエラーメッセージは、こんな感じ。↓

{
  "error": {
    "code": 403,
    "message": "The request cannot be completed because you have exceeded your \u003ca href=\"/youtube/v3/getting-started#quota\"\u003equota\u003c/a\u003e.",
    "errors": [
      {
        "message": "The request cannot be completed because you have exceeded your \u003ca href=\"/youtube/v3/getting-started#quota\"\u003equota\u003c/a\u003e.",
        "domain": "youtube.quota",
        "reason": "quotaExceeded"
      }
    ]
  }
}

一応、調べてみた。こちらが YouTube の Developer 向けサイト。

【YouTube】クォータの使用量

実際どのくらい使ったんだろうと思って、上記サイトの 「アプリケーションで使用できるクォータは、Cloud console の [Quotas] ペインで確認できます」を頼りにリンクをクリックしたのだが、どうやらリンクが古いようで表示されず…。

調べたところ、以下のサイトからチェックできることが分かったので、リンクを貼っておく。Developer Console の「APIとサービス」にて確認できる。

【Google Cloud Platform】APIとサービス

【GCP】APIとサービスの画面

気になる「解放までの時間」だが、どのくらいなのか見当がつかない…。丸一日?少なくとも1時間では解放してくれなかった。

気長に待つことにする。(それか、新しいPJを作成するか…)

追記

3時間くらいで復活してた。

Google でランディングページを作成する方法を教えてくれる公式サイト。

GmailやGoogle Calendar など、無料だけど超秀逸なツールをGoogleは提供してくれている(その代わり、僕たちの利用データを使わせているんだけど)。

Google siteは、自分のWebページ(ホームページ)を、簡単に作成して、簡単に公開できるツールだ。

作り方のレクチャサイト(公式)を発見したので、ご紹介。ランディングページなんなのか、以下の説明が一番わかりやすかった。

【Google】Introduction to Create a One-Page Website

ランディングページの説明(Google公式サイトより)

ところで、DAOの時代になると、Googleのビジネスモデルがどう成長するのか、とても興味深い。現在の経済構造は中央集権型で、ITの世界でも同じ。

GAFAMと言われて久しいが、彼らの中央集権モデルは、DAO(自律分散型組織)でどこまで影響力を保ち続けることができるのか。考えただけでワクワクする。