ITNEPPer来てくれ質問がある

最新10レス最新30レス
1以下、名無しにかわりましてVIPがお送りします:2018/11/17(土) 18:56:00.95 ID:r23OVhxS

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

要約すると
・ネット上から.txtの中身を取得したい
・Python3でのやり方が分からない

今はここで詰んでるけど、後で
「指定した文字以降の文字列を取得する」方法を教えてほしい

3以下、名無しにかわりましてVIPがお送りします:2018/11/17(土) 19:05:54.60 ID:pSuklbEZ

import urllib.request

urllib.request.urlopen("https://next2ch.net/")
 

4以下、名無しにかわりましてVIPがお送りします:2018/11/17(土) 19:06:04.58 ID:r23OVhxS

>>1のtxtデータを1行ずつ取得して配列に入れたい
その際、データは「:」以降の文字列だけ取って
その後、「分」という言葉を取得したデータと結合させたい

だから例えばprint(minute[0])と書くと
txt一行目の「41」を取得して、「分」と結合させるから
「41分」って出力させたい

わかりにくくてすまん

5以下、名無しにかわりましてVIPがお送りします:2018/11/17(土) 19:07:15.53 ID:r23OVhxS

>>3毎度すまねえ試してみる
urllibのurlopenはrequestに変わったって認識で行くわ
そこら辺はちょっと調べてくる

6以下、名無しにかわりましてVIPがお送りします:2018/11/17(土) 19:15:08.42 ID:r23OVhxS

やってみた
【コード】
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

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

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

訂正
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

>>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

なるほどな、コードがUTF-8じゃ無いと文字化けするから念のため変換したのかな
ありがとうちょっと動くようにがんばる
next2chを選択してるけど、まさかnext2chでも動くのか・・・?
まあまだ中見たことないから何とも言えないが

12以下、名無しにかわりましてVIPがお送りします:2018/11/17(土) 19:44:46.66 ID:pSuklbEZ

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

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

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

>>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

俺もスクレイピングやってみたいな

17以下、名無しにかわりましてVIPがお送りします:2018/11/17(土) 20:06:26.12 ID:wR60KPRi

>>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

じゃあ次はOO:XXのOOの方取り出して
OO時って出力するやつやるわ

19以下、名無しにかわりましてVIPがお送りします:2018/11/17(土) 20:18:06.85 ID:wR60KPRi

リスト内包表記の確認なんだけど
text.strip().split("\n")は
【配列名】.strip()←除去呪文、[引数を省略すると空白だけでなく改行も除去される].split("消す対象")
って感じだよね?

>この例の場合 line.split(':', 1) によってまず行を ':' で分割する。ただし分割は 1 回しか行わない
>で、分割した文字列たちのうち末尾の方 [-1] を選択する。

ってことだから、とりあえず先頭の方を取る場合は[0]に変えたら時間が出るんだな
できた


20以下、名無しにかわりましてVIPがお送りします:2018/11/17(土) 20:18:59.40 ID:wR60KPRi

>>16
まだ分からないことだらけだけど、力になれるところは頑張って教えるわ

ID:pSuklbEZ今日もありがとう

21以下、名無しにかわりましてVIPがお送りします:2018/11/17(土) 20:40:30.40 ID:wR60KPRi

まだ分からないことが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

split("...") は "..." によって文字列を区切る
結果の配列に "..." は含まない

23以下、名無しにかわりましてVIPがお送りします:2018/11/17(土) 21:25:02.25 ID:wR60KPRi

なるほど
てことは"…"を含みたい場合はその後ろの文字で区切る必要があるのか

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

なお最近のグーグルはゴミサイトの検索対策に敗北してろくな検索結果を返さないが
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

> ただし、text.strip().split("\n")とかは
> .split("\n")をした後、.strip()する順番だよね?


ドットで区切られた文は普通に左から右へ実行される

26以下、名無しにかわりましてVIPがお送りします:2018/11/17(土) 21:33:32.30 ID:pSuklbEZ

07:21 を "07", ":", "21" に区切りたいなら正規表現が良い

re.split(r"(:)", "07:21")

27以下、名無しにかわりましてVIPがお送りします:2018/11/17(土) 21:37:26.42 ID:wR60KPRi

公式ドキュメントか
了解
左から右だったら改行記号¥nが消えないか?それなのに一行ずつ区切れるのが謎なんだけど

28以下、名無しにかわりましてVIPがお送りします:2018/11/17(土) 21:38:43.80 ID:wR60KPRi

同じ感じで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

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

subject.txt はたぶん shift-jis なので decode("shift-jis") と書くべき
もしかすると decode("cp932") のほうが正確に変換されるかもしれない

31以下、名無しにかわりましてVIPがお送りします:2018/11/17(土) 22:01:28.40 ID:wR60KPRi

ありがとう
strip()は全体から左右の空白と改行記号のみ削除
striplines()は改行記号を認識してデータ分けしてくれるのね

デコードってなんでUTF8とかshiftjisとか分けてるの?
取得したデータを全部UTF8にしたら文字化けしちゃうのか

32以下、名無しにかわりましてVIPがお送りします:2018/11/17(土) 22:12:07.96 ID:pSuklbEZ

Python3 の文字列はすべてユニコード、敢えていえば utf-32
文字列のエンコーディングを「使い分ける」ということはしない
すべてどれも utf-32 であってそれ以外の選択肢は存在しない

しかしそれは Python3 の中だけの話であって外部からデータを取ってくると
それは utf-8 だったり shift-jis だったりするので
Python3 の中で使用する前にそれらをデコードして utf-32 にしなければいけない

33以下、名無しにかわりましてVIPがお送りします:2018/11/17(土) 22:17:36.39 ID:KV5brA7K

なるなる
decodeってことはこれはUTF8ですよー!とか伝えてるってわけか

34以下、名無しにかわりましてVIPがお送りします:2018/11/17(土) 22:44:00.32 ID:KV5brA7K

