21/07/13 11:59:46.95 0QNuXsy/.net
URLリンク(mevius.5ch.net)
> スレタイトル一覧を取得したい
> このような別から呼び出す仕組みの検索語だけでも知りたい
どっち?
スレタイ取得ならsubject.txt読ませればいいじゃん
わざわざしかもitestのhtmlをスクレイピングする理由あるの?
364:デフォルトの名無しさん
21/07/13 12:22:40.44 WUJYnH4r.net
>>354-355
*3がどう展開されるかより
もっと深刻な問題は
[[?]]*Nの内側の[?]はコピーされていないということだろ
365:デフォルトの名無しさん
21/07/13 12:24:59.10 WUJYnH4r.net
>>359
前方参照でぐぐれ
366:デフォルトの名無しさん
21/07/13 12:26:33.03 WUJYnH4r.net
>>360
5chはスクレイピング禁止
367:デフォルトの名無しさん
21/07/13 12:31:27.78 QsXB5/qu.net
>>359
イベントの関数定義と、抽選・実行をする処理とはファイルを分けて
前者を後者のファイルでimportして使う
1ファイルでできなくもないけど
モジュール分割を早めに覚えておいたほうが散らかりにくい
368:デフォルトの名無しさん
21/07/13 12:43:35.25 dtNqNBdW.net
>>360
Ruby, selenium-webdriver では、
execute_script で、そのまま、JavaScript ソースコードを実行できる
ただし、5ch で頻繁にスクレイピングすると、アク禁にされるかも
require "selenium-webdriver"
options = Selenium::WebDriver::Chrome::Options.new
options.add_option( :detach, true ) # ブラウザを切り放す
options.add_argument( '--start-maximized' ) # 画面最大
driver = Selenium::WebDriver.for :chrome, options: options
driver.manage.timeouts.implicit_wait = 15 # 要素の検索の timeout
url = "サイトのURL"
driver.navigate.to url # 移動する
js_code = <<"EOT"
var elem = document.getElementById( 'abc' );
EOT
driver.execute_script js_code # JavaScript を実行
369:368
21/07/13 13:03:34.95 dtNqNBdW.net
5ch は最初に、空のHTML を送ってきてから、
その後、JavaScript(Ajax)で通信して、内容を取り込む
だから単に、Ruby のNokogiri などでスクレイピングをしても、
空のHTML が取れるだけで、まだ内容が読み込まれていない
だから、15秒ぐらいスリープして、内容が読み込まれるまで待つ必要がある
または、selenium-webdriver で、ブラウザを自動操作して、
driver.manage.timeouts.implicit_wait = 15 # 要素の検索の timeout
みたいに、要素が存在しない場合に、何秒待つか指定する
370:359
21/07/13 13:16:57.35 Oq4/PEVt.net
ご回答ありがとうございました。
私があまりに初心者過ぎて、せっかくの具体的なご回答をほぼ理解できませんでしたが、
この状態を相互参照と呼ぶことが分かってようやくググることができ、
>>362さんのレスから着想を得て、main関数を作ってプログラムを全部括れば動くということが判明しました。
以上ご報告と御礼申し上げます。
371:360
21/07/13 17:54:03.79 28i3hfQd.net
>>368
ありがとうございます。
Ajaxという技術なのですね。
webdriverでwaitを入れたところ取得できました。
>>363
すいません説明不足でした。
実はPC版はシンプルなため取得できていました。
勉強のためにAndroid版も見てみようと思いやってみたところ、取得できなかったためお聞きしました。
皆様、勉強になりました。
ありがとうございました。
372:デフォルトの名無しさん
21/07/13 18:33:25.76 KwvhlQcy.net
>>354
そのツッコミをするなら、群と体の違いについて理解しようか。
掛け算があっても、割り算が必ずしも定義できるとは限らない。
373:デフォルトの名無しさん
21/07/13 20:54:54.99 4WrY8hy5.net
何このruby基地外の自作自演
きっしょ
374:デフォルトの名無しさん
21/07/15 02:12:23.66 0WF/Cs9d.net
スクレイピングでrequestsで上手く取得できないサイトはSeleniumで取得するようにしてるんだけどこれにThreadPoolExecutorを使用するとしたらどういう書き方すればいいの
今までは複数のサイトのURLが入ったリストをfor文で回しつつif文でドメインが一致するかどうかでrequestsとSeleniumを使い分けていたけど非同期にするとなるとさっぱりわからん
375:デフォルトの名無しさん
21/07/15 12:00:52.16 Rdfymp1t.net
クラスのメンバをforループのように回す方法はないですか?イメージは、
class Test:
a=0
b=0
c=0
def _print(self):
for member in self:
print(member)
みたいなことをやりたいです。
376:デフォルトの名無しさん
21/07/15 12:05:26.72 erbvpp8v.net
__iter__か__getitem__を定義すればいけるはず
377:デフォルトの名無しさん
21/07/15 12:46:48.66 82cJAwkj.net
試してないけど、
for v in vars(self):
print(getatter(self, v))
378:デフォルトの名無しさん
21/07/15 15:25:55.52 ygp86UHP.net
URLリンク(docs.python.org)
URLリンク(www.atmarkit.co.jp)
379:デフォルトの名無しさん
21/07/15 16:37:18.28 0u9iXN8m.net
そういうクラスのためのdataclass
astuple, asdictでイテレートもできる。
自分で用意できないクラスのオブジェクトの時は、dir()で列挙した後にごにょごにょしていく必要があるけど。
380:デフォルトの名無しさん
21/07/15 16:50:42.66 TtIRjd2i.net
この度pyinstallerでどのshell環境でも動作するコマンドを作成しました。
しかし5年前くらいのIntelMacでさえ快適に動作しますが、
M1macbookではかなりもっさりして遅いのです。
これはarm64アーキテクチャのせいで遅い可能性はありますか??
またこういったケースでの改善策などありますか??
arm64用にコンパイル方法などありましたら教えてください。
コマンドはスクレイピングした結果を別ファイルに落とす
シンプルなコマンドです。
shellscriptだとちょい面倒だったのでpythonで書きました。
381:デフォルトの名無しさん
21/07/15 20:50:47.41 Rdfymp1t.net
ありがとうございますが、
>>377だと順番が毎回ランダムになる
>>378だと順番がアルファベット順になる?(多分)
csvの要素と対応付けたいので定義順に出てくれないと困ってしまうのです・・
>>379はバージョン不足で不可。(3.5系)
1番目が順不定になるのも多分dictの順番が保持されてないせいだと思いますしやっぱり素直にアプデですかねぇ。。。こんな仕様にしたのほんとに誰ですか
382:デフォルトの名無しさん
21/07/15 21:02:10.64 gFOIdhYR.net
>>374
AWS なら、Lambda, SQS などを使えば?
383:デフォルトの名無しさん
21/07/15 21:48:55.17 NjXHl1NW.net
>>381
for v in sorted(vars(self))でどう?