Pythonのお勉強 Part57

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2018/06/25(月) 09:57:59.24ID:aY7uj4w5
Pythonオフィシャルサイト
http://www.python.org/

■前スレ
Pythonのお勉強 Part56
http://mevius.5ch.net/test/read.cgi/tech/1519430841/

次スレは>>980が挑戦する

ソース貼れるサイト
https://pastebin.com/ ペーストビン
https://ja.osdn.net/pastebin/ OSDNコピペ ログインしないで投稿すると一週間で自動削除
2018/06/26(火) 01:29:31.49ID:UJYVTaby
他人が書いたテキストファイルから必要な行だけ抜き出そうとしたら
ファイルのほうの書式ミスだの誤植だのでうまくいかなかったときの悲しみ
2018/06/26(火) 08:45:04.93ID:ayn5GnnW
scrapyで1分毎に1度アクセスしてスクレイピングをしたいのですが
毎回起動すると巡回するまでに時間がかかります
ですので起動しっぱなしで巡回させたいのですがどのようにしたらいいのでしょうか

spider内でsleepしたりもしたんですがアイテムの処理まで止まってしまいダメでした
2018/06/26(火) 10:22:32.88ID:oIj/6dLD
業務妨害を加速させたいとな?
2018/06/26(火) 11:33:00.83ID:q7eaTJhV
CrawlerRunner を使えばできそうな感じがする
ttp://scrapy-ja.readthedocs.io/ja/latest/topics/practices.html

scrapy自体使ったことないからよく知らないけどもw
2018/06/26(火) 13:42:21.19ID:ayn5GnnW
ありがとうございます
reactorの仕組みが理解できてないんですけど
.run()をループ内に入れると失敗するので以下のようにしたのですが
spiderの__init__は実行されてるのですがリクエストは実行されず最後にまとめてされてるみたいです
(この場合3分後に)

https://pastebin.com/6tvdPRnL

出力
__INIT__
__INIT__
__INIT__
start_requests
start_requests
start_requests
request: https://www.yahoo.co.jp/
request: https://www.yahoo.co.jp/
request: https://www.yahoo.co.jp/
2018/06/26(火) 14:09:43.07ID:ayn5GnnW
とりあえずProcessを作りその中で実行するようにしました
コマンドだと10秒ぐらい掛かってましたがscriptから実行すると3秒ほどに短縮できたので!
2018/06/26(火) 17:44:51.37ID:tY6A4pT3
>>10
大幅な手直しの時には、さすがにそんなことやってられないでしょう。
対応していれば、行選択してショートカットキーで一発なんだから。
2018/06/27(水) 06:04:56.19ID:Av32bs5l
前スレ978です
お礼が大変遅くなって申し訳ありませんでした
すすめていただいた本をまずは書店で見てきたいと思います
ありがとうございました
2018/06/27(水) 16:18:33.53ID:TKlgNhKw
>>8
jupiterとvscodeならctrl+/で行頭に#入れてくれたと思う
2018/06/27(水) 16:30:54.06ID:X2gyhKWn
vimならマクロ設定して@@でいける  はいっ、vimの勝ちーー!
21デフォルトの名無しさん
垢版 |
2018/06/27(水) 16:38:58.81ID:2dfKv2YD
vim最強
2018/06/27(水) 19:08:41.36ID:UerH7Abj
ネタなのか…
2018/06/28(木) 00:11:52.26ID:tMTnxUV1
pythonだとデータサイエンス屋さん以外でまともな人はたいていemacsかvim
2018/06/28(木) 00:30:32.41ID:lgGkat8A
ctrl+/ -> 2ストローク
esc @ @ -> 3ストローク