今ずっと公式ドキュメント読んでるけどすごいなぁ
これどうやって組み込み型のところに文字列メソッドがあって、split系のものがあるなんてわかったの。。。

35以下、名無しにかわりましてVIPがお送りします:2018/11/18(日) 17:56:43.34 ID:Cnrqhub0

昨日の人いる?
また質問してすまん
リスト内包表記を紹介してもらってありがたいんだけど
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

for スレタイ
for URL
スレタイ書く\n URL書く\n,
URL開く
ID検索する
見つける→書き込む\n
見つける→書き込む\nなくなるまで...
なくなったらfor スレタイに戻る(break?)

って感じの処理
見つける→書き込むのところもforなのかもしれない

37以下、名無しにかわりましてVIPがお送りします:2018/11/18(日) 18:04:33.86 ID:Cnrqhub0

うわまじかよ、空白消えるじゃん

for スレタイ
 for URL
  スレタイ書く\n URL書く\n,
  URL開く
  ID検索する
   見つける→書き込む\n
   見つける→書き込む\nなくなるまで...
   なくなったらfor スレタイに戻る(break?)
って感じの処理

38以下、名無しにかわりましてVIPがお送りします:2018/11/18(日) 18:13:45.25 ID:1qifjH92

本当にカウンターが必要なら 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

アッpythonのトップ戻ったらfor文あるー
クイック検索じゃでないのなんでだろ

>>38
サンクス
一覧の邪魔になるとアレだから、sageて書き込んでもいい?
上がってたほうが快適かな

とりあえず俺が必要なのはzip関数かもしれないな
ドキュメントでもっと勉強してみるよ
どうやらそのprint(x,y)に当たる部分にファイル読み込みやファイルの記載を入れるといいみたいね

40以下、名無しにかわりましてVIPがお送りします:2018/11/18(日) 19:10:37.14 ID:Cnrqhub0

それぞれのイテラブルから要素を集めたイテレータを作ります。

イテラブルなオブジェクトとは反復可能なオブジェクト

イテレータとは、list, tuple, set などの集合を表現するオブジェクトから
iter 関数で生成された集合のコピーみたいなものだと考えてください。
イテレータから next 関数で要素を取り出すことができ
取り出す操作は for 文で自動的に繰り返す(iterate する)ことができます。

意味わかんねええええ
身体で覚える方法っていうのはないのか
ここで詰んじまう

とりあえず読むけど


41以下、名無しにかわりましてVIPがお送りします:2018/11/18(日) 23:07:15.20 ID:NZ2TlQvJ

https://ideone.com/
こういうサイト使えばいいじゃない
専用スレでやってる分にはそんなに邪魔でもないでしょ
たまに上げて保守しといてもよさそう

42以下、名無しにかわりましてVIPがお送りします:2018/11/19(月) 01:40:54.30 ID:zD86P0nC

本当にありがとう
steamやってる?セールになった時skullgirls送らせて欲しい
言葉で言えないぐらい感謝してるわ

paizaのcodeのやつは知ってたけどそれは知らなかった
paizaより良さそうだね

これからもひっそりここでプログラミングをしていこうと思う
また気が向いたらでいいから顔を出してくれたら嬉しい
おかげでプログラミングが楽しくて堪らないよ
明日予定あるんだけど寝る間を惜しんでatom開いちゃうぐらい
念のためgithubにも変更履歴あげてるわ
とは言っても基本尋ねる時はideone使うね

43以下、名無しにかわりましてVIPがお送りします:2018/11/20(火) 02:41:46.03 ID:YKpBxSET

こんばんは
夜中遅くにすまない
寝られずに今日もプログラミングしてた
わからないことがまたあって、詰まってしまった

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

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

  text = nep.read().decode('cp932')

によってスレッド全部が読み込まれる
text は行分割されていない、ひとつながりの文字列になっている
だから text[0] はそのうちの一文字めを指す

行分割したいなら明示的に lines = text.splitlines()

46以下、名無しにかわりましてVIPがお送りします:2018/11/20(火) 23:17:08.44 ID:YKpBxSET

ありがとう
read()した後splitline()はもはやおまじないレベルの作法って覚えたほうが良さそうだね
read()されたデータが入ったtextの中身は[以][下][、][名][無][し][に]みたいになってるのかな
これはforで回してるからそうなってるのか、イマイチデータの構造が想像できない・・・

plitlinesについて公式ドキュメント読んでるけど、ルー語並みの横文字多くて大変だな
スーパーセットとか完全上位互換って言えば良いのに

47以下、名無しにかわりましてVIPがお送りします:2018/11/20(火) 23:30:45.77 ID:YKpBxSET

https://ideone.com/slABpu

いまだに中のデータ構造が理解できてないから分岐処理がうまく働かない
これだったら任意に入力したIDを取得することができないのかな
今さっき実行したけどテキストは書かれていなかった

48以下、名無しにかわりましてVIPがお送りします:2018/11/21(水) 05:18:57.74 ID:s49vMm/P

str は文字の配列だとみなすことも不可能ではないので

  "おまんこ"[0] => "お"
  "おまんこ"[1] => "ま"
  "おまんこ"[2] => "ん"
  "おまんこ"[3] => "こ"

というふうに、現実には配列と異なるものであるにもかかわらず、
まるで配列のようにインデクシングできる。

普通の配列とは違って、各要素が再び (長さ1の) 文字列になる。
例えば "おまんこ" は文字列だし、"おまんこ"[0] もやはり文字列になる。

49以下、名無しにかわりましてVIPがお送りします:2018/11/21(水) 05:23:56.03 ID:s49vMm/P

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

なるほど、じゃあifの書き方は間違いじゃないんだね

ディアゴスティーニみたいに小見出しじゃ内容を把握するのが難しい段階になって来たか
xmppとかで話してみたいけど、手間かけさせるのも申し訳ないし
思い切って全文公開するわ
https://ideone.com/Oce040

