利用者・トーク:夜泣き
ナビゲーションに移動
検索に移動
てすや
利用者:夜泣き/スクリプトについて
提案 - どうせrequestモジュールでpipが必要ならBeautifulSoupも入れてしまえば、HTMLから文字を抜き出す際にgrepやreを使うよりもすっきり書けると思います。貴職がどういうロジックにするつもりなのかまだわかりませんが--Fet-Fe (トーク) 2022年6月16日 (木) 23:26 (JST)
- コメント - それは思ってました。標準のみか追加するかの2択しかないんで後者ならたぶん使うことになるでしょう。BeautifulSoupのほうは使ったこと無いってのがネックですがなんとかなるでしょう。--夜泣き (トーク) 2022年6月16日 (木) 23:31 (JST)
- 返信 - 当職も利用者:Fet-Fe#恒心教徒の皆様へ:当Wikiのソースの魚拓取得をお手伝い下さいで少しだけ使ったので、よろしければ参考にして下さい。不慣れだったので効率の悪い書き方かもしれませんが--Fet-Fe (トーク) 2022年6月17日 (金) 00:33 (JST)
コメント - 出会いに感謝。すごく読みやすいです。取り敢えず思ったことを
- テンプレート:Archiveではなくテンプレート:CallinShowLinkを使っていただけると嬉しいです
- DoS攻撃になりかねないので
request_onetime
にsleep(1)
を入れた方が良いと思います - 出力の魚拓がTor用のURLになっています
- 返り値がNoneの可能性があるときは
requests.models.Response | None
([1])などとした方が良いです - 贅沢なことを言うとhttps://github.com/palewire/archiveis/blob/master/archiveis/api.pyみたいな感じで魚拓も自動で取れると理想的ですね 当職が前に試したときは何ページかリクエストすると弾かれてしまっていました あと玉葱だとどうなるかわかりません
- あと当職はその書き方をしたことがないのでわからないのですが、doublesoupとかって必要ですか?soupにfindなどした結果にそのままさらにfindなどの処理をすることは多分可能だと思います
--Fet-Fe (トーク) 2022年6月20日 (月) 12:06 (JST)
- テンプレート:Archiveではなくテンプレート:CallinShowLink
- 存在を失念しておりました。修正コスト安そうなのでバグ取りと同時に直してしまいます。
- 直しました。
- 存在を失念しておりました。修正コスト安そうなのでバグ取りと同時に直してしまいます。
request_onetime
にsleep(1)
を入れた方が良い- 失敗した時は長く待ってリトライさせるために失敗用と成功用で待ち時間分けて失敗した時はrequestメソッド内で5秒待ち成功した時はrequestメソッド呼び出した後に呼出側で必ず1秒待つようにしてるのでDOS攻撃は一応大丈夫です。request_onetimeで必ず1秒待って失敗したとき追加で4秒待たせればいいだけなので指摘されると確かにいいコードではないですね。
- 直しました。
- 失敗した時は長く待ってリトライさせるために失敗用と成功用で待ち時間分けて失敗した時はrequestメソッド内で5秒待ち成功した時はrequestメソッド呼び出した後に呼出側で必ず1秒待つようにしてるのでDOS攻撃は一応大丈夫です。request_onetimeで必ず1秒待って失敗したとき追加で4秒待たせればいいだけなので指摘されると確かにいいコードではないですね。
- 出力の魚拓がTor用のURLになっています
- 恐らくスクレイピングした場所がバグってるようです。当職無能頭唐澤眼球麻原につき気づきませんでした。
- 直しました。
- 恐らくスクレイピングした場所がバグってるようです。当職無能頭唐澤眼球麻原につき気づきませんでした。
- 返り値がNoneの可能性があるとき
- これもなんとかします。
-
requests.models.Response | None
の書き方だとエラーでした。代わりにOptional[requests.models.Response]
になってます。
-
- これもなんとかします。
- 魚拓も自動で取れる
- 玉ねぎだと取得時に100%One more stepが出ますのでさすがにrecaptcha突破は無理です。生IPだとかあんま使われてないVPNなら出てこないときもありそうですがスクリプト回す人全員が全員そんな環境ではないし最初から諦めてました。別で魚拓取得するためだけのスクリプトを作って回せる人に回してもらう方が現実的かと。
- soupにfindなどした結果にそのままさらにfindなどの処理をすることは多分可能
- ガチなのですか?soupはBeautifulSoupオブジェクトでfind使って取得したのはTagオブジェクトなので無理だと思ってました。それに使ってる中で動かなかった記憶もありますが別の理由でエラーだったのかもしれないですしあとで試してみます。
- 普通にいけました。貴職有能当職無能。
- ガチなのですか?soupはBeautifulSoupオブジェクトでfind使って取得したのはTagオブジェクトなので無理だと思ってました。それに使ってる中で動かなかった記憶もありますが別の理由でエラーだったのかもしれないですしあとで試してみます。
--夜泣き (トーク) 2022年6月20日 (月) 22:19 (JST)
8月9日 v2.1.0
ツイートの画像を自動で取得するため、勝手ながら改造いたしました。
追加機能は以下の通りです
- ツイートについている画像を自動でダウンロードし、MEDIA_DIRに入れておく
- ツイートについている画像ファイル名をWiki記法に変換して本文に追加する
- 引用リツイートの引用元URLを取得し、Archiveして本文に追加する
- 最初にTorに接続できているかのチェックを追加
- (推奨する訳ではありませんが)MacOSでの動作確認
- brewでtorコマンドをインストールして実行しておいてからこのスクリプトを実行すれば、MacOSでもツイートが取得できます
- MacOSから利用する場合、PySocksモジュールが必要になるのでpipで入れて下さい。またそれに合わせてPROXIESのプロキシを
socks5h://127.0.0.1:9050
としていますが、環境によってはsocks5://127.0.0.1:9050
でないと機能しないかもしれません
またこのスクリプトには現状バグがあります
https://twitter.com/CallinShow/status/1556339048138289152(魚拓)のように1ツイートに2枚以上の画像があると1枚しか処理しません