ダメじゃん
2018/06/28(木) 00:38:37.07ID:h/Ekqdxp
vimなら ^, ctrl+V, jjjjj, I, #, esc が普通じゃない?
2018/06/28(木) 07:23:00.10ID:WgQA5F5F
トリプルクォートで文字列化
さっさと修正したらバッサリ削除してコミット。
2018/06/28(木) 08:02:32.74ID:UbDQ2CeD
numpyってstrからastypeで変換できないんだな
2018/06/28(木) 09:33:32.71ID:9GisGdyJ
>>12
1分に1アクセスならDOWNLOAD_DELAY=60だろ
1分ごとに全部クロールならCrawlerProcess使え
2018/06/28(木) 09:52:59.74ID:juJJBKVT
scrapy使い結構いるのかな? 私はrequestsでアクセスして正規表現でデータ抽出ですわ
30デフォルトの名無しさん
垢版 |
2018/06/28(木) 16:26:28.85ID:FdbC2U6h
>>27
np.array(list('hoge'), astype='uint8')
2018/06/28(木) 16:52:34.35ID:BoCABAQN
>>30
intへの変換だよ
32デフォルトの名無しさん
垢版 |
2018/06/28(木) 17:35:24.41ID:nGiHMjHt
エスパー希望
2018/06/28(木) 21:08:47.06ID:5D3e8xlL
>>29
scrapyめんどいな、xpathとかなんやねん?
性器表現もだるいだろ


結論
ビューティフォースープ最高!
34デフォルトの名無しさん
垢版 |
2018/06/29(金) 20:16:31.44ID:kq5wxYLp
BeautifulSoupのパーサーにhtml5lib(1.0.1)使ってますが、
先頭に空のコメントがあると見つからずNoneになるのですが、
これっておかしいですよね?lxmlとhtml.parserは問題ないのに
soup = BeautifulSoup('''<div></div>''', 'html5lib')
print(soup.div) # <div></div>

soup = BeautifulSoup('''<!----><div></div>''', 'html5lib')
print(soup.div) # None

soup = BeautifulSoup('''<!--コメント--><div></div>''', 'html5lib')
print(soup.div) # <div></div>
35デフォルトの名無しさん
垢版 |
2018/06/29(金) 20:19:18.50ID:AheYOSRK
soup = BeautifulSoup('''<!-- --><div></div>''', 'html5lib')
は?
2018/06/29(金) 21:39:52.07ID:uYKzuekL
re.search(r'(<[^<>!-]+>)+', s).group()
ひ?
2018/06/30(土) 00:26:17.52ID:tr0WXiW5
jQuery では、CSS セレクター。
Ruby のNokogiri では、CSS セレクター・XPath

ちなみに、Chrome で、XPathを取り出せるから、
それを、CSSセレクターに直せばよい

XPath では、[1] とか、順番で表示されるから、
順番が変わると取得できないので、CSSセレクターの方が良い

正規表現は、木構造に対応していない

<1><2></2><3></3></1>
これで、<1></2> が対応してしまう。
</1>よりも先に、</2>が見つかるから
2018/06/30(土) 00:29:34.13ID:tr0WXiW5
HTML のコメント要素なんて、作れるか?
2018/06/30(土) 10:27:04.47ID:vt/zfpeT
取得したいのは木構造ではない エロ画像だ
40デフォルトの名無しさん
垢版 |
2018/06/30(土) 12:22:39.79ID:QJJEkoJ9
空気嫁風船
2018/06/30(土) 18:42:58.71ID:T4yKqUWA
エロ画像を取得するために
木構造を解析するんだヴォケ
2018/07/01(日) 01:01:36.78ID:yaDvqYhr
性器表現でエロ画像を取得
43デフォルトの名無しさん
垢版 |
2018/07/01(日) 19:55:16.28ID:tGZJPJtp
初心者なんだけど、「パーフェクトパイソンPython」で書いてあるコードがPython 3.7で動かないのは、書籍が古すぎってことでいいのか?
2018/07/01(日) 20:01:59.65ID:usR85dqh
まともな本なら動作確認されてるバージョンがあるからそれ使えよ
なんで3.7使うの?
45デフォルトの名無しさん
垢版 |
2018/07/01(日) 20:52:12.89ID:tGZJPJtp
それが新しいからさ

とりあえず3.3で試してみる