forループの前には正しくデータが入っていたと思うよ

51以下、名無しにかわりましてVIPがお送りします:2018/11/21(水) 17:37:41.93 ID:4awYKZZw

ぼくも動かしてみたい!
pythonいれてみる!

52以下、名無しにかわりましてVIPがお送りします:2018/11/21(水) 17:41:39.07 ID:qGULjFVp

コードパクられるから嫌だったんだけど、まあGithubにあげてるし
著作権は保持できてるか

53以下、名無しにかわりましてVIPがお送りします:2018/11/21(水) 18:08:28.41 ID:qGULjFVp

>>51
使い方はここに書いた
http://apboc.net/photo/rNqUJVqv
使うなら一言言ってくれ
あと、やるなら一緒にプログラミングやろうぜ

54以下、名無しにかわりましてVIPがお送りします:2018/11/21(水) 18:33:20.35 ID:4awYKZZw

>>53
やってみる!

55以下、名無しにかわりましてVIPがお送りします:2018/11/21(水) 19:45:59.61 ID:qGULjFVp

何作る予定なの

56以下、名無しにかわりましてVIPがお送りします:2018/11/21(水) 20:10:03.43 ID:4awYKZZw

>>55
よくわからないけどとりあえず>>50動かしてみるね

57以下、名無しにかわりましてVIPがお送りします:2018/11/21(水) 20:14:48.42 ID:s49vMm/P

> 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

> 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

>>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

ありがとう。引数使ってみるよ
グローバル変数を利用したのは戻り値や引数が上手く理解できなかったからだ…
引数って見にくくない?

謎なのが、その順番に書かなきゃいけないのか、その変数名じゃなきゃダメなのかとか
あと、単純に処理の並びや変数名を忘れてしまって管理がしづらそうだと思った
ここら辺は経験すればするほど頭じゃなくて身体で覚えるかも知れない、頑張るわ

61以下、名無しにかわりましてVIPがお送りします:2018/11/21(水) 20:56:46.65 ID:s49vMm/P

> splitlinesで区切った配列linesには1レス1レスが個別に配列で格納されているって認識なんだけど違うかな?
これはそのとおりの認識で合ってる

配列 (list型) なのか文字列 (str型) なのかいちいち意識しつつ書くといい
どっちかわからなければ print(type(変数名)) と書くと型がわかる

62以下、名無しにかわりましてVIPがお送りします:2018/11/21(水) 21:04:07.01 ID:s49vMm/P

> 謎なのが、その順番に書かなきゃいけないのか、
その順番に書かなきゃいけない

> その変数名じゃなきゃダメなのか
その変数名でなくていい

日本語では「引数」と言っちゃうけど、英語には「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

> 単純に処理の並びや変数名を忘れてしまって管理がしづらそうだと思った

これは実は逆
ある一つの変数が使用される箇所は、できるだけコンパクトにまとまっていた方がいい
なぜならその箇所以外ではその変数のことを忘れることができるから

登場する変数がどこでどう変更されてどう使用されているのかを追うのは苦行なので
理想的には全ての変数が一回限りの使い捨てというのが一番読みやすい

グローバル変数をむやみに使うと、その変数を使ってる関数があちらこちらに存在して、
それらがよくわからない順番に呼び出されて、よくわからない順番に変数が読み書きされる
これをデバッグするのはたいへん

グローバル変数は、普通はプログラム全体のコンフィグパラメータとかに使うのに留めるのがいい

64以下、名無しにかわりましてVIPがお送りします:2018/11/21(水) 21:14:54.10 ID:4awYKZZw

>>59
ごめんなさい
動かしてみたかったの
でも動かしてみてわかったよ!
str(ID) in lines
だと配列の中全部をいっぺんに見ちゃうから
linesを1行ずつ取り出してfindすればいいんじゃないかな

https://ideone.com/MxqOAM
pythonわからないけどこれでどうかな?

65以下、名無しにかわりましてVIPがお送りします:2018/11/21(水) 21:20:36.38 ID:qGULjFVp

ありがとう
ループ処理は内部構造の把握が大変だな、たくさん出てしまう
ID:s49vMmはループの場合どう確認してる?
jupyternotebookとか使えばブロック単位で分けれるから簡単なのかな?

プログラミングに数学が必要な理由がよくわかったわ
あと英語が必要な理由も

とりあえず、これ以上負荷かけるのも申し訳ないし
elseにi+=1みたいなループカウンタつけて10超えたらbreakするようにするわ

66以下、名無しにかわりましてVIPがお送りします:2018/11/21(水) 21:22:06.67 ID:qGULjFVp

>>64
こっちも疑って悪かった
昔これで荒れたことあったから警戒してたんだ
秘密裏にやろうにも過疎板だからな…
ありがとう、それも試してみる
ちなみにいつもしている言語は何?

67以下、名無しにかわりましてVIPがお送りします:2018/11/21(水) 21:34:10.39 ID:qGULjFVp

動かして見た

しっかりと理解ができていないから、自分の言葉で説明するのが難しいな…
恐らくだけど、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

>>67
ぼくのコードは>>50の改変だから>>50以降のコードは一つも使ってないよ
だから>>57のコードと一緒にするとうまく動かないと思う

69以下、名無しにかわりましてVIPがお送りします:2018/11/21(水) 21:39:05.13 ID:s49vMm/P

あんまりうまく伝わってる気がしない……

とにかく変数名を管理しようとしてはいけない
管理できているうちはいいけど大体途中で無理が来る
管理しなくていいように引数とか戻り値とかの概念がある

# 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

> 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

https://ideone.com/YTf7v3
参考になるかわからないけど改変後の全体貼っておくね
テキスト名だけ固定値に変えちゃったけどその他は>>64の部分しか変えてないよ

72以下、名無しにかわりましてVIPがお送りします:2018/11/21(水) 21:59:27.28 ID:qGULjFVp

