利用者:IAX86/例のスクリプトをちょっと改変した話
ナビゲーションに移動
検索に移動
本家さんがAPI版へ改変されたため移動しました。おそらく向こうを使った方が良いと思います。
よみものページ | |
この「よみもの」は、IAX86が作成したものです。 他ユーザーの編集も歓迎いたします。 |
最近何かと話題になっているWebスクレイピングツールですが、私の環境では少々不便だったため、モジュールを追加してもう少し使いやすくしてきました。
改変理由[編集]
私のパソコン環境はWindows8.1[1]なのですが、それでコマンドプロンプトやその他シェルプログラムを使うと、なぜか改行が大量発生してしまいます。
改行除去さすがに面倒すぎる。[2]
ということで、一発でクリップボードにコピーするようにしてきました。
導入方法[編集]
基本はこっちを。ここでは追加事項のみ。
- 準備編の最後に、
pyperclip
をぶち込んでください。次のコマンドで、どうぞ。
- 補足説明方式:
pip install pyperclip
- pipを直に呼べない方式:
py -m pip install pyperclip
- 補足説明方式:
ソース[編集]
普通にescape.py
か何かで保存してください。
#-------------------------------------------------------------------------------
# Author: WxYuki
# Created: 24/09/2022
# Copyright: (c) WxYuki 2022
# Licence: CC by-sa 3.0
#-------------------------------------------------------------------------------
# Modified by: IAX86
# Modified date: 12/04/2023
#-------------------------------------------------------------------------------
import requests
from bs4 import BeautifulSoup as bs
import urllib.parse
import pyperclip
article_name = urllib.parse.quote(input(">>記事名を入力(ソースを抽出します)"))#受付
#記事ソース
url = "https://ja.wikipedia.org/w/index.php?title={}&action=edit&veswitched=1".format(article_name)
article = requests.get(url,timeout=(10.0, 15.5))#ソースを持ってくる
article_soup = bs(article.text,"html.parser")#解析
as_data = article_soup.find("textarea").text#タグ担当
pyperclip.copy(as_data)
enter1 = input("記事ソースをクリップボードへコピーしました。Enterキーを押すと、引き続き要約欄の準備、コピーを行います。")
#履歴
url_log = "https://ja.wikipedia.org/w/index.php?title={}&action=history&offset=&limit=500".format(article_name)
log = requests.get(url_log,timeout=(6.0, 7.5))#持ってくる
log_soup = bs(log.text,"html.parser")#解析
main_log = log_soup.find(class_="mw-changeslist-date").text#タイムスタンプ
#作者一覧
Author = ",".join(list(set([log.text for log in log_soup("bdi")])))#作者が多かったら分ける
#履歴プリント
log_out = "[[jawp:{}]] の{}(UTC) 版 より全文をエスケープ転載。投稿者:{} 。".format(urllib.parse.unquote(article_name),main_log,Author)
pyperclip.copy(log_out)
enter2 = input("要約欄用テキストをクリップボードへコピーしました。Enterキーを押すと終了します。")
使い方[編集]
起動までは補足説明のそれと同じ。
python [保存したファイル名].py
(例:python escape.py
)- 記事名を入力。
- 「記事ソースをクリップボードにコピーした」的な文言が出たら、Enpediaの編集画面を開き、
Ctrl+V
や右クリック→貼り付け
で貼り付ける。 - Enterを押す。
- 「要約欄用テキストをクリップボードにコピーした」的な文言が出たら、開いていた編集画面の下の「編集内容の要約」に貼り付ける。
- Enterを押して終了。
ソースの説明[編集]
本家に準じて。冒頭のライセンス記述を除去し、最初のimport
を一行目とします。
インポート[編集]
import requests
from bs4 import BeautifulSoup as bs
import urllib.parse
import pyperclip
- 1-3行目:変えていません。
- 4行目:追加。クリップボード管理をしてくれるpyperclipを入れています。
記事ソースを持ってくる[編集]
article_name = urllib.parse.quote(input(">>記事名を入力(ソースを抽出します)"))#受付
#記事ソース
url = "https://ja.wikipedia.org/w/index.php?title={}&action=edit&veswitched=1".format(article_name)
article = requests.get(url,timeout=(10.0, 15.5))#ソースを持ってくる
article_soup = bs(article.text,"html.parser")#解析
as_data = article_soup.find("textarea").text#タグ担当
pyperclip.copy(as_data)
enter1 = input("記事ソースをクリップボードへコピーしました。Enterキーを押すと、引き続き要約欄の準備、コピーを行います。")
- 6-12行目:変えていません。
- 13-14行目:追加。
- 13行目:本家は
as_data
をコンソールへprint()
していますが、今回はpyperclipでクリップボードへコピーしています。 - 14行目:このまま進めると、要約欄用テキストがクリップボードを上書きしてしまうため、ここでソースをEnpediaの編集欄へ貼り付けるように指示します。
- 13行目:本家は
履歴を拾ってこよう[編集]
#履歴
url_log = "https://ja.wikipedia.org/w/index.php?title={}&action=history&offset=&limit=500".format(article_name)
log = requests.get(url_log,timeout=(6.0, 7.5))#持ってくる
log_soup = bs(log.text,"html.parser")#解析
main_log = log_soup.find(class_="mw-changeslist-date").text#タイムスタンプ
#作者一覧
Author = ",".join(list(set([log.text for log in log_soup("bdi")])))#作者が多かったら分ける
#履歴プリント
log_out = "[[jawp:{}]] の{}(UTC) 版 より全文をエスケープ転載。投稿者:{} 。".format(urllib.parse.unquote(article_name),main_log,Author)
pyperclip.copy(log_out)
enter2 = input("要約欄用テキストをクリップボードへコピーしました。Enterキーを押すと終了します。")
- 16-25行目:変えていません。
- 26行目:
変更。型が合わないとか言ってエラー吐いてたので無理やり修正したらこうなりました。もしかしたら不必要な改変かも。WxYukiさんに改変していただきました。ありがとうございます。--IAX86 (会話・苦情 | 投稿記録) 2023-04-12T21:19:40 (JST)
- (ちょっと蛇足)
多用しているstr()
は、どんな値も文字列へと変換するためのもの。型をそろえないとうまいことコピーできなさそうだったので、全部文字列にしようとしたらこうなった。
- (ちょっと蛇足)
- 27-28行目:追加。ソースコピー時と同様に、履歴表示をクリップボードにコピーしています。でもって最後に終了確認を突っ込みました。
蛇足[編集]
- 最初にWindows付属の
clip
でコピーすることを検討しましたが、ソースファイルが増えて取り扱いが面倒になるのと、Unicodeでエラーが多発したため中止しました。絶対こっちの方がまとも。 - 途中に入れた
enter
、enter2
の変数は特に意味を持ちません。調べたやり方に沿っただけ。
使ってくれるとうれしいです。以上。
脚注[編集]