

対象のwebサイトは鍵付きのためスクレイピングが使えないので、クリップボードにコピーしてからエクセルにペーストするコードを書きたいと考えています。

クリップボードにコピー→データフレームとして読み込み→CSV変換→エクセルに張り付けとしたいのですが、最初の段階で
`pandas.read_clipboard()` を使おうとすると以下のエラーが出てうまくいきません。

**エラーメッセージ**

[code]

    Pyperclip could not find a copy/paste mechanism for your system
    
[/code]

原因がわかる方、そもそも他のやり方を知っている方がいれば教えていただきたいです。  
コードはGoogle colabで書いています。


CC BY-SA 4.0
2019-12-18T04:50:01.367
61533
2022-11-04T05:45:56.377
2020-09-02T00:44:03.140
3060
37117
question
python pandas openpyxl
クリップボードにコピーしたweb上の表をエクセルファイルに張り付けるコードをPythonで書きたい


excelファイルを開くマシンが Webブラウジングマシンと同一であるならば, 単純に excel開いておいてペーストできます。  
それは Google スプレッドシートなど他の表計算ソフトも同様。

また `pandas.read_clipboard()` は colab では利用できません  
(詳しくは, 以下)

* * *

#### `pandas.read_clipboard()` を利用する場合

クリップボードは GUI システムが管理しているもので, クリップボードを直接読み取るには, GUIプログラムであるか
GUIライブラリーをリンクしている必要があります  
pandasはそのどちらでもないので, 外部の何らかの補助が必要 (以下, プラットフォームごとの read_clipboardで利用している機能)

  * Windows環境であれば 追加モジュールは必要ないが, windll / "msvcrt" など使ってる模様
  * Mac環境では `pyobjc` モジュールを使用しているので, それらが macOS に含まれていないといけない
  * Linux各種ディストリビューションでは, `xclip` or `xsel` パッケージを必要とする。あるいは `PyQt5`モジュールが必要

例えば `xclip` では, `libx11-dev` ライブラリーをリンクしてるはずで以下のようにできます

[code]

    $ echo -e "hello\nworld\n" | xclip -selection clipboard   # コピー
    $ xclip -selection clipboard -o   # ペースト
    hello
    world
    
[/code]

pandasは これらを内部で呼び出すことにより `read_clipboard()` を動かしている  
参考(ソース): [https://github.com/pandas-
dev/pandas/blob/master/pandas/io/clipboard/_ _init_
_.py](https://github.com/pandas-
dev/pandas/blob/master/pandas/io/clipboard/__init__.py)

* * *

Google colab では, OSには Ubuntuが使われてる模様

[code]

    !cat /etc/os-release   # セルで実行すると, 以下の内容が出る
    
    NAME="Ubuntu"
    VERSION="18.04.5 LTS (Bionic Beaver)"
    ID=ubuntu
    ID_LIKE=debian
    PRETTY_NAME="Ubuntu 18.04.5 LTS"
    VERSION_ID="18.04"
    HOME_URL="https://www.ubuntu.com/"
    SUPPORT_URL="https://help.ubuntu.com/"
    BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
    PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
    VERSION_CODENAME=bionic
    
[/code]

pandasの `pandas.read_clipboard()`を呼び出すと, その環境のクリップボードを取得するために,
先の各種ツールを利用しようとして … 失敗することになる  
ただし, サーバー側のクリップボード読み取れても意味がないので, 動作させるなら ローカルに Jupyter 環境整えないと駄目, ということです


CC BY-SA 4.0
2021-07-13T08:31:08.540
78149
2022-11-04T05:45:56.377
2022-11-04T05:45:56.377
43025
43025
61533
answer