>>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

>>68
すまねえ自決した
ちゃんと動いた…
なんで????

74以下、名無しにかわりましてVIPがお送りします:2018/11/21(水) 22:25:04.11 ID:s49vMm/P

>>72
return x, y でも変数名は憶えていなくていい
(順番は憶えておかなくてはいけない)

変数と変数名は違う、ということに気を付けるといい、かも

ある人は生まれた家では実名で呼ばれるかもしれないけど
外に出れば別の名前で呼ばれてもいい

ある店の中に入った人は、その人の本来の名が何であっても「お客さん」としか呼ばれない
これが仮引数名

大阪から出てきた人は、その人の本来の名が何であっても「大阪さん」としか呼ばれない
x = f(y) と書いたときの x がそれ

75以下、名無しにかわりましてVIPがお送りします:2018/11/21(水) 22:35:18.58 ID:4awYKZZw

>>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

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

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

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

検証したらline[0]は「以」だった
恐らく>>48
for line in lines
はスレッドのレスを配列に分けてる訳じゃないっぽい

https://ideone.com/4glYLO

レスカウンタの位置を変えたらちゃんと動いた!!!!!!!!!!
天才天才天才最高
なんで気がつかなかったんだ・・・
コードが画面外に出ると急に変数や配列の存在を忘れてしまうみたい

80以下、名無しにかわりましてVIPがお送りします:2018/11/22(木) 04:35:33.45 ID:x5XSWmcU

完成しました…
ちゃんと複数レスにも対応して、>>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

× 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

>>79
完成おめでと!
変数の有効範囲(スコープ)は言語によっても色々あるから勉強してみるといいよ
forの中で定義した変数はforの中でのみ有効とかだよ

83以下、名無しにかわりましてVIPがお送りします:2018/11/22(木) 18:08:04.82 ID:x5XSWmcU

>>81
ターミナルで操作するのね
最初それで苦戦してたわvscodeやatomがワンタッチでコミットやプッシュができてて感動した
>>82
あざす!
奥深いっすね・・・
pythonのforってCとかの従来のforと形が違うから
これ結構詰む要因になりそうだね(実際詰んでた)
次はslackで使える夢占いのBot作ります!

84以下、名無しにかわりましてVIPがお送りします:2018/11/23(金) 00:14:28.99 ID:9BXlcJZ2

スレの趣旨とはあんまり関係ないけど補足させて
今回みたいに何度も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

実のところみんなで田代しない限り一つのクライアントが連続でリクエスト投げたところで負荷がかかることはない
ブラウザで普通にウェブページを表示したら、ブラウザは何多重にもコネクション張って
そのページの画像を一気に取っていく
それに比べたらテキストをたかが一スレッドで取ることにかかる負荷なんか無に等しい

86以下、名無しにかわりましてVIPがお送りします:2018/11/24(土) 21:35:29.33 ID:R8h+9ooS

了解
とりあえず間近2000レスだけ拾うようにしてたよ
そうすればNepの1週間程度のスレは不自由なく取れるから

確かにテスト段階は軽いDoS攻撃みたいになってたんじゃないかと思う…
今回は掲示板でよかった、テキストデータだけだもんね
今度しようとしてるスクレイピングは掲示板じゃないから気をつけるよ

87以下、名無しにかわりましてVIPがお送りします:2018/11/25(日) 20:59:01.32 ID:bXPiK0h+

https://ideone.com/DV2J1S
selenium久々に動かしたらめっちゃ時間かかった
これってサイトによってクラッシュするとかあるの?
特に変なところはないと思うんだけど

88以下、名無しにかわりましてVIPがお送りします:2018/11/25(日) 21:22:24.26 ID:bXPiK0h+

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+

https://chromedriver.storage.googleapis.com/index.html?path=2.44/
 

90以下、名無しにかわりましてVIPがお送りします:2018/11/26(月) 05:18:38.82 ID:OH8H6/IY

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

久々にseleniumしてるけど友達にもらったコード利用してるからめちゃくちゃ
一から書いたほうが良さそうだけど寝不足で頭が回らない
https://ideone.com/qI5gB6
Chromeの検証から目的の要素のコード右クリックして得られるcopy→Xpathってめっちゃ便利だね
Xpathの構造を調べる自体が大変だったからこれは革命的だった

92以下、名無しにかわりましてVIPがお送りします:2018/12/04(火) 09:01:39.72 ID:DzL5NQZ9

GoogleHomeをもらったから、家の照明をIoT化したよ
GoogleHomeって、コマンドが何があるかって公開してないんだね
おかげで何できるか分からないし、電球の色を変えるのが難しい
おまけにSpotifyはバグったままで、気分に沿った音楽を聞くことすらできないよ(元気の出る曲とかリクエストすると、Spotify定期購入ユーザーのみアルバムの指定が可能、代わりにトラックで流すっていうけど無音のまま)

未だにウェイクワードがOK,Google以外に変えることができないのも不思議
2018年なのに開発もハックも全く進んでなかった

SlackBotが完成したらGoogleHomeの方から指定した時刻に毎日話しかけてくれるプログラムを組んでみようと思う

ちょっと寝てないからダラダラ色々書きすぎた
寝ますおやすみ

93以下、名無しにかわりましてVIPがお送りします:2018/12/04(火) 09:03:39.92 ID:DzL5NQZ9

どうでもいい発見なんだけど
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

面白いな
Select(変数).select_by_xpath("xpathをかく]").send_keys(keys.RETURN)
じゃなくて普通に
変数.submit()でフォーム送信できるんだ
俺の努力した意味ww

95以下、名無しにかわりましてVIPがお送りします:2018/12/07(金) 00:13:05.43 ID:TSzzCBaj

そういやatomのgitでまた詰まってるんだけど
there is no remote named "origin"って警告出て、pushできない(commitはできる)不具合があるんだけど
Atom上じゃリモートの設定できないよね
俺が調べた中じゃそう言うのなかったんだけど
git-plusでも同様だった

