1 :以下、名無しにかわりましてVIPがお送りします :2018/11/17(土) 18:56:00.95 ID:r23OVhxS 0 pythonのスクレイピングで、ネット上のtxtデータを取得しようとしてるんだけど目的の内容のサイトが少ない+古いで詰んでるhttp://giraffe.topaz.ne.jp/wiki/doku.php/py:lesson3_web ↑参考にしたのはこのサイトで、このサイトのhttp://giraffe.topaz.ne.jp/wiki/lib/exe/fetch.php/py:leavetime.txt を取得しようとしている でもこれ6年前の記事でurllibはもうurllib3だし3にはurlopenっていうのはないらしい どうやって値を取得すればいいの? 使用言語はPython3.7.0
2 :以下、名無しにかわりましてVIPがお送りします :2018/11/17(土) 18:58:07.19 ID:r23OVhxS 0 要約すると ・ネット上から.txtの中身を取得したい ・Python3でのやり方が分からない 今はここで詰んでるけど、後で 「指定した文字以降の文字列を取得する」方法を教えてほしい
3 :以下、名無しにかわりましてVIPがお送りします :2018/11/17(土) 19:05:54.60 ID:pSuklbEZ 0 import urllib.request urllib.request.urlopen("https://next2ch.net/" )
4 :以下、名無しにかわりましてVIPがお送りします :2018/11/17(土) 19:06:04.58 ID:r23OVhxS 0 >>1 のtxtデータを1行ずつ取得して配列に入れたい その際、データは「:」以降の文字列だけ取って その後、「分」という言葉を取得したデータと結合させたい だから例えばprint(minute[0])と書くと txt一行目の「41」を取得して、「分」と結合させるから 「41分」って出力させたい わかりにくくてすまん
5 :以下、名無しにかわりましてVIPがお送りします :2018/11/17(土) 19:07:15.53 ID:r23OVhxS 0 >>3 毎度すまねえ試してみる urllibのurlopenはrequestに変わったって認識で行くわ そこら辺はちょっと調べてくる
6 :以下、名無しにかわりましてVIPがお送りします :2018/11/17(土) 19:15:08.42 ID:r23OVhxS 0 やってみた 【コード】 import urllib.request f = urllib.request.urlopen("http://giraffe.topaz.ne.jp/wiki/lib/exe/fetch.php/py:leavetime.txt" ) print(f) 出力結果 <http.client.HTTPResponse object at 0x10e6c65f8> [Finished in 0.382s] なんかこう、 19:41 22:25 19:31 20:09 21:51… って出る訳じゃ無いんだな 別にurllibにこだわってるわけじゃなくて、beautifulsoup4(聞いたことあるだけ)とか利用した方法を教えてくれても構わない
7 :以下、名無しにかわりましてVIPがお送りします :2018/11/17(土) 19:15:31.26 ID:pSuklbEZ 0 with urllib.request.urlopen("https://next2ch.net/" ) as fin: array = [f"{line.split(":", 1)[-1].strip()}分" for line in fin] for minute in array: print(minute)
8 :以下、名無しにかわりましてVIPがお送りします :2018/11/17(土) 19:19:22.74 ID:r23OVhxS 0 pip list確認したけどurllib3 1.23 だけで無印や2入ってなかった けど動いた ちなみにコードをurllib3にすると AttributeError: module 'urllib3.request' has no attribute 'urlopen' ってエラーが出る
9 :以下、名無しにかわりましてVIPがお送りします :2018/11/17(土) 19:23:30.04 ID:pSuklbEZ 0 訂正 with urllib.request.urlopen("https://next2ch.net/" ) as fin: text = fin.read().decode("utf-8") array = [f"{line.split(':', 1)[-1].strip()}分" for line in text.strip().split("\n")]
10 :以下、名無しにかわりましてVIPがお送りします :2018/11/17(土) 19:28:48.41 ID:wR60KPRi 0 >>7 ありがとう withって初めて聞いた ググったらクラスがどうとか出るんだけどJavaとか分からんからクラスの概念まだあんまりなんだよな urllibはモジュールじゃ無いの?クラスの何かなのか? 多分モジュールもクラス化されてるから、そういう使い方ができるのかもしれないけど、そこら辺の認識が曖昧だ withはどういう時に使ってるのか知りたい asはわかるぞ、上のやついちいち書くの面倒だもんな、finにしたのか arrayの中これ何なんだwww 噂に聞くリスト内包表記だよなこれwww 変数fに1行目の":"を探してとって来てそこを始点として、-1だから終端まで取ってきて入れて… 分を結合させてる? それをfinの一行分ずつarrayに突っ込んで・・・ ダメだオシャレすぎて難しい
11 :以下、名無しにかわりましてVIPがお送りします :2018/11/17(土) 19:30:45.92 ID:wR60KPRi 0 なるほどな、コードがUTF-8じゃ無いと文字化けするから念のため変換したのかな ありがとうちょっと動くようにがんばる next2chを選択してるけど、まさかnext2chでも動くのか・・・? まあまだ中見たことないから何とも言えないが
12 :以下、名無しにかわりましてVIPがお送りします :2018/11/17(土) 19:44:46.66 ID:pSuklbEZ 0 urllib はモジュールで urllib.request はその中のサブモジュール (フォルダとファイルの関係) Python における with は、「『with 節に入る際と抜ける際に必ず実行してくれ』とライブラリ側が指定したモノ」を実行させるしくみ この使用例の場合 with から抜ける際に fin.close() が必ず実行されることが保証される リスト内包の中身はまず in の後ろで text.strip() をした後に改行文字で分割してる strip() しておかないと分割後の配列の末尾に空文字列が入るかもしれない そのあと分割した各行 line を f"..." で好みの文字列に変換する f"..." のうち {...} で囲まれた部分は普通のコードとして実行される この例の場合 line.split(':', 1) によってまず行を ':' で分割する。ただし分割は 1 回しか行わない で、分割した文字列たちのうち末尾の方 [-1] を選択する。 ここは [1] と書いてもいいけど行の中に ":" が仮に含まれなかった場合でも例外が飛ばないように [-1] にしてある Errors should never pass silently. (例外は決して暗黙に見過ごされてはならない) に反しているかもしれない
13 :以下、名無しにかわりましてVIPがお送りします :2018/11/17(土) 19:44:46.93 ID:wR60KPRi 0 with urllib.request.urlopen("http://giraffe.topaz.ne.jp/wiki/lib/exe/fetch.php/py:leavetime.txt" ) as fin: text = fin.read().decode("utf-8") array = [f"{line.split(':', 1)[-1].strip()}分" for line in text.strip().split("\n")] print(text) 時刻全部出た! てことはあれか、>>6 はprint(f)じゃダメで「.read().decode(''utf-8)」が必要なのね .readで中身読み込み覚えました 後でnext2chの出力結果も見てみるわ ちなみにprint(array)をやると UnicodeEncodeError: 'ascii' codec can't encode character '\u5206' in position 4: ordinal not in range(128) ってなった おそらく「分」が非ASCIIコードだからなんとかしなきゃいけないらしいな リスト内包表記が理解できたら対策できそう
14 :以下、名無しにかわりましてVIPがお送りします :2018/11/17(土) 19:50:48.16 ID:pSuklbEZ 0 Windows では python 3.7 あたりから ascii codec cant なんたらかんたらといううざいのは出なくなった、から非 Windows だと仮定して話をすると python を実行する前に export LANG="ja_JP.UTF-8" と設定しておくといい
15 :以下、名無しにかわりましてVIPがお送りします :2018/11/17(土) 20:00:25.17 ID:wR60KPRi 0 >>12 ありがとう requestは中身の機能の1つって感じなんだな open()、close()って絶対しなきゃいけないマナーみたいな感じだったと思ってた こんなやり方で面倒を処理できるんだな、助かるよ これオフラインでも使えるといいね(無理なら無理でエラー吐いてくれるか) 改行するときって最後に、¥nが入るんだっけ strip()で区切るのね、了解 > そのあと分割した各行 line を f"..." で好みの文字列に変換する > f"..." のうち {...} で囲まれた部分は普通のコードとして実行される ここの解説すげえ助かる、これからリスト内包表記するときに抵抗感が薄れるよ line.split(':', 1)は分割の仕方で、:を見て分割、回数は1回(2個目の:は分割しない) 19:41を 19: 41に分けていて、-1だから、1と4を取ってるって感じかな? 中身は 19:41¥n22:25¥n19:31¥n20:09¥n が19: 41¥n22:25¥n19:31¥n20:09¥nになって、¥nで区切るから 19: 41 ¥n22:25¥n19:31¥n20:09¥n になるって感じか あ、でもこれじゃ41じゃなくて¥nが取り出されちゃうか
16 :以下、名無しにかわりましてVIPがお送りします :2018/11/17(土) 20:00:46.26 ID:s4C1p3DC 0 俺もスクレイピングやってみたいな
17 :以下、名無しにかわりましてVIPがお送りします :2018/11/17(土) 20:06:26.12 ID:wR60KPRi 0 >>14 把握した とりあえずターミナルに $ echo "export LANG=ja_JP.UTF-8" >>~/.bash_profile しといた $ exec $SHELL -l $ echo $LANG ちゃんとja_JP.UTF-8が出てた ちゃんと動いた すげえ…すげえ… ありがとう
18 :以下、名無しにかわりましてVIPがお送りします :2018/11/17(土) 20:08:45.64 ID:wR60KPRi 0 じゃあ次はOO:XXのOOの方取り出して OO時って出力するやつやるわ
19 :以下、名無しにかわりましてVIPがお送りします :2018/11/17(土) 20:18:06.85 ID:wR60KPRi 0 リスト内包表記の確認なんだけど text.strip().split("\n")は 【配列名】.strip()←除去呪文、[引数を省略すると空白だけでなく改行も除去される].split("消す対象") って感じだよね? >この例の場合 line.split(':', 1) によってまず行を ':' で分割する。ただし分割は 1 回しか行わない >で、分割した文字列たちのうち末尾の方 [-1] を選択する。 ってことだから、とりあえず先頭の方を取る場合は[0]に変えたら時間が出るんだな できた
20 :以下、名無しにかわりましてVIPがお送りします :2018/11/17(土) 20:18:59.40 ID:wR60KPRi 0 >>16 まだ分からないことだらけだけど、力になれるところは頑張って教えるわ ID:pSuklbEZ今日もありがとう
21 :以下、名無しにかわりましてVIPがお送りします :2018/11/17(土) 20:40:30.40 ID:wR60KPRi 0 まだ分からないことが1つあった import urllib.request with urllib.request.urlopen("http://giraffe.topaz.ne.jp/wiki/lib/exe/fetch.php/py:leavetime.txt" ) as fin: text = fin.read().decode("utf-8") array = [f"{line.split(':', 1)[0].strip()}時" for line in text.strip().split("\n")] print(array) これをやると時間が出るんだけど :がない 分の時も:がなかったけど、こいつどこ行っちゃったの?
22 :以下、名無しにかわりましてVIPがお送りします :2018/11/17(土) 21:18:58.99 ID:pSuklbEZ 0 split("...") は "..." によって文字列を区切る 結果の配列に "..." は含まない
23 :以下、名無しにかわりましてVIPがお送りします :2018/11/17(土) 21:25:02.25 ID:wR60KPRi 0 なるほど てことは"…"を含みたい場合はその後ろの文字で区切る必要があるのか array = [f"{line.split(':', 1)[0].strip()}時" for line in text.strip().split("\n")]なんだけど 優先順位は右側から 、text.strip().split("\n")、{line.split(':', 1)[-1].strip()}、"~~~時"、f←[データ]、array[]←f って感じ? ただし、text.strip().split("\n")とかは .split("\n")をした後、.strip()する順番だよね?
24 :以下、名無しにかわりましてVIPがお送りします :2018/11/17(土) 21:27:07.38 ID:pSuklbEZ 0 なお最近のグーグルはゴミサイトの検索対策に敗北してろくな検索結果を返さないが Python は公式ドキュメントがやたらよくできてるので公式ドキュメントに行くと良いhttps://docs.python.org/ja/3/library/stdtypes.html#str.split 行で分割したいときは "...".split("\n") ではなく "...".splitlines() を使うのがいいことを今知った
25 :以下、名無しにかわりましてVIPがお送りします :2018/11/17(土) 21:30:35.93 ID:pSuklbEZ 0 > ただし、text.strip().split("\n")とかは > .split("\n")をした後、.strip()する順番だよね? 逆 ドットで区切られた文は普通に左から右へ実行される
26 :以下、名無しにかわりましてVIPがお送りします :2018/11/17(土) 21:33:32.30 ID:pSuklbEZ 0 07:21 を "07", ":", "21" に区切りたいなら正規表現が良い re.split(r"(:)", "07:21")
27 :以下、名無しにかわりましてVIPがお送りします :2018/11/17(土) 21:37:26.42 ID:wR60KPRi 0 公式ドキュメントか 了解 左から右だったら改行記号¥nが消えないか?それなのに一行ずつ区切れるのが謎なんだけど
28 :以下、名無しにかわりましてVIPがお送りします :2018/11/17(土) 21:38:43.80 ID:wR60KPRi 0 同じ感じで2chのsubject.txtを読み取ろうとしてるけど UnicodeDecodeError: 'utf-8' codec can't decode byte 0x97 in position 24: invalid start byte って出るね これスレタイが日本語だからこうなってんのかな
29 :以下、名無しにかわりましてVIPがお送りします :2018/11/17(土) 21:44:09.45 ID:pSuklbEZ 0 text.strip().split("\n") が単に text.split("\n") であってはいけないのは なぜかというと "ちんこ\nまんこ\n".split("\n") => ["ちんこ", "まんこ", ""] というふうに結果の配列の末尾が "" になってしまうから text.strip() はテキストの両側から空白文字(改行文字も)を消してくれる "ちんこ\nまんこ\n" ↓ strip() "ちんこ\nまんこ" ↓ split("\n") ["ちんこ", "まんこ"] ただここまでのことを全部忘れて text.splitlines() を使えばそれでよい "ちんこ\nまんこ\n" ↓ striplines() ["ちんこ", "まんこ"]
30 :以下、名無しにかわりましてVIPがお送りします :2018/11/17(土) 21:49:13.01 ID:pSuklbEZ 0 subject.txt はたぶん shift-jis なので decode("shift-jis") と書くべき もしかすると decode("cp932") のほうが正確に変換されるかもしれない
31 :以下、名無しにかわりましてVIPがお送りします :2018/11/17(土) 22:01:28.40 ID:wR60KPRi 0 ありがとう strip()は全体から左右の空白と改行記号のみ削除 striplines()は改行記号を認識してデータ分けしてくれるのね デコードってなんでUTF8とかshiftjisとか分けてるの? 取得したデータを全部UTF8にしたら文字化けしちゃうのか
32 :以下、名無しにかわりましてVIPがお送りします :2018/11/17(土) 22:12:07.96 ID:pSuklbEZ 0 Python3 の文字列はすべてユニコード、敢えていえば utf-32 文字列のエンコーディングを「使い分ける」ということはしない すべてどれも utf-32 であってそれ以外の選択肢は存在しない しかしそれは Python3 の中だけの話であって外部からデータを取ってくると それは utf-8 だったり shift-jis だったりするので Python3 の中で使用する前にそれらをデコードして utf-32 にしなければいけない
33 :以下、名無しにかわりましてVIPがお送りします :2018/11/17(土) 22:17:36.39 ID:KV5brA7K 0 なるなる decodeってことはこれはUTF8ですよー!とか伝えてるってわけか
34 :以下、名無しにかわりましてVIPがお送りします :2018/11/17(土) 22:44:00.32 ID:KV5brA7K 0 今ずっと公式ドキュメント読んでるけどすごいなぁ これどうやって組み込み型のところに文字列メソッドがあって、split系のものがあるなんてわかったの。。。
35 :以下、名無しにかわりましてVIPがお送りします :2018/11/18(日) 17:56:43.34 ID:Cnrqhub0 0 昨日の人いる? また質問してすまん リスト内包表記を紹介してもらってありがたいんだけど pyhtonドキュメントのリストの処理を見て相談があるhttps://docs.python.org/ja/3/tutorial/datastructures.html?highlight=%E3%83%AB%E3%83%BC%E3%83%97#nested-list-comprehensions 今、urlっていう配列にURLをtitleって配列にタイトルが入ってるんだけど 同じ番地に関連するものが入ってるから同時に出力したい 最近やってないから分からんが、python以外の従来のforの書き方で言えばこういうことがしたい for (i=0;i<url;i++){ printf(url[i]); printf(title[i]); } ちなみに、この時titleをまずtxtファイルに記載して改行 次にurlを記載して改行 urlをurlopneしてIDを文字検索、あった行を記載していく処理 をforの中に入れたい どうやら同じ番地のものは[[row[i] for row in matrix] for i in range(4)]で取れるらしいが やり方が非常にややこしい それにドキュメントは組み込み関数使えって言ってる 組み込み関数が何があって、何がどう活用できるのか分からない状態だからこれ以上調べようがない これは内包表記で書くの無理じゃないか? というか書くべきじゃないものという判断をしたほうがいいのかな pythonのfor文ってinを使ったもので、ループカウンタがないからこの場合どうすればいいのか教えて欲しい
36 :以下、名無しにかわりましてVIPがお送りします :2018/11/18(日) 18:03:29.43 ID:Cnrqhub0 0 for スレタイ for URL スレタイ書く\n URL書く\n, URL開く ID検索する 見つける→書き込む\n 見つける→書き込む\nなくなるまで... なくなったらfor スレタイに戻る(break?) って感じの処理 見つける→書き込むのところもforなのかもしれない
37 :以下、名無しにかわりましてVIPがお送りします :2018/11/18(日) 18:04:33.86 ID:Cnrqhub0 0 うわまじかよ、空白消えるじゃん for スレタイ for URL スレタイ書く\n URL書く\n, URL開く ID検索する 見つける→書き込む\n 見つける→書き込む\nなくなるまで... なくなったらfor スレタイに戻る(break?) って感じの処理
38 :以下、名無しにかわりましてVIPがお送りします :2018/11/18(日) 18:13:45.25 ID:1qifjH92 0 本当にカウンターが必要なら enumerate array = ["おちんこ", "おまんこ"] for i, x in enumerate(array): print(i, x) 二つの配列を同時に走査したいだけなら zip array1 = ["おちんこ", "おまんこ"] array2 = ["おちんぽ", "おまんちょ"] for x, y in zip(array1, array2): print(x, y)
39 :以下、名無しにかわりましてVIPがお送りします :2018/11/18(日) 18:17:44.39 ID:Cnrqhub0 0 アッpythonのトップ戻ったらfor文あるー クイック検索じゃでないのなんでだろ>>38 サンクス 一覧の邪魔になるとアレだから、sageて書き込んでもいい? 上がってたほうが快適かな とりあえず俺が必要なのはzip関数かもしれないな ドキュメントでもっと勉強してみるよ どうやらそのprint(x,y)に当たる部分にファイル読み込みやファイルの記載を入れるといいみたいね
40 :以下、名無しにかわりましてVIPがお送りします :2018/11/18(日) 19:10:37.14 ID:Cnrqhub0 0 それぞれのイテラブルから要素を集めたイテレータを作ります。 イテラブルなオブジェクトとは反復可能なオブジェクト イテレータとは、list, tuple, set などの集合を表現するオブジェクトから iter 関数で生成された集合のコピーみたいなものだと考えてください。 イテレータから next 関数で要素を取り出すことができ 取り出す操作は for 文で自動的に繰り返す(iterate する)ことができます。 意味わかんねええええ 身体で覚える方法っていうのはないのか ここで詰んじまう とりあえず読むけど
41 :以下、名無しにかわりましてVIPがお送りします :2018/11/18(日) 23:07:15.20 ID:NZ2TlQvJ 0 https://ideone.com/ こういうサイト使えばいいじゃない 専用スレでやってる分にはそんなに邪魔でもないでしょ たまに上げて保守しといてもよさそう
42 :以下、名無しにかわりましてVIPがお送りします :2018/11/19(月) 01:40:54.30 ID:zD86P0nC 0 本当にありがとう steamやってる?セールになった時skullgirls送らせて欲しい 言葉で言えないぐらい感謝してるわ paizaのcodeのやつは知ってたけどそれは知らなかった paizaより良さそうだね これからもひっそりここでプログラミングをしていこうと思う また気が向いたらでいいから顔を出してくれたら嬉しい おかげでプログラミングが楽しくて堪らないよ 明日予定あるんだけど寝る間を惜しんでatom開いちゃうぐらい 念のためgithubにも変更履歴あげてるわ とは言っても基本尋ねる時はideone使うね
43 :以下、名無しにかわりましてVIPがお送りします :2018/11/20(火) 02:41:46.03 ID:YKpBxSET 0 こんばんは 夜中遅くにすまない 寝られずに今日もプログラミングしてた わからないことがまたあって、詰まってしまった 12行目の部分でデータの確認をしてるんだけど ちゃんと配列にデータが入っていないみたいだったhttps://ideone.com/NF6aFV datURLの入った配列0番目から順にアクセスして情報を取得してるはずなんだけど 取り出した0番目のデータを一次保管しているはずの変数textに>>1 のレス情報全てが入ってるんじゃなくて>>1 のレス情報の1文字目しか入っていなかった>>21 みたいにsplitはしてないんだけど、今回そこは問題ないと思ってる
44 :以下、名無しにかわりましてVIPがお送りします :2018/11/20(火) 02:47:49.98 ID:YKpBxSET 0 3行目でsubject.txtの上から順にdatを取得して来て 10行目でアクセスしたデータを取って来てる 変数textに入っているのは、例えば以下のファイルの中身https://next2ch.net/news4vip/dat/1542448560.dat この場合、俺の予想だと text[0]には 以下、名無しにかわりましてVIPがお送りします<><>2018/11/17(土) 18:56:00.95 ID:r23OVhxS<>pythonのスクレ...(略) のようなデータが入ってると考えてたんだけど 実際には 「以」だけだった textの配列内にinputした変数IDの文字列と同じものがある時だけ スレタイ、URLを書き込んだ後に、レス内容を書き込み をしたいんだけど これじゃIDの判断ができてないよね textへの入れ方がおかしいの?
45 :以下、名無しにかわりましてVIPがお送りします :2018/11/20(火) 05:11:20.37 ID:l+RPQvhh 0 text = nep.read().decode('cp932') によってスレッド全部が読み込まれる text は行分割されていない、ひとつながりの文字列になっている だから text[0] はそのうちの一文字めを指す 行分割したいなら明示的に lines = text.splitlines()
46 :以下、名無しにかわりましてVIPがお送りします :2018/11/20(火) 23:17:08.44 ID:YKpBxSET 0 ありがとう read()した後splitline()はもはやおまじないレベルの作法って覚えたほうが良さそうだね read()されたデータが入ったtextの中身は[以][下][、][名][無][し][に]みたいになってるのかな これはforで回してるからそうなってるのか、イマイチデータの構造が想像できない・・・ plitlinesについて公式ドキュメント読んでるけど、ルー語並みの横文字多くて大変だな スーパーセットとか完全上位互換って言えば良いのに
47 :以下、名無しにかわりましてVIPがお送りします :2018/11/20(火) 23:30:45.77 ID:YKpBxSET 0 https://ideone.com/slABpu いまだに中のデータ構造が理解できてないから分岐処理がうまく働かない これだったら任意に入力したIDを取得することができないのかな 今さっき実行したけどテキストは書かれていなかった
48 :以下、名無しにかわりましてVIPがお送りします :2018/11/21(水) 05:18:57.74 ID:s49vMm/P 0 str は文字の配列だとみなすことも不可能ではないので "おまんこ"[0] => "お" "おまんこ"[1] => "ま" "おまんこ"[2] => "ん" "おまんこ"[3] => "こ" というふうに、現実には配列と異なるものであるにもかかわらず、 まるで配列のようにインデクシングできる。 普通の配列とは違って、各要素が再び (長さ1の) 文字列になる。 例えば "おまんこ" は文字列だし、"おまんこ"[0] もやはり文字列になる。
49 :以下、名無しにかわりましてVIPがお送りします :2018/11/21(水) 05:23:56.03 ID:s49vMm/P 0 3行めの > for thread_title, dat in zip(title, url): の title と url はどこで設定しているのか この for ループの直前に print(title); print(url) すると正しく中身が入っているか
50 :以下、名無しにかわりましてVIPがお送りします :2018/11/21(水) 17:22:32.44 ID:qGULjFVp 0 なるほど、じゃあifの書き方は間違いじゃないんだね ディアゴスティーニみたいに小見出しじゃ内容を把握するのが難しい段階になって来たか xmppとかで話してみたいけど、手間かけさせるのも申し訳ないし 思い切って全文公開するわhttps://ideone.com/Oce040 forループの前には正しくデータが入っていたと思うよ
51 :以下、名無しにかわりましてVIPがお送りします :2018/11/21(水) 17:37:41.93 ID:4awYKZZw 0 ぼくも動かしてみたい! pythonいれてみる!
52 :以下、名無しにかわりましてVIPがお送りします :2018/11/21(水) 17:41:39.07 ID:qGULjFVp 0 コードパクられるから嫌だったんだけど、まあGithubにあげてるし 著作権は保持できてるか
53 :以下、名無しにかわりましてVIPがお送りします :2018/11/21(水) 18:08:28.41 ID:qGULjFVp 0 >>51 使い方はここに書いたhttp://apboc.net/photo/rNqUJVqv 使うなら一言言ってくれ あと、やるなら一緒にプログラミングやろうぜ
54 :以下、名無しにかわりましてVIPがお送りします :2018/11/21(水) 18:33:20.35 ID:4awYKZZw 0 >>53 やってみる!
55 :以下、名無しにかわりましてVIPがお送りします :2018/11/21(水) 19:45:59.61 ID:qGULjFVp 0 何作る予定なの
56 :以下、名無しにかわりましてVIPがお送りします :2018/11/21(水) 20:10:03.43 ID:4awYKZZw 0 >>55 よくわからないけどとりあえず>>50 動かしてみるね
57 :以下、名無しにかわりましてVIPがお送りします :2018/11/21(水) 20:14:48.42 ID:s49vMm/P 0 > if str(ID) in lines: これは str(ID) とぴったり一致する行があるかどうかを見てる 「一致する行」とはは str(ID) のみで構成され、それ以外の文字が一切入ってない行のこと 例えば "おまんこ" in ["おちんぽ", "おまんこ"] => True "まんこ" in ["おちんぽ", "おまんこ"] => False もし「いずれかの行に str(ID) が現れる」ことをみたければ if any((str(ID) in x) for x in lines): と書くか、あるいは単純に text を検索する if str(ID) in text:
58 :以下、名無しにかわりましてVIPがお送りします :2018/11/21(水) 20:22:46.85 ID:s49vMm/P 0 > global url, title と書いてて確かにこれでも動くと思うけど 「グローバル変数はできるだけ使わない方がいい」 というのが鉄則なので、通常は戻り値にする つまり def getURLs(): : : : return url, title こうするとこの二つの戻り値を getAll() の中で受け取れる def getAll(): url, title = getURLs()
59 :以下、名無しにかわりましてVIPがお送りします :2018/11/21(水) 20:46:25.02 ID:qGULjFVp 0 >>56 なんで? 何しに来たのお前 純粋にプログラムをやりに来たなら俺も協力するけど 悪用考えてるなら帰れよ>>57 通りでtextの時に動く場合があったわけだ… 一番上手くいった?時がIDの奴がレスしたスレだけが全文出てたよ、当然他のIDのレスも表示されちゃったけど splitlinesで区切った配列linesには1レス1レスが個別に配列で格納されているって認識なんだけど違うかな? lines[0]にはスレタイと>>1 の書き込み、[1]には>>2 の・・・ で、最後まで見たらループが自動で抜けて次のスレへ だからIDの分岐処理かけたらIDのある行の配列のみがファイル出力(テキスト書き込み)される算段だったんだけどそうならなかったな ここはちょっと自力で頑張ってみる 日付跨いで解決できなかったら泣きつくかも そういや>>47 の20行目には if ID in text: を記述してるんだけど上手く動かなかったな なんでだろう、でもこのanyの方法でも同義なら出力されてるこっちの方採用するわ str(ID)にしたのはinputがstrじゃなかったらって言う念押しだったんだけど、あんまり効果なさそう
60 :以下、名無しにかわりましてVIPがお送りします :2018/11/21(水) 20:52:21.27 ID:qGULjFVp 0 ありがとう。引数使ってみるよ グローバル変数を利用したのは戻り値や引数が上手く理解できなかったからだ… 引数って見にくくない? 謎なのが、その順番に書かなきゃいけないのか、その変数名じゃなきゃダメなのかとか あと、単純に処理の並びや変数名を忘れてしまって管理がしづらそうだと思った ここら辺は経験すればするほど頭じゃなくて身体で覚えるかも知れない、頑張るわ
61 :以下、名無しにかわりましてVIPがお送りします :2018/11/21(水) 20:56:46.65 ID:s49vMm/P 0 > splitlinesで区切った配列linesには1レス1レスが個別に配列で格納されているって認識なんだけど違うかな? これはそのとおりの認識で合ってる 配列 (list型) なのか文字列 (str型) なのかいちいち意識しつつ書くといい どっちかわからなければ print(type(変数名)) と書くと型がわかる
62 :以下、名無しにかわりましてVIPがお送りします :2018/11/21(水) 21:04:07.01 ID:s49vMm/P 0 > 謎なのが、その順番に書かなきゃいけないのか、 その順番に書かなきゃいけない > その変数名じゃなきゃダメなのか その変数名でなくていい 日本語では「引数」と言っちゃうけど、英語には「parameter (仮引数)」と「argument (実引数)」の区別がある 仮引数というのは数学で言うと f(x) = 2x の x のこと。 実引数というのは、f(x) を実際に f(1) と呼び出すときの 1 のこと f(x) を "f(x)" という形で呼び出すなら x が実引数になる
63 :以下、名無しにかわりましてVIPがお送りします :2018/11/21(水) 21:11:01.36 ID:s49vMm/P 0 > 単純に処理の並びや変数名を忘れてしまって管理がしづらそうだと思った これは実は逆 ある一つの変数が使用される箇所は、できるだけコンパクトにまとまっていた方がいい なぜならその箇所以外ではその変数のことを忘れることができるから 登場する変数がどこでどう変更されてどう使用されているのかを追うのは苦行なので 理想的には全ての変数が一回限りの使い捨てというのが一番読みやすい グローバル変数をむやみに使うと、その変数を使ってる関数があちらこちらに存在して、 それらがよくわからない順番に呼び出されて、よくわからない順番に変数が読み書きされる これをデバッグするのはたいへん グローバル変数は、普通はプログラム全体のコンフィグパラメータとかに使うのに留めるのがいい
64 :以下、名無しにかわりましてVIPがお送りします :2018/11/21(水) 21:14:54.10 ID:4awYKZZw 0 >>59 ごめんなさい 動かしてみたかったの でも動かしてみてわかったよ! str(ID) in lines だと配列の中全部をいっぺんに見ちゃうから linesを1行ずつ取り出してfindすればいいんじゃないかなhttps://ideone.com/MxqOAM pythonわからないけどこれでどうかな?
65 :以下、名無しにかわりましてVIPがお送りします :2018/11/21(水) 21:20:36.38 ID:qGULjFVp 0 ありがとう ループ処理は内部構造の把握が大変だな、たくさん出てしまう ID:s49vMmはループの場合どう確認してる? jupyternotebookとか使えばブロック単位で分けれるから簡単なのかな? プログラミングに数学が必要な理由がよくわかったわ あと英語が必要な理由も とりあえず、これ以上負荷かけるのも申し訳ないし elseにi+=1みたいなループカウンタつけて10超えたらbreakするようにするわ
66 :以下、名無しにかわりましてVIPがお送りします :2018/11/21(水) 21:22:06.67 ID:qGULjFVp 0 >>64 こっちも疑って悪かった 昔これで荒れたことあったから警戒してたんだ 秘密裏にやろうにも過疎板だからな… ありがとう、それも試してみる ちなみにいつもしている言語は何?
67 :以下、名無しにかわりましてVIPがお送りします :2018/11/21(水) 21:34:10.39 ID:qGULjFVp 0 動かして見た しっかりと理解ができていないから、自分の言葉で説明するのが難しいな… 恐らくだけど、if any((str(ID) in x) for x in lines):の for x in linesで既にlinesの配列の[0]から順に1番ずつデータが変数xに送られていると思われる だから、findじゃなくても既に個別で見てるんじゃないかなって思った こっちじゃファイルの書き込みはできなかった
68 :以下、名無しにかわりましてVIPがお送りします :2018/11/21(水) 21:38:13.75 ID:4awYKZZw 0 >>67 ぼくのコードは>>50 の改変だから>>50 以降のコードは一つも使ってないよ だから>>57 のコードと一緒にするとうまく動かないと思う
69 :以下、名無しにかわりましてVIPがお送りします :2018/11/21(水) 21:39:05.13 ID:s49vMm/P 0 あんまりうまく伝わってる気がしない…… とにかく変数名を管理しようとしてはいけない 管理できているうちはいいけど大体途中で無理が来る 管理しなくていいように引数とか戻り値とかの概念がある # x を受け取って y を返す関数 def f(x): y = 2*x return y def main(): y = 1 # f() の仮引数名が x であることを忘れてしまったので # y で呼び出す # また f() の戻り値の名前が y であることも # 忘れてしまったので x で受ける x = f(y) # それでも正しく動作する print(x)
70 :以下、名無しにかわりましてVIPがお送りします :2018/11/21(水) 21:50:58.25 ID:s49vMm/P 0 > ID:s49vMmはループの場合どう確認してる? 俺はロートルだから便利なものはあんまり使わない だいたい全部 "printf デバッグ" でなんとかする どうしてうまく動かないのかわからない場合、例えば今の場合なら > with open('./'+str(ID)+'.txt','a') as file: の直前に lines を全部書き出す: for i in lines: print(f"{str(ID) in i}>>{i}<<") でその後に str(ID) を書きだす print(f"ID>{ID}<") 実際に表示された lines の中に、ID を含むものはあるか? "{str(ID) in i}" に相当する部分が全部 False になっているか? なぜ全部 False なのか? ということを考えると次に進める
71 :以下、名無しにかわりましてVIPがお送りします :2018/11/21(水) 21:56:51.08 ID:4awYKZZw 0 https://ideone.com/YTf7v3 参考になるかわからないけど改変後の全体貼っておくね テキスト名だけ固定値に変えちゃったけどその他は>>64 の部分しか変えてないよ
72 :以下、名無しにかわりましてVIPがお送りします :2018/11/21(水) 21:59:27.28 ID:qGULjFVp 0 >>68 違いはif anyのところだけって捉えてた if anyの部分をコメントアウトして実行してみたよ>>69 難しいな… そうなんだよ、Cの外部変数の時もreturnが0とか1とか2が来て全くわからなくなっていた returnの意味がわからない なんでyでもいいのかっていうのが… でも大体わかって来た気がする def f(x):のreturnって、xでもyでもNEPでもなんでもよくて、とりあえずそういう形のものが入ればいいやって感じなのかな ただし、return x,yとかにするとダメみたいな
73 :以下、名無しにかわりましてVIPがお送りします :2018/11/21(水) 22:18:11.93 ID:qGULjFVp 0 >>68 すまねえ自決した ちゃんと動いた… なんで????
74 :以下、名無しにかわりましてVIPがお送りします :2018/11/21(水) 22:25:04.11 ID:s49vMm/P 0 >>72 return x, y でも変数名は憶えていなくていい (順番は憶えておかなくてはいけない) 変数と変数名は違う、ということに気を付けるといい、かも ある人は生まれた家では実名で呼ばれるかもしれないけど 外に出れば別の名前で呼ばれてもいい ある店の中に入った人は、その人の本来の名が何であっても「お客さん」としか呼ばれない これが仮引数名 大阪から出てきた人は、その人の本来の名が何であっても「大阪さん」としか呼ばれない x = f(y) と書いたときの x がそれ
75 :以下、名無しにかわりましてVIPがお送りします :2018/11/21(水) 22:35:18.58 ID:4awYKZZw 0 >>73 for line in lines: はlines配列から1行ずつlineに代入するよ linesの最後まで繰り返すよ だからlineの中にはループ1回目はlines[0]の値が ループ2回目はlines[1]の値が入るよ ループ3回目はlines[2]の値だよ あとは1行ずつ取り出したlineの中を line.find(ID)でIDの文字列がlineの中にあるかどうか調べてあったらテキストに書き出しているよ
76 :以下、名無しにかわりましてVIPがお送りします :2018/11/22(木) 00:35:45.74 ID:x5XSWmcU 0 2人ともありがとう。 俺が散々悩んでた結果が秒で解決して少しの時間放心状態になってた なんでこんな自分が考え込んでたのか、みんななんでこんなに賢いのか…>>74 >>69 の y=1 x = f(y)は必ず(y)じゃないといけないんだよね?これは実引数だから 一方でdef f(x):が作動できるのは仮引数で 重要なのは変数名じゃなくて値だからって事でいいかな… パッと見ると混乱するけど、コード動かせば大体納得行く 引数の概念はわかった気がする>>75 ありがとう 今の段階じゃ同スレの2回目以降のレスにもスレタイやURLがついてしまう不具合があるから 論理積で2レス目以降を別処理にしようとしてるんだけど これじゃなぜか分岐条件結構厳しいはずなのにスルーして論理積の条件クリアしてしまうhttps://ideone.com/69oylI ごめん文章も考えながら書いてるけど、書いてる間に矛盾してる気がしてきた ちょっとヤバイな口から煙出てきた
77 :以下、名無しにかわりましてVIPがお送りします :2018/11/22(木) 01:39:49.64 ID:x5XSWmcU 0 https://ideone.com/7Qv7gY AttributeError: 'list' object has no attribute 'splitlines' 内包表記で書く事はできないhttps://ideone.com/ojh1qu 謎のクソループで同じ書き込みが何度もされる
78 :以下、名無しにかわりましてVIPがお送りします :2018/11/22(木) 02:05:09.27 ID:x5XSWmcU 0 https://ideone.com/ut56OR スレタイ被りなく>>1 は取得できたが、他が空白https://ideone.com/ppSoRj スレタイ被りが復活、なぜ2番目以降も分岐しないのか?https://ideone.com/OKyPMb 次は全部elseになってしまった line[0] == line でも、line == line[0]でもない
79 :以下、名無しにかわりましてVIPがお送りします :2018/11/22(木) 02:50:25.01 ID:x5XSWmcU 0 検証したらline[0]は「以」だった 恐らく>>48 for line in lines はスレッドのレスを配列に分けてる訳じゃないっぽいhttps://ideone.com/4glYLO レスカウンタの位置を変えたらちゃんと動いた!!!!!!!!!! 天才天才天才最高 なんで気がつかなかったんだ・・・ コードが画面外に出ると急に変数や配列の存在を忘れてしまうみたい
80 :以下、名無しにかわりましてVIPがお送りします :2018/11/22(木) 04:35:33.45 ID:x5XSWmcU 0 完成しました… ちゃんと複数レスにも対応して、>>1 が書き込みした場合にも対応できるようにできた 5日間お付き合いいただきありがとうございました githubに上げてtestブランチからmasterブランチにマージしようとしたんだけど競合とか出てきてバグっちゃったよ 無理やり新規ファイルをmasterにブチ込んだら解決した 本来のベストな方法が知りたい… Atomも競合のせいかgitのプラグインがバグってた そもそもな話、AtomからGithubにpushしてるとき、全部自分のGithubのアカウントじゃなくて完全に誰かわからないアカウントなしの謎ユーザーが全部pushしてる状態だった みんなのgithubもこんな感じなのかな
81 :以下、名無しにかわりましてVIPがお送りします :2018/11/22(木) 05:19:05.86 ID:YbalIwtV 0 × git config --global user.name "フルネーム" × git config --global user.email "メアド" で設定しとけ、とよく言われる。でも慣れないうちは --global を付けない方がいい 〇 git config user.name "フルネーム" 〇 git config user.email "メアド" --global を付けると、別のレポジトリでも git コマンドがその名前で実行される そのまま気づかずに会社のレポジトリに push したり、github に push したりすると 裏垢がばれたり実名がばれたりする また github で仮にメアドを非表示の状態にしてあっても、 ここに設定した user.email の設定は全世界公開されるのでhttps://help.github.com/articles/about-commit-email-addresses/ を参考にして設定しておくとよい
82 :以下、名無しにかわりましてVIPがお送りします :2018/11/22(木) 10:34:59.96 ID:/t4GHQWw 0 >>79 完成おめでと! 変数の有効範囲(スコープ)は言語によっても色々あるから勉強してみるといいよ forの中で定義した変数はforの中でのみ有効とかだよ
83 :以下、名無しにかわりましてVIPがお送りします :2018/11/22(木) 18:08:04.82 ID:x5XSWmcU 0 >>81 ターミナルで操作するのね 最初それで苦戦してたわvscodeやatomがワンタッチでコミットやプッシュができてて感動した>>82 あざす! 奥深いっすね・・・ pythonのforってCとかの従来のforと形が違うから これ結構詰む要因になりそうだね(実際詰んでた) 次はslackで使える夢占いのBot作ります!
84 :以下、名無しにかわりましてVIPがお送りします :2018/11/23(金) 00:14:28.99 ID:9BXlcJZ2 0 スレの趣旨とはあんまり関係ないけど補足させて 今回みたいに何度もwebサイトの内容拾ってくるときはサイトにあまり負荷をかけないことが大切だよ 短い時間に何回もアクセスするとサーバー側から拒否されることもあるよhttps://su-gi-rx.com/archives/1919 ここに書いてあるtime.sleepを使って適切に負荷を調節してね でもスレが1000個あると1秒スリープすると1000秒かかっちゃう 0.3秒でも5分かかるね 0.1秒でやっと1分半くらいだけどそれでも入れないよりは負荷が軽いよ
85 :以下、名無しにかわりましてVIPがお送りします :2018/11/23(金) 10:53:14.00 ID:8U30L74k 0 実のところみんなで田代しない限り一つのクライアントが連続でリクエスト投げたところで負荷がかかることはない ブラウザで普通にウェブページを表示したら、ブラウザは何多重にもコネクション張って そのページの画像を一気に取っていく それに比べたらテキストをたかが一スレッドで取ることにかかる負荷なんか無に等しい
86 :以下、名無しにかわりましてVIPがお送りします :2018/11/24(土) 21:35:29.33 ID:R8h+9ooS 0 了解 とりあえず間近2000レスだけ拾うようにしてたよ そうすればNepの1週間程度のスレは不自由なく取れるから 確かにテスト段階は軽いDoS攻撃みたいになってたんじゃないかと思う… 今回は掲示板でよかった、テキストデータだけだもんね 今度しようとしてるスクレイピングは掲示板じゃないから気をつけるよ
87 :以下、名無しにかわりましてVIPがお送りします :2018/11/25(日) 20:59:01.32 ID:bXPiK0h+ 0 https://ideone.com/DV2J1S selenium久々に動かしたらめっちゃ時間かかった これってサイトによってクラッシュするとかあるの? 特に変なところはないと思うんだけど
88 :以下、名無しにかわりましてVIPがお送りします :2018/11/25(日) 21:22:24.26 ID:bXPiK0h+ 0 googleでも同様だった こんなエラー初めてだ エラーは下記のリンクに全文記載したhttps://writening.net/page?2Mdr5s こういう身に覚えのないエラーが出た場合、みんなはどうしてる? 今回pip install seleniumして googleのwebdriverはここから取ってきたhttps://chromedriver.storage.googleapis.com/index.html?path=2.34/
89 :以下、名無しにかわりましてVIPがお送りします :2018/11/25(日) 22:04:25.11 ID:bXPiK0h+ 0 https://chromedriver.storage.googleapis.com/index.html?path=2.44/
90 :以下、名無しにかわりましてVIPがお送りします :2018/11/26(月) 05:18:38.82 ID:OH8H6/IY 0 Traceback をきちんと全文読むことがすごく大事 element = driver.find_element_by_class_name("gLFyf gsfi") と書いて invalid selector: Compound class names not permitted と怒られてる つまり "gLFyf gsfi" は "Compound class names" (複合クラスネーム) なので許されない HTML に class="gLFyf gsfi" とあるときこれは "gLFyf gsfi" というクラスを指定してるのではなくて 「class="gLFyf" でもあるし class="gsfi" でもある」という複合の意味になる find_element_by_class_name にそれを使ってはいけない
91 :以下、名無しにかわりましてVIPがお送りします :2018/12/04(火) 08:57:22.95 ID:DzL5NQZ9 0 久々にseleniumしてるけど友達にもらったコード利用してるからめちゃくちゃ 一から書いたほうが良さそうだけど寝不足で頭が回らないhttps://ideone.com/qI5gB6 Chromeの検証から目的の要素のコード右クリックして得られるcopy→Xpathってめっちゃ便利だね Xpathの構造を調べる自体が大変だったからこれは革命的だった
92 :以下、名無しにかわりましてVIPがお送りします :2018/12/04(火) 09:01:39.72 ID:DzL5NQZ9 0 GoogleHomeをもらったから、家の照明をIoT化したよ GoogleHomeって、コマンドが何があるかって公開してないんだね おかげで何できるか分からないし、電球の色を変えるのが難しい おまけにSpotifyはバグったままで、気分に沿った音楽を聞くことすらできないよ(元気の出る曲とかリクエストすると、Spotify定期購入ユーザーのみアルバムの指定が可能、代わりにトラックで流すっていうけど無音のまま) 未だにウェイクワードがOK,Google以外に変えることができないのも不思議 2018年なのに開発もハックも全く進んでなかった SlackBotが完成したらGoogleHomeの方から指定した時刻に毎日話しかけてくれるプログラムを組んでみようと思う ちょっと寝てないからダラダラ色々書きすぎた 寝ますおやすみ
93 :以下、名無しにかわりましてVIPがお送りします :2018/12/04(火) 09:03:39.92 ID:DzL5NQZ9 0 どうでもいい発見なんだけど Select(element).select_by_xpath("//*[@id='main']/div[1]/table[1]/tbody/tr[2]/td/form/input[2]").send_keys(keys.RETURN) この部分、[@id="main"]だとsyntax errorになるんだね JavascriptのinnerHTMLで初めに詰んだ時の状況と全くおんなじでちょっと感動した Pythonも””と''を使わなきゃ区別できないんだね
94 :以下、名無しにかわりましてVIPがお送りします :2018/12/06(木) 23:47:46.72 ID:RnSDT4t5 0 面白いな Select(変数).select_by_xpath("xpathをかく]").send_keys(keys.RETURN) じゃなくて普通に 変数.submit()でフォーム送信できるんだ 俺の努力した意味ww
95 :以下、名無しにかわりましてVIPがお送りします :2018/12/07(金) 00:13:05.43 ID:TSzzCBaj 0 そういやatomのgitでまた詰まってるんだけど there is no remote named "origin"って警告出て、pushできない(commitはできる)不具合があるんだけど Atom上じゃリモートの設定できないよね 俺が調べた中じゃそう言うのなかったんだけど git-plusでも同様だった
96 :以下、名無しにかわりましてVIPがお送りします :2018/12/07(金) 00:13:46.19 ID:TSzzCBaj 0 荒らされてるから念のためageる
97 :以下、名無しにかわりましてVIPがお送りします :2018/12/07(金) 08:41:16.42 ID:TSzzCBaj 0 ちょっと苦戦してるから質問させて欲しい 例えばこのサイトでスクレイピングしてるんだけどhttp://yume-uranai.jp/keyword.php?keyword=%8C%A2&q=1 タグにIDやNAME、CLASSの振られていなくて、さらに検索次第で内容量が変わるものなんだけど どうやって指定した範囲の内容を取得したら良いと思う? beautifulsoup4でやるんだなって、大まかにイメージはしてるんだけど 調べてもIDとかを頼りにしてるっぽくてちょっと違う ページのソースを見るに <ul> <li><strong style="color:#C84B00;font-size: 16px;">って書かれた部分から <br /> </div></li>って書かれた範囲まで取るって感じかな 今日は時間あるしちょっとこれで試してみる
98 :以下、名無しにかわりましてVIPがお送りします :2018/12/07(金) 08:51:10.85 ID:TSzzCBaj 0 slackのAPIトークンをgithubにあげちゃった時ってどうすりゃ良いの slackのAPI更新しようにも「新しいレガシートークン」とかいうバカみたいなルー語が載ってて分からん
99 :以下、名無しにかわりましてVIPがお送りします :2018/12/07(金) 08:55:08.34 ID:TSzzCBaj 0 自決しました api.slack.comの自分のbot名の中のinstall app→reinstall appでトークン再生成できるのね… にしてもgithubで特定のファイルのみ非公開(pushしない)とかできないのかな これじゃ余りにも弱すぎる
.gitignore に入れとけ
pycache ディレクトリも .gitignore に入れとけ Python スクリプト内に秘密のパスワードを書いて実行するとそのパスワードがキャッシュに書き込まれる パスワードを消して git commit -am "" するとキャッシュに書かれたままのパスワードがコミットされて そのままうっかり push すると全世界に開陳することになる いらないファイルを途中で git の支配下から外してもそれまでのコミット履歴は残ってしまうから 秘密のファイルをコミットしちゃってたなら一番簡単なのは .git フォルダを消去して もう一度 git init しなおすこと もちろん履歴は消えるが一人でちょっとしたものを作ってるときに消えて困る履歴なんかないはず
了解 /slackbot/.git/って感じになってるんだけど .gitgnoreを/slackbotに入れた 中身は __pycache__/ /slackbot_settings.py だけにしておいた どこに置けばいいのか分からんけど 色んなところに設置しても問題ないらしいから複数箇所に置いておく
みんなに質問したいんだけど プログラミングの言語1つを自由自在に操れるようになるまでに、何をした? 最近一念発起して、プログラマのバイトに応募して働き出したんだけど 未経験者募集してて、そこの社員との認識の差が辛い 俺はプログラミングをまだモノにしてないから、アルゴリズムを手順として書いた後にググりながら書いてるんだけど プログラマは設計書いてる暇があれば、それをプログラムに落とし込めばいい って考えなんだ 俺もそれは正しいと思う(情報共有って意味じゃちょっと不十分だから改善はしたいけど) でも、それができないから手順を書くんだけど非効率だと思うし早く改善しないといけない 社員さんに聞くと、もう既に幼い頃から触れていた人ばかりだから習得できるまでの流れを詳細に言語化できなかった 専門の子も「慣れ」って言ってたんだけど、授業で1〜6限まで課題を与えられた場合は確かにそういう答えになると思う 完全に独学できた人はどんな感じに進めたんだろう?ってすごい気になる
久々にプログラミングの続きをしたよ seleniumは完全に動いて、htmlソースを全て変数の中に入れることができた それから、目的の情報をゲットできるようにしようと思ってたから 以下の正規表現を作った <li><strong style="color:#C84B00;font-size: 16px;">.*?</strong> と <div style="font-size: 14px;background-color: #ffcc70;border: thin solid #c36a2e;margin: 10px;padding: 10px;">.*?<br /> ここで疑問なんだけどbs4のパーサーがよくわからない 正規表現とは違うの?俺はhtmlタグを最後全て消し去る予定なんだけどこれはhtmlを再生成するの? パーサー自体の動きについて書いてる記事はたくさんあるけど、パーサーを使う理由がわからない これを使わないと出力できないのかとか書いてない 通常のwebスクレイピングのゴール地点が何かわからんのが問題なのかな みんな取得したデータをwebブラウザで確認でもしてるんだろうか
https://qiita.com/itkr/items/513318a9b5b92bd56185 web関係のプログラミングは全然わからないんだけどパーサーはHTMLを解釈してくれて欲しい要素を拾ってこれるってことだよね ページ内に画像タグが100個あったら100個全部をリスト化したりすることが簡単にできるんでしょ? 正規表現で自力でやるよりも楽に作れるって考えでいいんじゃないかな
なるほどなるほど 参考になる 確かにこれ便利そうだ 利用したいけど、またわからんところがある <strong style="color:#C84B00;font-size: 16px;">みたいなstrongタグにstyleタグ(?)がある場合うまく取得出来ない>>105 が貼ってくれたサイトの他にここも見たhttp://python.zombie-hunting-club.com/entry/2017/11/08/192731 それに倣ってこう書いたんだが print(soup.find_all('strong style="color:#C84B00;font-size: 16px;"').string) Traceback (most recent call last): File "/scraping.py", line 31, in <module> print(soup.find_all('strong style="color:#C84B00;font-size: 16px;"').string) File "/anaconda3/lib/python3.7/site-packages/bs4/element.py", line 1884, in __getattr__ "ResultSet object has no attribute '%s'. You're probably treating a list of items like a single item. Did you call find_all() when you meant to call find()?" % key AttributeError: ResultSet object has no attribute 'string'. You're probably treating a list of items like a single item. Did you call find_all() when you meant to call find()? Exited with status 1 after 15.916 seconds ってエラーっすね。。。
アトリビュートエラーはなんかPCがボケてるだけなんで気にして無いけど エラー文でググったらこんな内容が出てきたhttps://qiita.com/connectcrew-ishii/items/6ad316ea854326c536a6 find_allが入れ子に対応してない? でことはforループで書くって事だよね(書いてた)
とはいえこの参考記事は、なんかforのカウンタの対象があるっぽい(newsリストみたいなの) 俺のやつ、そう言うの無いから出来ないんだけど・・・
パーサー後の情報をprintした <li><strong style="color:#C84B00;font-size: 16px;">愛犬</strong><br/><div style="font-size: 14px;background-color: #ffcc70;border: thin solid #c36a2e;margin: 10px;padding: 10px;">他人への接し方に何か問題があるようです。身勝手になっていたり、言いなりになっていたりさまざまでしょう。改める点がないか見直す必要があります。しかし、実際の愛犬への愛情や思いが反映される場合もあるので自分なりの解釈が必要です。<br/> </div></li> strongタグ+styleで見出しを作っていて、div styleで内容を記載してるから それを取ってくれば良いみたい じゃあ<strong style="color:#C84B00;font-size: 16px;">から</strong>まで取れば見出しが出来そうなんだけど styleが邪魔すぎる、入れ子になってしまう ちなみにstrongを除いて、styleだけで書いても>>106 と同じエラーになる
自決しました soup.find_all("a", class_="link", href="/link") これですねこれこれこれ
は???無理じゃん!!!! やっぱり>>107 じゃねえか newslist=soup.find_all('ul', attrs={'class': 'listFeed'})したら AttributeError: ResultSet object has no attribute 'find_all'. You're probably treating a list of items like a single item. Did you call find_all() when you meant to call find()? ってエラーで newslist=soup.select(".listFeedWrap") for news in newslist: title=news.find(attrs={"class":"titl"}).text -->見出し link=news.find("a").attrs["href"] -->リンク ってしてた 結論>>108 って事で出来ない まーーーーた最初に戻った しかも無駄なトラブルシューティングしてたし萎える
実際にどのサイトをどう取得しようとしてエラーになってるの?
このサイトの結果内容の中身だけを、タイトルと見出しに分けて取得しようとしてるhttp://yume-uranai.jp/keyword.php?keyword=%8C%A2&q=1 ここの65行目から84行目に内容が記載されてる タイトルも内容もそこだけにしか使われていないタグだから取得できるはずなんだけど find_allが入れ子構造が出来ない(謎)から取得が出来ないの タグの中に2つ以上の情報が入ってるから(今回はstrongとstyle)2つで検索しないと無理っぽい
ちょっとやってみたけどwebわからないから全然できないや… もう既に出来てる部分かもしれないけどぼくも動かしてみたよ 何かのヒントになるかもしれないから試してみてねhttps://ideone.com/szGd5y これが1つ目に試してみたhttps://ideone.com/faGTWn これが2つ目に試してみた 要らないのも取れてきちゃうからそういうのを除外する方法も調べられたらよかったんだけど
>>114 !!!ありがとうございます!! .stringじゃ動かないだけなんだ なんで気がつかなかったんだろう・・・ ちょっと試して見ます!!多分今日中にスクレイピングは終わりそう!ありがとう!
色々いじくり回してようやくシンプルな答えにたどり着いたよ... どうしてfind_allじゃ文字の取得ができないのか謎のままだったけどhttps://ideone.com/vuvoFK これを使って、タイトルと内容取ってきて、書き込みすれば完成! もう90%できたようなもんだよ、ありがとう
>>103 昔々プログラムといえばアセンブラか、良くて Fortran とか Basic とかだった時代があった これらの言語はあまりに非人間的だったので「まずフローチャートを紙に書こう」という文化があった しかし今の普通の言語は書いたフローチャートがそっくりそのままプログラムになるように作られてるから紙に書く必要はない 逆に言えば書いたプログラムをぱっと見て対応するフローチャートがすぐ思い浮かばないなら お前の習熟度が悪いのではなくてそのプログラムの方が失格だから書き直そう
フローチャートがそのままプログラムになる ってことはつまり、設計してる暇があればそれをプログラムでかけばいいって事だね そう言うの自由自在にできるまでどれぐらいかかった? 俺は言語自体もそうだけど、何よりライブラリとかの扱いが難儀してるわ... 例えば今日なら内包表記で変数の足し算をする方法とか a = 100で、b = 10のとき ループさせて100,101,102...110までの値をcに入れたい おそらく書き方は c = [i {a + i } for i in range(b) ]みたいな感じかなって思うんだけどシンタックスエラーだわ 公式ドキュメントの内包表記のところ読んでるけど そこに記載されてるコードとその結果見ても 自分のしたいことにどう当てはめればいいのか分からなくなる まあでも今回は100とかの数値はIDで URLのnews4vip/100にアクセスして情報を取る、news4vip/101にアクセスして情報を取る... とかしたいから洒落たことしてないで泥臭いfor文書いた方が現実的かもね
メリークリスマス! いつも2人にはお世話になってるからxvideosの新着取得プログラムを作ったよ 今回結構早く、詰まる所もほとんど無く作れた シャワー浴びてる最中に仕組みが閃いて、それをその通りに書けた 今回は設計せずに、自由自在に思うように書けたと思う! 内包表記は捨てたけど、別に無くても問題ないぐらいシンプルなコードだったよ ぜひ使って見て このプログラムの嬉しいところはhas been deleteedは除外して一覧表示してくれる機能や、自動で出力結果がブラウザで表示できるところです!https://ideone.com/YVVwKT
ア!!!!!!!!!!!! ideoneてめえURL勝手に変えるな!!!!!!!??http://codepad.org/PyZyjhsa ここなら多分大丈夫
ある程度楽しく書けるようになったなら だいたいこんな感じで行けるやろ、ととりあえず書いて実行してみて判断するのをやめて 自分が正確に文法を憶えている手持ちのカードをどう組み立てようかと考えた方がいいかもね 手持ちのカードって言ったって if と while と for と後は四則演算と関数呼び出しくらい知っとけば その組み合わせで大体なんでも書ける それ以外の手持ちカードは他人のコード見て増やしていけばいいんだけど そのとききちんとどういう文法によってそのコードが正当になるのか(考えて自己流に納得するのではなくて)調べよう f"i {a + i}" は正しい←なぜ? i {a + i} は正しくない←なぜ? > そう言うの自由自在にできるまでどれぐらいかかった? 俺は Python なら「弁語士向け」のドキュメントを全部読んでスタートしたから最初から自由だよ プログラム始めたのは C だけどその頃はインターネットなんてあってないようなもんで 一冊本読み終えてから書き始めたからやっぱり苦労した憶えがない 断片的知識でもググりながら始められる今は逆に途中で壁に当たるのかも
守破離すね〜 今はまだ守なんだ 他人のコードが読めるの良いね、それが得きるように慣れば指数関数的に伸びて行きそう 実は内包表記の記載方法はここ前のレスが一番参考になってるw qiitaとか読んでもイマイチわからない書き方してるんだよね... 関数呼び出しはいけるけど、クラスとかああ言うのは利用する場面が思いつかなくて全く使いこなせてないなぁ 弁護士向けのドキュメントなんてあるの? そうそう、ネットで学ぶのは断片的すぎるのと能力不足で得た知識に汎用性を持たせられないって言う悩みがある 本が良いのはふんわり理解してるんだけど、動物の本(オライリーって言います)はなんか難しいし、翻訳者の偏りがあってうまく頭に入ってこなかった・・・ どの本がおすすめとかある?冬休み中に読んでみようと思う そろそろ就活だからしっかり頑張らないと・・・
ぼくはあんまりプログラムできないからくわしくないけど 一つの言語の入門書を全部やるのはいいと思うよ 入門書なら断片的じゃなくて体系的に学べるはずだよ オライリーは入門には難しいとぼくはおもいます
そんな謙遜しちゃって! すごく分かりやすく教えてもらってるよ、ありがとう やっぱりオライリー難しいか。。。 最近だったらJSで振り仮名プログラミングって名前の本は読んだよー
あ、あと自分就活生なんだけど このスレにいるみんなってエンジニア職とかなの? IT業界で働きたいって思ってるんだけど、企業についての情報とか集めるのが大変で 親とかも病気で働いてないから世間の事全く知らないんだよね 大学はそれでも中でしっかり勉強したから後悔はあんまりしてないけど 就職は一生の物だから、妥協しちゃダメだと思う 一応インターンや説明会は受けてるんだけど上っ面めいた話ばっかり聞かされるし 今バイトしてるIT系の会社で話は聞くんだけど、結論「入って見なくちゃわからない」って感じになってる SIerじゃなくて、自分はweb系に行きたいんだけど、技術職って言うより企画とかをしてみたい 時間>給与>やりたい事って言う優先度なんだけど、こう言う会社はやめとけ みたいなのってある? 文系だとちょっと不利かな
webかソフトウェア業界?かな 今はインフラ関係だから、その経験を活かすのも良いんだけど 勉強会で出会った子と話してたら金が物言う感じで働いてるだけじゃ得られる知識も限界かなって思ってきた 金融や医療関係のIT部門って激務? 新卒じゃ入りにくいかな 調べとこう
web系はいいと思うよ 仕事内容は入ってからだと思うよ 技術職をやってから企画っていうのがキャリアパスとしては普通なのかも プログラミング全く分からない人が仕様考えるのは難しいでしょ? でも結局入ってみなくちゃわからないのは本当 あと医療はわからないけど金融はやめておいた方がいいかも…
なんかダメだわ 頼る当てがないからって毎回ここに来てる気がする 根本的な考え方変えなきゃいけないな
pythonのデコレータを見ている
apache strutsのformの中身ってsleniumとか使って手に入れることはできないの? xpathで言うとってなってる部分を取得したいんだけど ソースを見るだけじゃこれが存在しない #entryShowForm > table.kyuko-kyukohoko strutsの動きを一応見てるけど、これってhtml上でどう言う動きになってるの? 何かでformを呼び出すんだよね?
15500 15050 30002 234050 234052 234051
今日はjsしてるんだけどさ これpythonと比べてめちゃくちゃデバッグもコンパイルも難しくない?? CやJavaとか見たいな従来のプログラム言語と比べて相当厄介なんだけどhttps://ideone.com/J2CaV9 ブックマークレットを作ってるんだけど、ブラウザに依存する関数が多すぎてよくわからない ページ内検索のプログラムを作ろうとしてるんだけど 目的は、入力した数の次に大きい数をハイライトするって言うもの(ctrl+fの機能強化見たいなの) このコード、本来なら>>131 の「15050」って打てばその上の「15500」がハイライトされるはずなんだけど15051だけ検索して終わっちゃう(謎) デバッグしたいんだけどF12じゃよくわかんないし、みんなどうしてる?
ふりがなプログラミンぐって言うjsの本持ってるけど 動くコードしか書いてないから動かない時どうすりゃいいのかわからんのよね
>>132 javascript初めて触った! while(i=0){} ↓ while(i==0){} じゃない?
F12 したらビジュアルデバッガーが使えるからデバッグはむしろ容易 今の javascript はクラスとかファットアローとかの導入で書きやすくなった ただし javascript 界隈には == じゃなくて === を使えみたいな初見殺しがいくつかある
>>135 なるほど!初見殺し! やっぱり静的型付けの方が好きだな
昔はもっと難しかったらしいね…… 想像つかないや…… おかげさまでできました! ===はすっげえ厳しくチェック!って感じのイメージ Void(0)が要らないことやNumber()がnumber()じゃダメだったり結構デバッグが難しいね ブックマークレットやF12で動かしたjsってページ更新するまで変数を持ってるんだね おかげで初期のHTMLを変数に突っ込んでおいて InnerHTMLの操作を繰り返す事ができたよ ってかこれも大体初見殺しじゃね!?
Python、職場じゃ歓迎されてないっぽいんで Javaしようと思う... Railsもしたい...
ランタイムライブラリの長期サポートが有料化するJavaでまだ仕事できるの? 長期サポートがなくなって半年ごとに保守する仕事が舞い込んで逆にウハウハなの?
歓迎されてないってこわい
すまねえ教授の受け売りなんだ... 俺もそこ気になるんだけどなんでJavaなんだろう phpとかも触りたくないけど IT界のサグラダファミリアがCobolからJavaになった話とか聞くとまだまだあるのかな わからん...もっとわからんなってきたぞ...
rails ももう下火だしなあ
なんだっけ 便利すぎてrails使って作られすぎたせいですごい遅くなったとか聞いてふふってなった
需要のある言語ってなんだろう
https://insights.stackoverflow.com/trends?utm_source=so-owned&utm_medium=blog&utm_campaign=trends&utm_content=blog-link&tags=ruby%2Cruby-on-rails%2Cdjango%2Cnode.js こんなかんじで ruby on rails (のスタックオーバーフローでの人気) は 2011 年にピークを迎えた後 10年間にわたって漸減を続け 今やついに django にすら抜かれてしまった
もう少しpython続けようって気になれたありがとう js少し触れるようになったから、cssにも手を出し始めたよ 世界の需要じゃレールス下がってるぽいけど COBOLがブームな日本はどうなの? 業界に携わってないから分からない
教習所合宿ってかなり余裕ねえな!!!
合宿はホントにカツカツに詰め込むからね その代わり気がついたら免許が取れてる
仮免合格して路上出たけど速度すっごい怖い... 第二サティアンみたいな寮にいるから隣の奇声が... 自分のツイッターの最新つぶやき解析して ツイート内容判定して泣いてるアイコンとか、笑ってるアイコンに自動で変更させるアプリとか作ってみたいんだけど 全く余裕がない😌
合宿中にそんな余裕あるわけ無いでしょう いいから卒業することだけを考えるんだ
それ面白そうだから早く開発して♥
しかも合宿真っ最中にWEB面談あるんだよな… 今までしてきた事に興味あるから話しさせて!って、ちょっと不安だ…… どうでもいいけど淫らに進路変更する奴にまだ遭遇してない
効果測定1発合格〜 これで免許証もらう試験まで学科試験はない 教習所的にも難しめに設定してあるって言ってたし安心して受けられるぞ
合格〜〜 帰る〜〜
kuinってどう?くいなちゃん可愛い?
就活解禁!! センセェは50社受けろ!って行ってたけど、15社エントリーが限界だった。。 企業そんなにわからない
このスレッドは過去ログです。