利用者:IAX86/例のスクリプトをちょっと改変した話

出典: 謎の百科事典もどき『エンペディア(Enpedia)』
ナビゲーションに移動 検索に移動

本家さんがAPI版へ改変されたため移動しました。おそらく向こうを使った方が良いと思います。

エンペたん看板 Welcome.png よみものページ
この「よみもの」は、IAX86が作成したものです。
他ユーザーの編集も歓迎いたします。

最近何かと話題になっているWebスクレイピングツールですが、私の環境では少々不便だったため、モジュールを追加してもう少し使いやすくしてきました。

改変理由[編集]

私のパソコン環境はWindows8.1[1]なのですが、それでコマンドプロンプトやその他シェルプログラムを使うと、なぜか改行が大量発生してしまいます。

改行除去さすがに面倒すぎる。[2]

ということで、一発でクリップボードにコピーするようにしてきました。

導入方法[編集]

基本はこっちを。ここでは追加事項のみ。

  • 準備編の最後に、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キーを押すと終了します。")

使い方[編集]

起動までは補足説明のそれと同じ。

  1. python [保存したファイル名].py (例:python escape.py)
  2. 記事名を入力。
  3. 「記事ソースをクリップボードにコピーした」的な文言が出たら、Enpediaの編集画面を開き、Ctrl+V右クリック→貼り付けで貼り付ける。
  4. Enterを押す。
  5. 「要約欄用テキストをクリップボードにコピーした」的な文言が出たら、開いていた編集画面の下の「編集内容の要約」に貼り付ける。
  6. 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の編集欄へ貼り付けるように指示します。

履歴を拾ってこよう[編集]

#履歴
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でエラーが多発したため中止しました。絶対こっちの方がまとも。
  • 途中に入れたenterenter2の変数は特に意味を持ちません。調べたやり方に沿っただけ。

使ってくれるとうれしいです。以上。

脚注[編集]

  1. サポート切れ
  2. そりゃそうですよね。いちいち改行除去してたらどんだけ時間かかると?だったら{{Sakujo/本体}}や{{出典の明記}}などの除去に回してえわ。