96以下、名無しにかわりましてVIPがお送りします:2018/12/07(金) 00:13:46.19 ID:TSzzCBaj

荒らされてるから念のためageる

97以下、名無しにかわりましてVIPがお送りします:2018/12/07(金) 08:41:16.42 ID:TSzzCBaj

ちょっと苦戦してるから質問させて欲しい
例えばこのサイトでスクレイピングしてるんだけど
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

slackのAPIトークンをgithubにあげちゃった時ってどうすりゃ良いの
slackのAPI更新しようにも「新しいレガシートークン」とかいうバカみたいなルー語が載ってて分からん

99以下、名無しにかわりましてVIPがお送りします:2018/12/07(金) 08:55:08.34 ID:TSzzCBaj

自決しました
api.slack.comの自分のbot名の中のinstall app→reinstall appでトークン再生成できるのね…
にしてもgithubで特定のファイルのみ非公開(pushしない)とかできないのかな
これじゃ余りにも弱すぎる

100以下、名無しにかわりましてVIPがお送りします:2018/12/08(土) 07:26:05.12 ID:JN30ObLM

.gitignore に入れとけ

101以下、名無しにかわりましてVIPがお送りします:2018/12/08(土) 07:39:18.54 ID:JN30ObLM

pycache ディレクトリも .gitignore に入れとけ

Python スクリプト内に秘密のパスワードを書いて実行するとそのパスワードがキャッシュに書き込まれる
パスワードを消して git commit -am "" するとキャッシュに書かれたままのパスワードがコミットされて
そのままうっかり push すると全世界に開陳することになる

いらないファイルを途中で git の支配下から外してもそれまでのコミット履歴は残ってしまうから
秘密のファイルをコミットしちゃってたなら一番簡単なのは .git フォルダを消去して
もう一度 git init しなおすこと
もちろん履歴は消えるが一人でちょっとしたものを作ってるときに消えて困る履歴なんかないはず

102以下、名無しにかわりましてVIPがお送りします:2018/12/09(日) 01:42:13.82 ID:uh8WIFkW

了解
/slackbot/.git/って感じになってるんだけど
.gitgnoreを/slackbotに入れた

中身は
__pycache__/
/slackbot_settings.py
だけにしておいた
どこに置けばいいのか分からんけど
色んなところに設置しても問題ないらしいから複数箇所に置いておく

103以下、名無しにかわりましてVIPがお送りします:2018/12/14(金) 18:23:55.52 ID:nkLiYfAL

みんなに質問したいんだけど
プログラミングの言語1つを自由自在に操れるようになるまでに、何をした?

最近一念発起して、プログラマのバイトに応募して働き出したんだけど
未経験者募集してて、そこの社員との認識の差が辛い

俺はプログラミングをまだモノにしてないから、アルゴリズムを手順として書いた後にググりながら書いてるんだけど
プログラマは設計書いてる暇があれば、それをプログラムに落とし込めばいい
って考えなんだ
俺もそれは正しいと思う(情報共有って意味じゃちょっと不十分だから改善はしたいけど)

でも、それができないから手順を書くんだけど非効率だと思うし早く改善しないといけない
社員さんに聞くと、もう既に幼い頃から触れていた人ばかりだから習得できるまでの流れを詳細に言語化できなかった
専門の子も「慣れ」って言ってたんだけど、授業で1〜6限まで課題を与えられた場合は確かにそういう答えになると思う

完全に独学できた人はどんな感じに進めたんだろう?ってすごい気になる

104以下、名無しにかわりましてVIPがお送りします:2018/12/18(火) 22:21:29.01 ID:mM1DhU5n

久々にプログラミングの続きをしたよ
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ブラウザで確認でもしてるんだろうか

105以下、名無しにかわりましてVIPがお送りします:2018/12/18(火) 23:54:46.35 ID:0Nla/aaQ

https://qiita.com/itkr/items/513318a9b5b92bd56185

web関係のプログラミングは全然わからないんだけどパーサーはHTMLを解釈してくれて欲しい要素を拾ってこれるってことだよね
ページ内に画像タグが100個あったら100個全部をリスト化したりすることが簡単にできるんでしょ?
正規表現で自力でやるよりも楽に作れるって考えでいいんじゃないかな

106以下、名無しにかわりましてVIPがお送りします:2018/12/19(水) 04:10:07.80 ID:v2r8hrMv

なるほどなるほど
参考になる
確かにこれ便利そうだ
利用したいけど、またわからんところがある
<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

ってエラーっすね。。。

107以下、名無しにかわりましてVIPがお送りします:2018/12/19(水) 04:13:48.67 ID:v2r8hrMv

アトリビュートエラーはなんかPCがボケてるだけなんで気にして無いけど
エラー文でググったらこんな内容が出てきた
https://qiita.com/connectcrew-ishii/items/6ad316ea854326c536a6
find_allが入れ子に対応してない?
でことはforループで書くって事だよね(書いてた)

108以下、名無しにかわりましてVIPがお送りします:2018/12/19(水) 04:16:31.99 ID:v2r8hrMv

とはいえこの参考記事は、なんかforのカウンタの対象があるっぽい(newsリストみたいなの)
俺のやつ、そう言うの無いから出来ないんだけど・・・

109以下、名無しにかわりましてVIPがお送りします:2018/12/19(水) 04:23:14.48 ID:v2r8hrMv

パーサー後の情報を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と同じエラーになる

110以下、名無しにかわりましてVIPがお送りします:2018/12/19(水) 04:28:39.42 ID:v2r8hrMv

自決しました
soup.find_all("a", class_="link", href="/link")
これですねこれこれこれ

111以下、名無しにかわりましてVIPがお送りします:2018/12/19(水) 04:34:07.73 ID:v2r8hrMv

は???無理じゃん!!!!
やっぱり>>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って事で出来ない