ありがと
2018/07/01(日) 21:24:34.98ID:kmf9mETx
ステイブルを辞書でひこう
2018/07/01(日) 23:40:54.02ID:wtxZXieP
エロ画像 キボンヌに正規表現使わなかった。
https://ideone.com/hikEa4

linuxコマンドのwgetをwinコマンドかosモジュールで置き換えたら使える。
2018/07/02(月) 09:26:04.09ID:a3JLFqUP
imgのsrcはサムネ画像の場合があるからhrefから取らないとダメだよ ( ´,_ゝ`)プッ
49遊園地
垢版 |
2018/07/02(月) 11:03:32.08ID:+NSNTcQb
>>48
if文で全部取り除いた
50デフォルトの名無しさん
垢版 |
2018/07/02(月) 18:53:35.63ID:5apw8p9i
そんじゃ次は
クッキーやリファラに対応してみようか
2018/07/02(月) 19:27:46.78ID:+k/mS6Yk
3.7は何が新しいの?
2018/07/03(火) 00:45:35.71ID:q6vLd9up
起動が爆速になった
2018/07/04(水) 21:50:50.49ID:59VAySEO
Python3.5を使っています。
普段はbashでプログラミングをしているのですが、Python(3)にはいわゆる「正規表現演算子」はないのでしょうか。
'a' =~ '[abc]+'
にTrueを返し
'd' =~ '[abc]+'
にFalseを返すような演算子です。
if文で使われているようなのですが、==演算子のように直には使えないのでしょうか?
54デフォルトの名無しさん
垢版 |
2018/07/04(水) 21:53:56.40ID:gFgZc5FG
1FE
2018/07/04(水) 22:01:43.38ID:v2Sox3dI
>>53
ありませんなあ
56デフォルトの名無しさん
垢版 |
2018/07/04(水) 22:31:43.88ID:TkykG5xy
>>53
ありませんねぇ。
2018/07/04(水) 22:51:55.97ID:w3aVzChY
>>53
正規表現を全く必要としないアプリケーションも存在します、そのためそれらを含めて言語仕様を無駄に大きくする必要はありません

と言うことなので諦めてください
https://docs.python.jp/3/howto/regex.html#compiling-regular-expressions
2018/07/04(水) 22:56:14.86ID:na9DBSxB
>>53
正規表現にマッチしたらtrue しなかったらfalseを返してほしいなら

re module のre.matchのマッチオブジェクトをifの後にぶっこめばマッチすればtrueしなければnoneが返ってfalseになるよ
59デフォルトの名無しさん
垢版 |
2018/07/05(木) 11:43:41.72ID:IcGtf/nv
ageとく
2018/07/05(木) 21:26:50.59ID:CqUNBSEq
>>58
ごめんなさい。もうちょっと詳しく書いてもらってもいいですか。
できることならサンプルもちょろっといただけると嬉しいです。
61デフォルトの名無しさん
垢版 |
2018/07/05(木) 22:40:53.27ID:wMMrg/9A
>>60
https://ideone.com/55wqfj

これでいいかな?
2018/07/05(木) 23:07:07.10ID:sV2MZAFD
>>23
え?
2018/07/05(木) 23:42:10.60ID:CqUNBSEq
>>61
ありがとうございました。
2018/07/06(金) 01:11:38.30ID:i/IIW+Ad
う〜ん。演算子を自分で作れたら嬉しいんですけどね……。
2018/07/06(金) 07:17:03.39ID:JtODu3nj
>>64
クラス使えば演算子の定義もできるけど。
66遊園地 ◆ExGQrDul2E
垢版 |
2018/07/06(金) 14:48:21.33ID:SE3XEYsd
頼む! 助けてくれ!!

キーボードを、
エレコム ワイヤレスキーボード 静音タイプ メンブレン式 コンパクト ブラック TK-FDM078TBK
に変えたんだが、EnterとBackSpaceが押し難い。

どうしたら、良いんだ?
2018/07/06(金) 15:08:09.86ID:LdCqv7/c
キーの割り当て変えるツールで押しやすいキーと入れ替えれば当座はしのげるだろ
68デフォルトの名無しさん
垢版 |
2018/07/06(金) 15:17:47.09ID:odzQpd8G
ステマかよ
69デフォルトの名無しさん
垢版 |
2018/07/06(金) 15:33:29.76ID:SE3XEYsd
Firefoxのショートカット多様するから入れ替えるキーが思いつかん。
70デフォルトの名無しさん
垢版 |
2018/07/06(金) 15:38:38.61ID:odzQpd8G
キーボード追加汁
2018/07/06(金) 16:05:24.45ID:DEESRTvo
HHK使わないん?
2018/07/06(金) 16:09:00.39ID:24WPYeSf
そのうち慣れるよ、嫌なら他のキーボード買えばいいじゃん
押しやすいキーと入れ替えるという発想が信じられん バカなの?
2018/07/06(金) 16:33:27.16ID:SE3XEYsd
コンパクトで良いなー。と、思って買ったばかり何だよ。

スペース左側の変換をエンターにして、
カタカナひらがな の場所をバックスぺーすにした。
74デフォルトの名無しさん
垢版 |
2018/07/06(金) 16:56:40.78ID:odzQpd8G
>>72
https://pbs.twimg.com/media/DaUKL4lV4AEcjA5.jpg
https://pbs.twimg.com/media/DaUKL4lV4AEcjA5.jpg:large
75デフォルトの名無しさん
垢版 |
2018/07/06(金) 17:08:08.80ID:qtqoxO2d
これ面白いからおすすめ
https://goo.gl/U5BA1Y
2018/07/06(金) 19:06:08.08ID:cmD7yKAf
>>73
つemacs
課題は解決する。
2018/07/06(金) 23:42:38.37ID:W/isEwYg
enumerateとzipの合わせ技、快適すぎるw
range使ってインデックス作成していたのがアホみたい
2018/07/07(土) 23:15:16.85ID:7HLM3fyt
if num[temp] >0:
for i in range(result[temp]):
hoge1, hoge2 = hogehoge(a, b, c[temp])
result2 = hogex(d, hoge1, hoge2)

このようなループ処理を複数回(result回数分)行いたいです
多重forで書くととても重くなってしまうと思うのですが、何か良い高速化手法は無いですかね?

a, b, dは定数
cはリスト
hoge1, hoge2はint型の変数です
2018/07/08(日) 00:26:05.04ID:Jzinsuog
繰り返しhoge1、hoge2、result2に計算結果を書き込んでいるだけなのであれば、最後のただ1度だけ計算すればよいのでは?
質問は正確にー
2018/07/08(日) 03:29:49.37ID:/D8rnv+z
iがfor内部で使われてないように見えるから多分何かしら誤植があるんだろうけど
これだったら内包表記で書けるだろ
2018/07/08(日) 10:39:13.40ID:vD9CznKQ
根本的に高速化するなら行列形式で書くしかないけどな
82デフォルトの名無しさん
垢版 |
2018/07/08(日) 11:45:12.12ID:MJ8iSrG7
あほか
2018/07/08(日) 12:36:39.11ID:XRwcXxE1
>>> num = [-3, -2, -1, 0, 1, 2, 3]
>>> result=[i+1 for i in num]
>>> d = 3
>>> c = [i+10 for i in num]
>>> b = 2
>>> a = 1
>>>
>>> def hogehoge(a, b, c):
    return a+b, b+c

>>> def hogex(a, b, c):
    return a+b+c

>>>
>>> l = []
>>> for temp in range(len(num)):
    if num[temp] > 0:
        for i in range(result[temp]):
            hoge1, hoge2 = hogehoge(a, b, c[temp])
            result2 = hogex(d, hoge1, hoge2)
            l.append(result2)

            
>>> l
[19, 19, 20, 20, 20, 21, 21, 21, 21]
>>>
>>>
>>> [hogex(d, *hogehoge(a, b, c[temp])) for temp in [temp for temp in range(len(num)) if num[temp]>0] for i in range(result[temp])]
[19, 19, 20, 20, 20, 21, 21, 21, 21]
>>>
8478
垢版 |
2018/07/08(日) 13:38:26.20ID:1Fr6jxFu
すみません間違えていました
正確に言うと、hogehogeでなんらかの座標を算出して、hogexでopencvで図形をimgに描画
これをhpgehpgeの入力を順番に変えて数回ほど繰り返したいです

for i in range(max)
if temp[i].size:
for j in range(temp[i]):
hoge1, hoge2 = hogehoge(a, b, result[i][j])
img = cv2.hogex(d, hoge1, hoge2)

リストに出力しない場合は内包表記使えないですかね?
イマイチ内包表記の事分かってないです
2018/07/08(日) 14:09:53.71ID:ai00mC6I
それ支配的なのはhogexやhogehogeだよね?
ボトルネックを見つけないと高速化の意味ないよ
2018/07/08(日) 14:14:30.75ID:XRwcXxE1
hpgehpgeはどこにあるの?
あと5chだと半角スペースが消えるから全角スペースでインデント表現しないと
リストに出力しようがしまいが内包表記は使えるよ
2018/07/08(日) 14:29:35.70ID:XRwcXxE1
>>> [print('hoge') for i in range(3)]
hoge
hoge
hoge
[None, None, None]
>>>
リストに出力しなかったらNoneが入るだけ

[cv2.hogex(d, *hogehoge(a, b, reault[i][j])) for i in [i for i in range(max) if temp[i].size] for j in range(temp[i])]
これでいけるんじゃないかな?
8878
垢版 |
2018/07/08(日) 22:59:07.98ID:vTpYTVTg
ありがとございます
アドバイスを参考に試行錯誤してたのですがちょっと自分には難しかったです

img = cv2.hogex(img, d, hoge1, hoge2)

imgという変数(画像)が既に存在する際にそれの上に何かを描画する関数なのですが、
内包表記の中でimgに代入させるのは難しいですかね?

あと、内包表記で複数個の処理を行うことって出来ますか?
感覚的にはこの様な感じです
[hogehoge(a, b), hogex(c, d, e) for i in range(num)]
2018/07/08(日) 23:22:41.95ID:Jzinsuog
条件を後から追加すんなー。
後、得たい結果がリストでないと内包表記じゃ早くならんよ?
90デフォルトの名無しさん
垢版 |
2018/07/09(月) 00:06:53.03ID:U3tDSUR2
自作関数じゃないhogexは晒してもいいだろうに
そんなことしてると誰も答えなくなる
2018/07/09(月) 03:58:46.23ID:lNBlYhG9
そう言って答えなくなったためしはない
承認欲求過多のボウフラは次々に湧く
2018/07/09(月) 09:56:58.16ID:eu099A4d
>>88
>内包表記の中でimgに代入させるのは難しいですかね?
内包表記の中で代入はできません、どうしてもやりたいならクラスで
>>> class fuga:
def __init__(self):
self.img = 0
def hogex(self, a, b, c):
self.img = cv2.hogex(self.img, a, b, c)
return self.img

>>> f = fuga() #インスタンス作って、これを使う
[f.hogex(d, *hogehoge(a, b, reault[i][j])) for i in [i for i in range(max) if temp[i].size] for j in range(temp[i])]

>あと、内包表記で複数個の処理を行うことって出来ますか?
タプルかリストにまとめれば複数個処理できますよ
>>> [(print('hoge'), print('fuga')) for i in range(3)]
hoge
fuga
hoge
fuga
hoge
fuga
[(None, None), (None, None), (None, None)]
2018/07/09(月) 09:58:49.60ID:eu099A4d
>>> class fuga:
    def __init__(self):
        self.img = 0
    def hogex(self, a, b, c):
        self.img = cv2.hogex(self.img, a, b, c)
        return self.img
2018/07/09(月) 10:00:54.05ID:TMBQQ2rn
これだったらmapでできる
2018/07/09(月) 11:55:16.44ID:bJwhh199
hogehogeかhogexがボトルネックになってたらループをどうこうしても早くならないよ。
高速化するならまずボトルネックを特定しよう。
hogehogeやhogexがボトルネックで並列処理可能ならマルチスレッドで実行すれば少し早くなるかもね。
そもそもpythonみたいな実行速度よりコードの書きやすさを重視した言語で高速化するのは大変だよ。
pythonにちゃんとしたプロファイラーとかあるの?
2018/07/09(月) 12:08:42.40ID:EKBiOe/0
「ちゃんとした」とは
2018/07/09(月) 12:44:30.49ID:bJwhh199
プログラム内の各関数の実行時間を計って、ボトルネックになる場所を特定できれば、ちゃんとしたプロファイラだよ。
今ぐぐったら、cProfileとprofileっていうプロファイリングするモジュールがあるじゃん
2018/07/09(月) 18:23:50.78ID:nl/4tW7P
3.7にしたらscrapy (正確にはtwisted)が動かなくなった
2018/07/09(月) 21:13:16.40ID:lNBlYhG9
ナイス人柱(嘲笑)
2018/07/09(月) 21:57:16.39ID:mmm1tgmy
スクレイピングは興味はあるけど
別に収集したいデータがないから学習のモチベーション上がらない
2018/07/09(月) 22:43:52.82ID:eu099A4d
データ収集以外にRSSリーダー的なのも作れちゃうぞ
更新しているかどうか確認して更新してたら開くようにするとか

RSSに対応しているサイトはもちろんRSSリーダー使っているけど
対応していないサイトの方が多いんだよね、そういうのに超便利
2018/07/09(月) 22:53:12.46ID:mAItLGpx
RSS リーダーって未だに何なのか良く分からない。
2018/07/10(火) 00:30:11.92ID:JQDf+AP0
自分でサーバー持ってないとRSSリーダー自作してもあまり便利ではないからなあ
PCでもスマホでも閲覧履歴共有できるようになってるようなwebサービスが結局一番便利
2018/07/10(火) 07:05:32.75ID:skK1uyoo
見出しだけ拾ってきて表示してくれる機能

としてもイマイチな感じなんだが>RSS
2018/07/10(火) 07:29:56.38ID:xnT+bl2i
>>104
単に見出しを拾うのではなく、「更新されたら」見出しを拾うというのがRSSの役割
チェックしたいサイトが1つ2つなら手動で確認してもいいが10や20のサイトを一々巡回していられない
2018/07/10(火) 09:21:54.94ID:6FGIeywF
ニュースなら読みたいときに読むだけだから、更新されたかどうかは興味ない。
ブログとかかね?
発信したい人はTwitterなんかだろうし。
FBとかは通知もらえるし。
2018/07/10(火) 09:37:14.32ID:ul2eLyV6
ここでRSSの有用性について議論()すんのやめてくれる?
2018/07/10(火) 10:19:01.04ID:PHmC4ipr
RSSに対応していないため自作更新チェックスクリプトで更新チェックしているのはこれくらいかな(約400個)
 5ch
 ブログ
 無料で読めるWeb漫画(裏サンデーとか)
 気になる商品のアマゾンレビューが追加されたかチェック
 気になる商品の価格.comのレビューが追加されたかチェック
 各商品サイトで新商品チェック(カメラとかファーストフードとか)
 インスタグラム
 qiitaの記事
 Youtube(登録はしたくないけどチェックしたいチャンネルとか検索結果とか)

読みたくなった時に更新チェック走らせて、更新されたものだけ出てくるから
そこから興味が沸いたのだけ見る感じ
2018/07/10(火) 11:23:14.52ID:KyUi8F6Z
>>106
Twitterは気づかないで流れてしまうことがある
タイトルだけ全件チェックして自分で取捨選択したいニュースサイトとかたまにしか更新されないブログとかはwebのRSSサービスで勝手に取得してくれるのが便利
2018/07/10(火) 13:09:48.84ID:ul2eLyV6
あっそ
2018/07/10(火) 15:03:09.67ID:QC5JWrGp
ループ実行中にソースを書き換えるとそのまま反映してくれるんだがすごいな
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況