- 1 名前:デフォルトの名無しさん mailto:sageteoff [2016/10/12(水) 13:34:49.56 ID:CGbCriuU.net]
- このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。 へび使いが優しくコメントを返しますが、お礼は Python の布教と初心者の救済をお願いします。 エラーを解決したいときはエラー表示や環境(バージョン/IDE or command line)を略さずに書き込んで下さい。 騙りが頻発しています。質問する方は一時的なトリップをつけることを検討して下さい。 次スレは >>985 辺りで 前スレ くだすれPython(超初心者用) その30 echo.2ch.net/test/read.cgi/tech/1466569767/ 関連スレ Pythonのお勉強 Part51 echo.2ch.net/test/read.cgi/tech/1443700103/ ◆関連リンク Python の Home Page ttp://www.python.org/ ◆長いコードはこういうところにはってください ttp://ideone.com/ ttp://codepad.org/ ttp://pastebin.com/ ttp://dpaste.com/ https://try.jupyter.org/ ◆まとめwiki ttp://python.rdy.jp/
- 413 名前:デフォルトの名無しさん mailto:sage [2016/11/29(火) 11:21:29.90 ID:siwyj2pL.net]
- >>402
これだと簡単に出来ました >>403 project/setup.py project/project/__init__.py project/project/hoge.py project/project/data.txt なふうに__init__.pyがないとdata.txtもインストールされないことに気づきハマりましたがこれも便利でした
- 414 名前:デフォルトの名無しさん mailto:sage [2016/11/29(火) 19:00:22.79 ID:3ZCU7F/e.net]
- docutilsでreStructuredTextをhtmlに変換したいんですけど
import docutils.core s = """ hello ===== """ print(docutils.core.publish_parts(s, writer_name='html')['html_body']) これ実行しても <div class="document" id="id1"> <h1 class="title">こんにちは</h1> </div> って表示されます 余計なclassとか要素を付け足さずに<h1>hello</h1>とだけ変換して欲しいんですけど 何か必要な設定おしえてください もしくは代替ライブラリありませんか?
- 415 名前:デフォルトの名無しさん mailto:sage [2016/11/29(火) 19:01:55.56 ID:3ZCU7F/e.net]
- 訂正↓
これ実行しても <div class="document" id="id1"> <h1 class="title">hello</h1> </div> って表示されます
- 416 名前:デフォルトの名無しさん mailto:sage [2016/11/29(火) 19:46:15.50 ID:glNciwx+.net]
- Xpath のライブラリなどを使って、タグから属性を削除すれば?
- 417 名前:デフォルトの名無しさん mailto:sage [2016/11/29(火) 22:23:30.60 ID:rYidf/CN.net]
- pythonも原則finalで変数にしたい時だけvar付けるみたいな仕様にしない?
そっちの方がいくない?
- 418 名前:デフォルトの名無しさん mailto:sage [2016/11/29(火) 23:53:06.16 ID:6NvmVSGH.net]
- webdriver、BeautifulSoupを使ってパラメータを与える場合は、URLに書く方法しかないのでしょうか?
例えばrequestsのように与えることはできるのでしょうか? #--------------------------- url = "www.python.org" # URLはパラメータ入れるものではないです。サンプルです。 #--------------------------- import os from selenium import webdriver from bs4 import BeautifulSoup driver = webdriver.PhantomJS(service_args=[], service_log_path=os.path.devnull) driver.get(url + "?key=value") →requestsのようにパラメータを渡す方法はある?? html = driver.page_source.encode('utf-8') soup = BeautifulSoup(html, "lxml")
- 419 名前:414 mailto:sage [2016/11/29(火) 23:55:21.84 ID:6NvmVSGH.net]
- >>414 の続きです。
#--------------------------- import requests p = { "key": "value" } requests.get(url, params=p)
- 420 名前:デフォルトの名無しさん [2016/11/30(水) 00:11:29.92 ID:sQvK4opq.net]
- オセロを作りたいのですが
ideone.com/FH3SDw 初期値の真ん中4つをセットするとこの様なアウトプットになってしまいます。。。 どこがおかしいのでしょうか?
- 421 名前:デフォルトの名無しさん mailto:sage [2016/11/30(水) 00:30:03.48 ID:rS+9w+V/.net]
- >416
field = [[0]*8]*8 とすると、一行目のリストのコピーが行数分作られるのでなく、 一行目のリストの参照が行数分作られる。 なので、どの行を変えても、変更が全ての行に反映されてしまう。 field=[[0]*8 for _ in range(8)] とすれば回避できる。
- 422 名前:デフォルトの名無しさん [2016/11/30(水) 00:52:03.89 ID:sQvK4opq.net]
- >>417
なるほど〜 C言語から離脱してPython最近始めたのですが どうしてもC的な思考で書いてしまう… ちゃんと仕様見ないとダメですね!有難うございました
- 423 名前:デフォルトの名無しさん [2016/11/30(水) 13:25:06.48 ID:3Q1IinyT.net]
- C/C++以外の言語では、構造体以外のオブジェクトでは、参照だけがコピーされる
newが呼ばれた回数が、実体の数。 newが呼ばれていなかったら、参照だけがコピーされたため、同一のオブジェクトを指す
- 424 名前:デフォルトの名無しさん mailto:sage [2016/11/30(水) 13:46:16.30 ID:3Q1IinyT.net]
- >>414-415
Rubyによるクローラー開発技法 巡回・解析機能の実装と21の運用例 佐々木拓郎・るびきち、2014
- 425 名前:デフォルトの名無しさん mailto:sage [2016/11/30(水) 15:00:40.61 ID:SHyKKiWG.net]
- >>419
初心者スレだしわかりやすくウソ混ぜることもあるが これは害悪
- 426 名前:デフォルトの名無しさん mailto:sage [2016/11/30(水) 16:15:12.87 ID:ApvCUq7V.net]
- 値じゃなくて参照だけがコピーされるんですよ。
ギフハフのARにハッキングされたのでcloneメソッドを作って対抗しました。 newが呼ばれなかったのは陰謀です。 Rubyによるクローラーで僕の脳内が盗撮・盗聴されてるんです。
- 427 名前:デフォルトの名無しさん mailto:sage [2016/11/30(水) 22:59:08.37 ID:QrNzcyxl.net]
- ブレインスクレイピングやろなあ
- 428 名前:デフォルトの名無しさん mailto:sage [2016/12/01(木) 00:35:10.30 ID:RhJOOc9G.net]
- ttp://elfen00.github.io/Selenium/
上記を参考にTorを使ったIP変更をテストしているのですが、うまく動きません。 service_argsを空[]で実行すると意図した結果が得られるので、 phantomjsのパス(/usr/bin/phantomjs)は通っているはずです。 原因は分かりますでしょうか? --------------------------- from selenium import webdriver # service_args = [] # ->これだと正常に結果を得られる service_args = [ '--proxy=127.0.0.1:9050', '--proxy-type=socks5', ] # driver = webdriver.PhantomJS('/usr/bin/phantomjs', service_args=service_args, service_log_path="log") driver = webdriver.PhantomJS(service_args=service_args, service_log_path="log") driver.get("api.aoikujira.com/ip/json") print(driver.page_source) --------------------------- # service_argsにproxyをセットした結果 <html><head></head><body></body></html> # service_argsを空にした実行結果 <html><head></head><body>{"API_URI":"http:\/\/api.aoikujira.com\/ip\/get.php","REMOTE_ADDR":"*.*.*.*",
- 429 名前:デフォルトの名無しさん mailto:sage [2016/12/01(木) 07:56:38.54 ID:91ReGJeh.net]
- 1行ずつデバッグして、変数をwatchするとか、
詳細なエラーメッセージを表示するとか、 OSのエラーメッセージを見るとか エラーメッセージが無いと、何のエラーが起こっているのか、わからない
- 430 名前:デフォルトの名無しさん mailto:sage [2016/12/01(木) 12:07:47.64 ID:5zfWITAP.net]
- service_args = {
'proxy':'127.0.0.1:9050', 'proxy-type':'socks5', }
- 431 名前:デフォルトの名無しさん mailto:sage [2016/12/02(金) 23:44:39.88 ID:Oh8J5Su0.net]
- >>425,426
コメントありがとうございます。 426さんの{}で辞書渡ししましたが、エラーになりました。 []で渡したときは特にエラーはなく、service_log_path="log" で指定したファイルを見ると下記が出ていました。 何かわかりますでしょうか? >つづく
- 432 名前:デフォルトの名無しさん mailto:sage [2016/12/02(金) 23:45:52.01 ID:Oh8J5Su0.net]
- [INFO - 2016-12-02T14:31:46.183Z] GhostDriver - Main - running on port 36789
[INFO - 2016-12-02T14:31:47.130Z] Session [*** セッション番号?? ***] - page.settings - {"XSSAuditingEnabled":false, "javascriptCanCloseWindows":true, "javascriptCanOpenWindows":true, "javascriptEnabled":true, "loadImages":true, "localToRemoteUrlAccessEnabled":false, "userAgent":"Mozilla/5.0 (Unknown; Linux x86_64) AppleWebKit/538.1 (KHTML, like Gecko) PhantomJS/2.1.1 Safari/538.1", "webSecurityEnabled":true} [INFO - 2016-12-02T14:31:47.131Z] Session [*** セッション番号?? ***] - page.customHeaders: - {} [INFO - 2016-12-02T14:31:47.131Z] Session [*** セッション番号?? ***] - Session.negotiatedCapabilities - {"browserName":"phantomjs", "version":"2.1.1", "driverName":"ghostdriver", "driverVersion":"1.2.0", "platform":"linux-unknown-64bit","javascriptEnabled":true, "takesScreenshot":true, "handlesAlerts":false, "databaseEnabled":false, "locationContextEnabled":false, "applicationCacheEnabled":false, "browserConnectionEnabled":false, "cssSelectorsEnabled":true, "webStorageEnabled":false, "rotatable":false, "acceptSslCerts":false, "nativeEvents":true, "proxy":{"proxyType":"direct"}} [INFO - 2016-12-02T14:31:47.131Z] SessionManagerReqHand - _postNewSessionCommand - New Session Created: *** セッション番号?? ***
- 433 名前:デフォルトの名無しさん mailto:sage [2016/12/03(土) 02:11:25.14 ID:MDjG3Lcn.net]
- >>424
試した限りポートが違ってると正しい値が帰ってこない。 そこでふと気づいたんだけどひょっとしてTorBrowser使ってたりしない? その場合ポートは9050じゃなくて9150になるんだけど。
- 434 名前:424 mailto:sage [2016/12/03(土) 03:09:26.47 ID:LC4g1S/3.net]
- >>429
試して頂いてありがとうございます。 TorBrowserではなく、424にあるように webdriver.PhantomJS() を使っているので、 PhantomJSブラウザを使っているんだと思っているのですが、自分は何か勘違いしてるんですかね? ちなみに下記ポートを使ってみましたが、結果は同じ(<html><head></head><body></body></html>)でした。 service_args = [ '--proxy=127.0.0.1:9150', '--proxy-type=socks5', ]
- 435 名前:デフォルトの名無しさん mailto:sage [2016/12/03(土) 04:34:38.63 ID:YXCqjzXm.net]
- 男でもパイレディース入れますか?
- 436 名前:デフォルトの名無しさん mailto:sage [2016/12/03(土) 10:32:31.81 ID:MDjG3Lcn.net]
- >>430
俺が言いたかったのはTorBrowserを単体のTorの代わりに使ってない? って意味だったんだけど重要なのはそこじゃなくてプロキシに繋がらないときに その値が返ってくるってことなんだけど他のプログラムからそのプロキシに 接続できることは確認してる?
- 437 名前:デフォルトの名無しさん mailto:sage [2016/12/03(土) 12:11:07.79 ID:xA6F3n6A.net]
- >>424はやましいことを企んでるやつだろ
こんな奴の力になるな
- 438 名前:デフォルトの名無しさん mailto:sage [2016/12/03(土) 12:34:45.97 ID:Y9I90W1E.net]
- torでbotネットワーク作ってホワイトハウスと戦うつもりやろなぁ
- 439 名前:424 mailto:sage [2016/12/03(土) 16:26:42.80 ID:vCmaXAye.net]
- >>432
ご意見ありがとうございました。 どうやらtorのしくみを理解できていませんでした。 torを常駐させて、そのソフト経由で外に抜けていくんですね。(これがproxy?ここがまだあまりわかっていない) torをインストールし、centosなので、 /etc/init.d/tor start で起動したら、pythonで期待した結果が返ってきました。 大変参考になりましたありがとうございました。 >>433,434 どこかを攻撃とかではないので安心してください。 そもそもこんな設定に手間取ってるようなレベルでは、至る所に痕跡残して即アウトになると思いますし。
- 440 名前:デフォルトの名無しさん [2016/12/03(土) 18:21:00.98 ID:iU+ignEA.net]
- 127.0.0.1 の時点で気付くべき
- 441 名前:デフォルトの名無しさん [2016/12/03(土) 18:34:03.92 ID:SrLkI6mB.net]
- hello.shに以下入力し実行したときに、
それぞれ別ターミナルで開き実行したいのですが、どうすればよいでしょうか。 #!/bin/env python /home/hello1.py /home/hello2.py /home/hello3.py
- 442 名前:デフォルトの名無しさん mailto:sage [2016/12/03(土) 22:18:12.90 ID:IRGw9hUe.net]
- gnome-terminal
「linux 端末 開く コマンド」で検索!
- 443 名前:デフォルトの名無しさん mailto:sage [2016/12/03(土) 22:21:26.72 ID:MF5SHVtU.net]
- >>437
shebangおかしい それbashスクリプトだろ
- 444 名前:デフォルトの名無しさん mailto:sage [2016/12/03(土) 22:51:24.14 ID:/gfLXcDp.net]
- gnome前提なのも草やけど
どうせ書くならgnome-openやろ
- 445 名前:デフォルトの名無しさん mailto:sage [2016/12/04(日) 16:47:25.58 ID:DTlwy0pT.net]
- [1,0,0,0,2]このリストを作るとき
[1] + [0]*3 + [2]こう書いてますが 他にも書き方ありますか?
- 446 名前:デフォルトの名無しさん [2016/12/04(日) 17:25:19.63 ID:yVPKVwxZ.net]
- [1,0,0,0,2]
- 447 名前:デフォルトの名無しさん mailto:sage [2016/12/04(日) 21:18:31.73 ID:dK8nOpyX.net]
- 笑わすなよww
- 448 名前:デフォルトの名無しさん mailto:sage [2016/12/04(日) 22:46:30.10 ID:Y3EeqqZE.net]
- 真面目に>>442の方がよさそう
- 449 名前:デフォルトの名無しさん mailto:sage [2016/12/04(日) 22:57:59.58 ID:iVFW+LnC.net]
- >>442
おまえ[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2]も [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2]って 書くの?
- 450 名前:デフォルトの名無しさん [2016/12/04(日) 23:08:23.19 ID:yVPKVwxZ.net]
- >>445
自分でそう書いていながら珍しいものでも見るような事言われてもこっちが戸惑うのだが
- 451 名前:デフォルトの名無しさん mailto:sage [2016/12/04(日) 23:16:25.53 ID:PqdPBV8Z.net]
- 前提条件として数列がどのくらいの規模になるか明かさなかった441が完全に悪い
お前のママじゃねえんだよカス 次は気をつけるか今すぐ死ねよ
- 452 名前:デフォルトの名無しさん mailto:sage [2016/12/04(日) 23:30:50.69 ID:iVFW+LnC.net]
- >>447
おまえ超初心者相手になんだその物言い 顧客相手に要件定義が足りなかったらそう言うのかてめえは わからなきゃ質問しろって何度言えばわかるだ?
- 453 名前:デフォルトの名無しさん mailto:sage [2016/12/04(日) 23:54:07.87 ID:3HADjSyZ.net]
- どこの田舎から来たんだよ?
- 454 名前:デフォルトの名無しさん mailto:sage [2016/12/05(月) 00:05:04.73 ID:x3Qm2Sdl.net]
- 単に察する能力が乏しいだけでは
- 455 名前:デフォルトの名無しさん mailto:sage [2016/12/05(月) 06:20:09.49 ID:R/lrPaR1.net]
- >>441 の疑問点は結局何なの。
- 456 名前:デフォルトの名無しさん mailto:sage [2016/12/05(月) 07:15:42.38 ID:8RyC80/c.net]
- >441
ほとんどの要素が0で、そうでないのが少しあるリストの場合、(たとえば、動的計画法(DP)で、dpテーブルを初期化するときとか) a=[0]*1000 a[0]=1 a[-1]=2 のように、ゼロだけのリストを作ってから、非ゼロ要素を個別に設定する方法もあるよ。 さらに、要素数が100万超えていて、非ゼロが1000程度とかなら、辞書を使うかな。 collections.defaultdict(int) とかなら、初回使用時の値がゼロとして扱える。 numpyとか使えば、疎行列のライブラリもあると思う。
- 457 名前:デフォルトの名無しさん mailto:sage [2016/12/05(月) 07:26:16.87 ID:RfiNzCiI.net]
- [1, *itertools.repeat(0, 10), 2]
- 458 名前:デフォルトの名無しさん mailto:sage [2016/12/05(月) 11:02:39.39 ID:YwBftIqj.net]
- [1,1]の書き方と[1]+[1]の書き方は>>441で既に周知で他に書き方を聞いてるのに
そこで>>
- 459 名前:442
を書く人が職場にいたら無視してる []- [ここ壊れてます]
- 460 名前:デフォルトの名無しさん mailto:sage [2016/12/05(月) 11:10:16.32 ID:Y+KsRKI6.net]
- >>454
それが普通
- 461 名前:デフォルトの名無しさん mailto:sage [2016/12/05(月) 11:38:20.02 ID:bmyGiWQE.net]
- [1, *[0] * 10 ,2]
- 462 名前:デフォルトの名無しさん [2016/12/05(月) 12:27:54.10 ID:+FWd7nuq.net]
- >>454
俺ははこういうルビイストみたいな厨二質問する人が職場にいたらクビにしてる
- 463 名前:デフォルトの名無しさん [2016/12/05(月) 15:31:08.70 ID:dF177W8B.net]
- >>441
[0 if 0<_<4 else 2 if _==4 else 1 for _ in range(5)]
- 464 名前:デフォルトの名無しさん [2016/12/05(月) 16:56:54.49 ID:aWpWVW8r.net]
- すまんがこれ実行できる人いる?
プログラムのプの字もわからないからこのコードがいまだに使えるのかどうかもわからない https://gist.github.com/staybuzz/ca935bc22350019d9911
- 465 名前:デフォルトの名無しさん mailto:sage [2016/12/05(月) 17:37:02.69 ID:Ifet5byM.net]
- じゃあプログラミングを学べよ
4ねクズ
- 466 名前:デフォルトの名無しさん mailto:sage [2016/12/05(月) 23:01:39.11 ID:pSDwKct5.net]
- テレビ東京のサイトから、動画をDLしたいのか?
仕様がきっちりしているなら、Ruby, Anemone とかで作れる。 プログラム言語でなくても、Wget だけで、DLできるかも >>459 Rubyによるクローラー開発技法 巡回・解析機能の実装と21の運用例、 佐々木拓郎・るびきち、2014
- 467 名前:デフォルトの名無しさん mailto:sage [2016/12/06(火) 00:03:18.83 ID:BJ+E4eRR.net]
- >>461
あなたキモ過ぎます
- 468 名前:デフォルトの名無しさん mailto:sage [2016/12/06(火) 08:37:37.75 ID:HUIDfPBe.net]
-
- 469 名前:WindowsでもiPhoneでもAndroidでも動くWEBスクレイピングPythonスクリプト書こうと思ったら
Pure Pythonなライブラリしか使えなくてrequests+BeautifulSoupでゴリゴリ書くの? [] - [ここ壊れてます]
- 470 名前:デフォルトの名無しさん [2016/12/06(火) 10:06:33.43 ID:BZKWUFE6.net]
- curl
- 471 名前:デフォルトの名無しさん mailto:sage [2016/12/06(火) 12:41:26.78 ID:AKBojLeG.net]
- スマホやタブレットでやろうとか言う考えが既に十分愚かだから
愚直にやれよ文字通り
- 472 名前:デフォルトの名無しさん mailto:sage [2016/12/06(火) 17:01:36.53 ID:M7LAmMkO.net]
- >>463
iphoneやandroidの実行環境が何なのかわからんけど、概ねその通り ライブラリは好きなの使えばいいんでない?
- 473 名前:デフォルトの名無しさん mailto:sage [2016/12/06(火) 18:37:11.21 ID:O55+7qyI.net]
- thx愚直にやる
- 474 名前:デフォルトの名無しさん [2016/12/06(火) 20:53:55.88 ID:itdtPWK3.net]
- classについて質問です。
classは自分でオブジェクト+メソッド群の形を作ることができる認識であってますか? class Test: def __init__(self): self.h = "hello" self.w = "world" def hello(s): print(s.h) print(s.w) s = Test() s.hello() こんな感じの構造を作れますよね。 Cで言えば構造体みたいな感じなのでしょうか…
- 475 名前:デフォルトの名無しさん [2016/12/06(火) 20:54:32.95 ID:itdtPWK3.net]
- >>468
インデントがおかしくなっちゃいました。許しください
- 476 名前:デフォルトの名無しさん mailto:sage [2016/12/06(火) 21:33:05.13 ID:r0hSL9Mg.net]
- Pythonのインデントは絶対です
許しません
- 477 名前:デフォルトの名無しさん mailto:sage [2016/12/06(火) 21:42:44.59 ID:uUd6ba73.net]
- クラスのメソッドの第一引数は、self にするのが慣例。
- 478 名前:デフォルトの名無しさん mailto:sage [2016/12/07(水) 01:40:23.76 ID:05n7PnOC.net]
- 75分5秒や140分05秒を表した下記文字列を秒に変換するにはどうしたら良いでしょうか?
a = "75:05" b = "140:05" 下記で変換しようとしましたが、60分を超える時間だとエラーになりました。。 datetime.datetime.strptime("1970-1-1 9:" + a, '%Y-%m-%d %H:%M:%S').timestamp()
- 479 名前:472 mailto:sage [2016/12/07(水) 01:44:06.51 ID:05n7PnOC.net]
- コロンでsplitして分を60掛ければ無理やり変換できますが、もうちょっとスマートな方法がないかな?と思いました。
- 480 名前:デフォルトの名無しさん mailto:sage [2016/12/07(水) 01:59:57.97 ID:05n7PnOC.net]
- あ、 >>472 も全然スマートじゃないですが笑
- 481 名前:デフォルトの名無しさん mailto:sage [2016/12/07(水) 02:23:56.57 ID:kP34iK8E.net]
- 時刻でなく、時間を扱うのなら、timedeltaの方が適していると思う。
けど、splitして60倍して足す方が単純でいいような気がする。
- 482 名前:デフォルトの名無しさん [2016/12/07(水) 08:27:24.50 ID:0fGzq9xA.net]
- pip するとVisualstudioがどうたらで成功しないんだが
vs2015入れるといけないんか?
- 483 名前:デフォルトの名無しさん mailto:sage [2016/12/07(水) 09:24:37.38 ID:SFFNbj+E.net]
- どうたらじゃなくてエラーメッセージを貼れ
- 484 名前:デフォルトの名無しさん mailto:sage [2016/12/07(水) 10:59:43.60 ID:XaIc6vSb.net]
- 【初心者の皆さんにお願い】
トラブルが起きたらOSとPythonのバージョンとエラーを貼りましょう。 何が必要な情報で何が不要な情報かを判断するのは回答者です。 ご自身で情報を仕分けせずにありのままに情報を提供してください。
- 485 名前:デフォルトの名無しさん mailto:sage [2016/12/07(水) 11:00:15.79 ID:XaIc6vSb.net]
- 追記
ライブラリのトラブルはライブラリのバージョンも貼りましょう。
- 486 名前:デフォルトの名無しさん [2016/12/07(水) 12:33:25.79 ID:mSlj6y9t.net]
- >>468
CでPyObject使うと良く理解出来る
- 487 名前:一時的なコテハン ◆DZvVA9hOe. mailto:sage [2016/12/07(水) 18:24:09.21 ID:u5hrxlot.net]
- Pythonのtextwrap.wrap()が日本語で崩れる問題
www.freia.jp/taka/blog/python-textwrap-with-japanese/index.html 上記の使用方法が分かりません やったことは --- # -*- coding: utf-8 -*- import sys import textwrap import unicodedata from itertools import groupby #copy from docutils east_asian_widths = {'W': 2, # Wide --- 以下を呼び出し元の test.py ファイルと同じディレクトリに TextWrapper.py として保存し test.py を以下のような感じでやってみましたが何も良くわかっていません どのようにすればよいのでしょうか? ideone.com/FI8n7o 日本語を指定の文字数で改行できれば別の方法でも構わないです 環境は Windows7 Python 2.7.12 Pycharm Community Edition 2016.3 です
- 488 名前:デフォルトの名無しさん mailto:sage [2016/12/07(水) 19:22:21.00 ID:GdRWJ2Ia.net]
- ほんとうに文字数だけでいいなら1文字ずつ
unicodedata.east_asian_width() で文字幅(返り値はヒントなので何文字分とするかはじぶんで決める)を足してって 指定の文字数を超えそうになったら改行する。 www.nltk.org/book-jp/ch12.html カッコイイのはココとかを参考にわかち書きしてから 単語か文節単位で文字幅を判定してく。
- 489 名前:一時的なコテハン ◆DZvVA9hOe. mailto:sage [2016/12/07(水) 20:22:31.30 ID:u5hrxlot.net]
- >>482
ありがとうございます とりあえず日本語を指定の文字数で改行できました ideone.com/Zjq4fc 助かりました 今回はこれで全然OKなんですが後学のためにも > Pythonのtextwrap.wrap()が日本語で崩れる問題 > www.freia.jp/taka/blog/python-textwrap-with-japanese/index.html の利用方法をどなたかご教示いただければ幸いです
- 490 名前:デフォルトの名無しさん mailto:sage [2016/12/07(水) 20:27:34.62 ID:dU/UItOg.net]
- >>482
素晴らしいですねこういう質問の仕方が良いです 初心者の鏡です
- 491 名前:472 mailto:sage [2016/12/07(水) 23:25:58.77 ID:7VkkQFGv.net]
- >>475
splitがシンプルなんですね。 そちらで対応したいと思います。ありがとうございました。
- 492 名前:デフォルトの名無しさん [2016/12/08(木) 19:36:51.45 ID:Tsl7hmvI.net]
- ド級の素人です。
同じ構造の数十ものURL(末尾に足し算で増えていく数字があるとかの規則性は一切なし)から一度に特定部分の数字をスクレイピングするのにはどうすればいいでしょうか。 調べ方が悪いのかこういうピンポイントなやり方が出てこなくて困り果ててます。
- 493 名前:デフォルトの名無しさん mailto:sage [2016/12/08(木) 19:57:39.18 ID:N9SPSSYh.net]
- >>486
スクレイピングとあるけどURL自体の取得はできてるん? URLを文字列として取得できているなら特定部分の抽出は reモジュールのsearch()かその仲間でできるけども どこで困ってるかよくわからん 複数のURLをどう保持して処理するのかともとれるし
- 494 名前:デフォルトの名無しさん mailto:sage [2016/12/08(木) 19:58:45.83 ID:pECHVU6F.net]
- >486
例を示してほしい。 サンプルの入力と、期待する出力のペアで。
- 495 名前:デフォルトの名無しさん mailto:sage [2016/12/08(木) 20:04:18.31 ID:Tsl7hmvI.net]
- >>487
>>488 URLはシコシコ取得しようと思っています。 例ですが、大元となるのがこのURLで www.oddsportal.com/tennis/australia/atp-australian-open/results/ そこに www.oddsportal.com/tennis/australia/atp-australian-open/djokovic-novak-murray-andy-4Ip7iVkT/ や www.oddsportal.com/tennis/australia/atp-australian-open/raonic-milos-murray-andy-0fidkqET/ といった感じに枝分かれ的に数十のURLがある感じです。 枝分かれ先の特定部分の数字をスクレイピングしたいという目的なんですが、数十回コードを繰り返し動かすやり方しか想像できなくて 他にもっとスマートなやり方はないものかと思ってました。
- 496 名前:デフォルトの名無しさん [2016/12/08(木) 20:10:42.29 ID:+5m1wjwL.net]
- 数十のurlがあったら数十回コードを繰り返せばいいじゃないか
- 497 名前:
それこそスマートというものだ 無駄にスマートなやり方を追い求める姿勢は非常にヤボったい [] - [ここ壊れてます]
- 498 名前:デフォルトの名無しさん mailto:sage [2016/12/08(木) 20:24:31.34 ID:Tsl7hmvI.net]
- >>490
VBAでいうところのfor〜next的なやり方ができればなあと思いまして。 大量のURLを貼り付けてからコードを実行させたら自動的に順番にスクレイピングしていってくれるようなイメージの。
- 499 名前:デフォルトの名無しさん mailto:sage [2016/12/08(木) 20:50:31.99 ID:pECHVU6F.net]
- >489
その例だと、特定部分の数字って、どれのことなの? 理解が遅くて済まない。。
- 500 名前:デフォルトの名無しさん [2016/12/08(木) 21:01:18.37 ID:Tsl7hmvI.net]
- >>492
いえいえ、言うべきでした。averageという列にある三つの数字です。 小数点以下2位までの数字二つと%表記の数字一つの合計三つです。
- 501 名前:デフォルトの名無しさん mailto:sage [2016/12/08(木) 21:42:36.71 ID:7lL759m8.net]
- pythonのスクレイピングではlxmlやPyQueryの例を検索してみては
averageはこの部分ですね。 <tr class="aver"><td class="name"><strong>Average</strong></td> <td class="right">1.33</td><td class="right">3.39</td> <td class=" center no-border-right-average">95.5%</td><td class="check"></td></tr>
- 502 名前:デフォルトの名無しさん mailto:sage [2016/12/08(木) 21:46:07.19 ID:pECHVU6F.net]
- >493
ようやく特定の場所の数字が何か理解できました。 urlをしこしこ取得するというのがまだ分からないのですが、 手作業かブログラムかで取得したurlを1行1urlに書き出したファイルがあるとすれば、 そのファイルから1行読み込んでurlを取得し、スクレイピングする関数(urlの内容を読み込んで、正規表現でマッチングして、みたいなことをする)にそのurlを渡して、3つの数値を得て、これをリストに追加していく、という処理をすれば良いのだと思います。 すでにある回答とほとんど同じですんません。
- 503 名前:デフォルトの名無しさん mailto:sage [2016/12/08(木) 23:25:57.79 ID:SEkB2Ywy.net]
- oddsportal github
でぐぐればハッピー
- 504 名前:デフォルトの名無しさん mailto:sage [2016/12/08(木) 23:26:59.54 ID:Ayid3Uvv.net]
- 〜/results/ の、HTMLの中には、
〜/djokovic-novak-murray-andy-4Ip7iVkT/ 〜/raonic-milos-murray-andy-0fidkqET/ などは、出てこない それらを、jsonp で取得しているから、ブラウザ操作が必要。 Capybara なら、Capybara-webkit, Poltergeist(PhantomJS), Selenium あたり Rubyによるクローラー開発技法 巡回・解析機能の実装と21の運用例、 佐々木拓郎・るびきち、2014 君は初心者かい? ajax とか使っているのを、初心者がページを分析して、クロールするのは無理
- 505 名前:デフォルトの名無しさん [2016/12/09(金) 00:17:54.45 ID:4iZItf6M.net]
- >>497
るびきち?
- 506 名前:デフォルトの名無しさん mailto:sage [2016/12/09(金) 02:35:59.93 ID:nOVhwAKx.net]
- 下記で、最初のカギ括弧内のスラッシュの位置が違うだけで正規表現がマッチしたりしなかったりするのですが、なぜでしょうか?
スラッシュは特殊文字でもないと思うのですが。。 >>> a="2016-10-12" >>> re.search(r"16(?:[ \.-/][0-3]|[0-3])[0-9]", a) →@マッチしない >>> re.search(r"16(?:[/ \.-][0-3]|[0-3])[0-9]", a) →Aマッチする <_sre.SRE_Match object; span=(2, 7), match='16-10'> また、下記のような日付にマッチする正規表現を書きたいのですが、どのように書けばよいでしょうか? "160912" "16-09-12" "16-9-12" "16.09.12" "16.9.1" "16/09/12" "16/10/6" "16 09 12"
- 507 名前:499 mailto:sage [2016/12/09(金) 02:39:16.21 ID:nOVhwAKx.net]
- あと、
"2016ほにゃらら20160912" の "20160912" にもマッチさせたいです。
- 508 名前:デフォルトの名無しさん mailto:sage [2016/12/09(金) 04:21:53.69 ID:8sRVu5b5.net]
- >>491
> VBAでいうところのfor〜next的なやり方ができればなあと思いまして。 for文を書くと良いんじゃないの。 というか、他言語で書けるならそれを貼れば話が早いような。
- 509 名前:デフォルトの名無しさん mailto:sage [2016/12/09(金) 09:54:13.77 ID:f5GT3H9
]
- [ここ壊れてます]
- 510 名前:L.net mailto: >>499
一応無理矢理拾えるが、完全では無いと思う。桁数が揃ってないのは難しいんじゃないかな。 >>500のパターンが無ければ一つのパターンでいけるが、それも完璧とは言えないと思う。 [12][09]\d{2}[01]?[1-9][01]?[1-9]|\d{2}[01]\d[01]\d|\d{2}[ \-\./][01]?\d[ \-\./][01]?\d カギ括弧内のスラッシュ云々に関しては、 スラッシュの問題ではなくハイフンをエスケープしてないからだろ。 [] - [ここ壊れてます]
- 511 名前:デフォルトの名無しさん mailto:sage [2016/12/09(金) 09:55:29.50 ID:f5GT3H9L.net]
- 違った。こっちに修正。
[12][09]\d{2}[01]?\d[01]?\d|\d{2}[01]\d[01]\d|\d{2}[ \-\./][01]?\d[ \-\./][01]?\d
- 512 名前:デフォルトの名無しさん mailto:sage [2016/12/09(金) 10:12:25.70 ID:f5GT3H9L.net]
- まだおかしかったわ。
[12][09]\d{2}[01]?\d[0-3]?\d|\d{2}[01]\d[0-3]\d|\d{2}[ \-\./][01]?\d[ \-\./][0-3]?\d
- 513 名前:デフォルトの名無しさん mailto:sage [2016/12/09(金) 11:36:17.31 ID:vb1+ZGNO.net]
- r'(?x) (?:20)?\d\d ( (?: [\-\./ ] \d{1,2} ){2} | \d{4} )'
re.Xフラグで空白いれられるよ
|

|