まーーーーた最初に戻った
しかも無駄なトラブルシューティングしてたし萎える

112以下、名無しにかわりましてVIPがお送りします:2018/12/19(水) 21:07:46.68 ID:l/nSPsXw

実際にどのサイトをどう取得しようとしてエラーになってるの?

113以下、名無しにかわりましてVIPがお送りします:2018/12/19(水) 22:51:39.26 ID:v2r8hrMv

このサイトの結果内容の中身だけを、タイトルと見出しに分けて取得しようとしてる
http://yume-uranai.jp/keyword.php?keyword=%8C%A2&q=1
ここの65行目から84行目に内容が記載されてる
タイトルも内容もそこだけにしか使われていないタグだから取得できるはずなんだけど
find_allが入れ子構造が出来ない(謎)から取得が出来ないの
タグの中に2つ以上の情報が入ってるから(今回はstrongとstyle)2つで検索しないと無理っぽい

114以下、名無しにかわりましてVIPがお送りします:2018/12/20(木) 00:06:05.37 ID:Gqu1ukuB

ちょっとやってみたけどwebわからないから全然できないや…
もう既に出来てる部分かもしれないけどぼくも動かしてみたよ
何かのヒントになるかもしれないから試してみてね

https://ideone.com/szGd5y
これが1つ目に試してみた

https://ideone.com/faGTWn
これが2つ目に試してみた

要らないのも取れてきちゃうからそういうのを除外する方法も調べられたらよかったんだけど

115以下、名無しにかわりましてVIPがお送りします:2018/12/20(木) 21:15:12.49 ID:jMCa9JDv

>>114
!!!ありがとうございます!!
.stringじゃ動かないだけなんだ
なんで気がつかなかったんだろう・・・
ちょっと試して見ます!!多分今日中にスクレイピングは終わりそう!ありがとう!

116以下、名無しにかわりましてVIPがお送りします:2018/12/21(金) 01:03:17.04 ID:TJmP6zeD

色々いじくり回してようやくシンプルな答えにたどり着いたよ...
どうしてfind_allじゃ文字の取得ができないのか謎のままだったけど
https://ideone.com/vuvoFK
これを使って、タイトルと内容取ってきて、書き込みすれば完成!
もう90%できたようなもんだよ、ありがとう

117以下、名無しにかわりましてVIPがお送りします:2018/12/24(月) 16:42:51.41 ID:5jfRopVQ

>>103
昔々プログラムといえばアセンブラか、良くて Fortran とか Basic とかだった時代があった
これらの言語はあまりに非人間的だったので「まずフローチャートを紙に書こう」という文化があった
しかし今の普通の言語は書いたフローチャートがそっくりそのままプログラムになるように作られてるから紙に書く必要はない

逆に言えば書いたプログラムをぱっと見て対応するフローチャートがすぐ思い浮かばないなら
お前の習熟度が悪いのではなくてそのプログラムの方が失格だから書き直そう

118以下、名無しにかわりましてVIPがお送りします:2018/12/25(火) 03:38:48.37 ID:lLT6n9mC

フローチャートがそのままプログラムになる
ってことはつまり、設計してる暇があればそれをプログラムでかけばいいって事だね
そう言うの自由自在にできるまでどれぐらいかかった?
俺は言語自体もそうだけど、何よりライブラリとかの扱いが難儀してるわ...

例えば今日なら内包表記で変数の足し算をする方法とか
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文書いた方が現実的かもね

119以下、名無しにかわりましてVIPがお送りします:2018/12/25(火) 05:53:39.53 ID:lLT6n9mC

メリークリスマス!
いつも2人にはお世話になってるからxvideosの新着取得プログラムを作ったよ
今回結構早く、詰まる所もほとんど無く作れた
シャワー浴びてる最中に仕組みが閃いて、それをその通りに書けた
今回は設計せずに、自由自在に思うように書けたと思う!
内包表記は捨てたけど、別に無くても問題ないぐらいシンプルなコードだったよ
ぜひ使って見て

このプログラムの嬉しいところはhas been deleteedは除外して一覧表示してくれる機能や、自動で出力結果がブラウザで表示できるところです!
https://ideone.com/YVVwKT

120以下、名無しにかわりましてVIPがお送りします:2018/12/25(火) 05:59:28.68 ID:lLT6n9mC

ア!!!!!!!!!!!!
ideoneてめえURL勝手に変えるな!!!!!!!??

http://codepad.org/PyZyjhsa
ここなら多分大丈夫

121以下、名無しにかわりましてVIPがお送りします:2018/12/25(火) 06:01:42.61 ID:mwsspaqc

ある程度楽しく書けるようになったなら
だいたいこんな感じで行けるやろ、ととりあえず書いて実行してみて判断するのをやめて
自分が正確に文法を憶えている手持ちのカードをどう組み立てようかと考えた方がいいかもね

手持ちのカードって言ったって if と while と for と後は四則演算と関数呼び出しくらい知っとけば
その組み合わせで大体なんでも書ける

それ以外の手持ちカードは他人のコード見て増やしていけばいいんだけど
そのとききちんとどういう文法によってそのコードが正当になるのか(考えて自己流に納得するのではなくて)調べよう
f"i {a + i}" は正しい←なぜ? i {a + i} は正しくない←なぜ?

> そう言うの自由自在にできるまでどれぐらいかかった?
俺は Python なら「弁語士向け」のドキュメントを全部読んでスタートしたから最初から自由だよ
プログラム始めたのは C だけどその頃はインターネットなんてあってないようなもんで
一冊本読み終えてから書き始めたからやっぱり苦労した憶えがない
断片的知識でもググりながら始められる今は逆に途中で壁に当たるのかも

122以下、名無しにかわりましてVIPがお送りします:2018/12/29(土) 04:03:15.80 ID:VhkWB5dt

守破離すね〜
今はまだ守なんだ
他人のコードが読めるの良いね、それが得きるように慣れば指数関数的に伸びて行きそう
実は内包表記の記載方法はここ前のレスが一番参考になってるw
qiitaとか読んでもイマイチわからない書き方してるんだよね...
関数呼び出しはいけるけど、クラスとかああ言うのは利用する場面が思いつかなくて全く使いこなせてないなぁ

弁護士向けのドキュメントなんてあるの?
そうそう、ネットで学ぶのは断片的すぎるのと能力不足で得た知識に汎用性を持たせられないって言う悩みがある
本が良いのはふんわり理解してるんだけど、動物の本(オライリーって言います)はなんか難しいし、翻訳者の偏りがあってうまく頭に入ってこなかった・・・

どの本がおすすめとかある?冬休み中に読んでみようと思う
そろそろ就活だからしっかり頑張らないと・・・

123以下、名無しにかわりましてVIPがお送りします:2018/12/29(土) 15:46:06.48 ID:Clk/Aahk

ぼくはあんまりプログラムできないからくわしくないけど
一つの言語の入門書を全部やるのはいいと思うよ
入門書なら断片的じゃなくて体系的に学べるはずだよ
オライリーは入門には難しいとぼくはおもいます

124以下、名無しにかわりましてVIPがお送りします:2018/12/31(月) 11:32:27.86 ID:xcNmcFXp

そんな謙遜しちゃって!
すごく分かりやすく教えてもらってるよ、ありがとう
やっぱりオライリー難しいか。。。
最近だったらJSで振り仮名プログラミングって名前の本は読んだよー

125以下、名無しにかわりましてVIPがお送りします:2018/12/31(月) 11:38:57.01 ID:xcNmcFXp

あ、あと自分就活生なんだけど
このスレにいるみんなってエンジニア職とかなの?
IT業界で働きたいって思ってるんだけど、企業についての情報とか集めるのが大変で
親とかも病気で働いてないから世間の事全く知らないんだよね
大学はそれでも中でしっかり勉強したから後悔はあんまりしてないけど
就職は一生の物だから、妥協しちゃダメだと思う
一応インターンや説明会は受けてるんだけど上っ面めいた話ばっかり聞かされるし
今バイトしてるIT系の会社で話は聞くんだけど、結論「入って見なくちゃわからない」って感じになってる

SIerじゃなくて、自分はweb系に行きたいんだけど、技術職って言うより企画とかをしてみたい
時間>給与>やりたい事って言う優先度なんだけど、こう言う会社はやめとけ
みたいなのってある?
文系だとちょっと不利かな

126以下、名無しにかわりましてVIPがお送りします:2018/12/31(月) 11:41:46.55 ID:xcNmcFXp

webかソフトウェア業界?かな
今はインフラ関係だから、その経験を活かすのも良いんだけど
勉強会で出会った子と話してたら金が物言う感じで働いてるだけじゃ得られる知識も限界かなって思ってきた

金融や医療関係のIT部門って激務?
新卒じゃ入りにくいかな
調べとこう

127以下、名無しにかわりましてVIPがお送りします:2018/12/31(月) 12:32:05.98 ID:07IswNmm

web系はいいと思うよ
仕事内容は入ってからだと思うよ
技術職をやってから企画っていうのがキャリアパスとしては普通なのかも
プログラミング全く分からない人が仕様考えるのは難しいでしょ?
でも結局入ってみなくちゃわからないのは本当

あと医療はわからないけど金融はやめておいた方がいいかも…

128以下、名無しにかわりましてVIPがお送りします:2018/12/31(月) 14:57:01.11 ID:xcNmcFXp

なんかダメだわ
頼る当てがないからって毎回ここに来てる気がする
根本的な考え方変えなきゃいけないな

129以下、名無しにかわりましてVIPがお送りします:2019/01/03(木) 10:22:59.28 ID:XnV7oEfc

pythonのデコレータを見ている

130以下、名無しにかわりましてVIPがお送りします:2019/01/15(火) 15:16:56.79 ID:rHwOMApH

apache strutsのformの中身ってsleniumとか使って手に入れることはできないの?
xpathで言うとってなってる部分を取得したいんだけど
ソースを見るだけじゃこれが存在しない
#entryShowForm > table.kyuko-kyukohoko

strutsの動きを一応見てるけど、これってhtml上でどう言う動きになってるの?
何かでformを呼び出すんだよね?

131以下、名無しにかわりましてVIPがお送りします:2019/01/18(金) 01:25:49.10 ID:ln9S61eM

15500
15050

30002
 
234050
234052

234051

132以下、名無しにかわりましてVIPがお送りします:2019/01/18(金) 01:34:40.50 ID:ln9S61eM

今日はjsしてるんだけどさ
これpythonと比べてめちゃくちゃデバッグもコンパイルも難しくない??
CやJavaとか見たいな従来のプログラム言語と比べて相当厄介なんだけど
https://ideone.com/J2CaV9
ブックマークレットを作ってるんだけど、ブラウザに依存する関数が多すぎてよくわからない

ページ内検索のプログラムを作ろうとしてるんだけど
目的は、入力した数の次に大きい数をハイライトするって言うもの(ctrl+fの機能強化見たいなの)

このコード、本来なら>>131の「15050」って打てばその上の「15500」がハイライトされるはずなんだけど15051だけ検索して終わっちゃう(謎)

デバッグしたいんだけどF12じゃよくわかんないし、みんなどうしてる?

133以下、名無しにかわりましてVIPがお送りします:2019/01/18(金) 01:35:28.78 ID:ln9S61eM

ふりがなプログラミンぐって言うjsの本持ってるけど
動くコードしか書いてないから動かない時どうすりゃいいのかわからんのよね

134以下、名無しにかわりましてVIPがお送りします:2019/01/18(金) 21:35:02.08 ID:83npPefo

>>132
javascript初めて触った!
while(i=0){}

while(i==0){}
じゃない?

135以下、名無しにかわりましてVIPがお送りします:2019/01/18(金) 21:40:33.14 ID:15cQztO7

F12 したらビジュアルデバッガーが使えるからデバッグはむしろ容易
今の javascript はクラスとかファットアローとかの導入で書きやすくなった
ただし javascript 界隈には == じゃなくて === を使えみたいな初見殺しがいくつかある

136以下、名無しにかわりましてVIPがお送りします:2019/01/18(金) 21:45:39.11 ID:83npPefo

>>135
なるほど!初見殺し!
やっぱり静的型付けの方が好きだな

137以下、名無しにかわりましてVIPがお送りします:2019/01/20(日) 22:18:26.40 ID:A/dZ9UwI

昔はもっと難しかったらしいね……
想像つかないや……
おかげさまでできました!
===はすっげえ厳しくチェック!って感じのイメージ
Void(0)が要らないことやNumber()がnumber()じゃダメだったり結構デバッグが難しいね
ブックマークレットやF12で動かしたjsってページ更新するまで変数を持ってるんだね
おかげで初期のHTMLを変数に突っ込んでおいて
InnerHTMLの操作を繰り返す事ができたよ
ってかこれも大体初見殺しじゃね!?

138以下、名無しにかわりましてVIPがお送りします:2019/01/21(月) 23:47:25.58 ID:73NcEPCK

Python、職場じゃ歓迎されてないっぽいんで
Javaしようと思う...
Railsもしたい...

139以下、名無しにかわりましてVIPがお送りします:2019/01/22(火) 05:22:26.38 ID:Wg+jouH2

ランタイムライブラリの長期サポートが有料化するJavaでまだ仕事できるの?
長期サポートがなくなって半年ごとに保守する仕事が舞い込んで逆にウハウハなの?

140以下、名無しにかわりましてVIPがお送りします:2019/01/22(火) 06:37:25.72 ID:DhqZxfa3

歓迎されてないってこわい

141以下、名無しにかわりましてVIPがお送りします:2019/01/23(水) 14:55:37.14 ID:1VxI1bDx

すまねえ教授の受け売りなんだ...
俺もそこ気になるんだけどなんでJavaなんだろう
phpとかも触りたくないけど
IT界のサグラダファミリアがCobolからJavaになった話とか聞くとまだまだあるのかな
わからん...もっとわからんなってきたぞ...

142以下、名無しにかわりましてVIPがお送りします:2019/01/25(金) 05:07:08.99 ID:hM30sxBK

rails ももう下火だしなあ

143以下、名無しにかわりましてVIPがお送りします:2019/01/25(金) 22:49:12.60 ID:usKE4uhE

なんだっけ
便利すぎてrails使って作られすぎたせいですごい遅くなったとか聞いてふふってなった

144以下、名無しにかわりましてVIPがお送りします:2019/01/26(土) 02:02:21.42 ID:8P6WxFo8

需要のある言語ってなんだろう

145以下、名無しにかわりましてVIPがお送りします:2019/01/26(土) 08:35:08.26 ID:fqh/sQTP

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 にすら抜かれてしまった

146以下、名無しにかわりましてVIPがお送りします:2019/01/27(日) 19:04:34.93 ID:Xj5oVdlc

もう少しpython続けようって気になれたありがとう
js少し触れるようになったから、cssにも手を出し始めたよ

世界の需要じゃレールス下がってるぽいけど
COBOLがブームな日本はどうなの?
業界に携わってないから分からない

147以下、名無しにかわりましてVIPがお送りします:2019/02/11(月) 16:06:55.23 ID:aFAKw4hh

教習所合宿ってかなり余裕ねえな!!!

148以下、名無しにかわりましてVIPがお送りします:2019/02/11(月) 18:23:04.77 ID:MwnQWBvi

合宿はホントにカツカツに詰め込むからね
その代わり気がついたら免許が取れてる

149以下、名無しにかわりましてVIPがお送りします:2019/02/12(火) 20:34:39.47 ID:ohVm6q60

仮免合格して路上出たけど速度すっごい怖い...
第二サティアンみたいな寮にいるから隣の奇声が...

自分のツイッターの最新つぶやき解析して
ツイート内容判定して泣いてるアイコンとか、笑ってるアイコンに自動で変更させるアプリとか作ってみたいんだけど
全く余裕がない😌

150以下、名無しにかわりましてVIPがお送りします:2019/02/12(火) 21:21:21.96 ID:wKHXWf/z

合宿中にそんな余裕あるわけ無いでしょう
いいから卒業することだけを考えるんだ

151以下、名無しにかわりましてVIPがお送りします:2019/02/13(水) 00:34:18.01 ID:0pmRGJlw

それ面白そうだから早く開発して♥

152以下、名無しにかわりましてVIPがお送りします:2019/02/13(水) 01:00:42.92 ID:9v9OUJ16

しかも合宿真っ最中にWEB面談あるんだよな…
今までしてきた事に興味あるから話しさせて!って、ちょっと不安だ……
どうでもいいけど淫らに進路変更する奴にまだ遭遇してない

153以下、名無しにかわりましてVIPがお送りします:2019/02/13(水) 20:50:11.19 ID:9v9OUJ16

効果測定1発合格〜
これで免許証もらう試験まで学科試験はない
教習所的にも難しめに設定してあるって言ってたし安心して受けられるぞ

154以下、名無しにかわりましてVIPがお送りします:2019/02/16(土) 14:19:13.69 ID:4twTJ5/W

合格〜〜
帰る〜〜

155以下、名無しにかわりましてVIPがお送りします:2019/02/26(火) 22:41:57.49 ID:LIIdnekm

kuinってどう?くいなちゃん可愛い?

156以下、名無しにかわりましてVIPがお送りします:2019/03/01(金) 00:31:14.35 ID:hJWqe80x

就活解禁!!
センセェは50社受けろ!って行ってたけど、15社エントリーが限界だった。。
企業そんなにわからない


このスレッドは過去ログです。