URLをコマンドライン引数で(wikipedia) docker(90) プログラムちょい替え(2) Python3(38)

Wikipediaは、プログラムのデータとして使うにはよい。
自分がWikipediaに書いてないのに、データを使うと、

短歌の自動生成プログラムとデータの収集。日本語（７）
https://qiita.com/kaizen_nagoya/items/d3198402d8b8b4ac8cd2

必然を偶然と言い張るような、おかしなデータの使い方を

Wikipediaに書く文章で気をつけていること。
https://qiita.com/kaizen_nagoya/items/25e78e48e406f803bb55

Wikipediaに追記する際に、知っているとよい記法　７つ
https://qiita.com/kaizen_nagoya/items/7b081d53c214307af75f

Wikipedia : 文章書き方 学生編 日本語(24)
https://qiita.com/kaizen_nagoya/items/e411d2704efde863e82e

URLをコマンドライン引数で(wikipedia) docker(90) プログラムちょい替え(2) 
https://qiita.com/kaizen_nagoya/items/fc095b0c580a35001ea7

「wikipediaからのページからリンク一覧を取得する方法」を動かしてみた
https://qiita.com/kaizen_nagoya/items/ef4a8d21ec98851d10a0

# 実験
wikipediaからのページからリンク一覧を取得する方法
https://qiita.com/tadaken3/items/e09ba2ede988bbacb303

のプログラムに手を入れて、引数渡しにしてみた。
 
 <この項は書きかけです。順次追記します。>

```python:wia.py
#! /usr/bin/env python
#codeing:utf-8
# https://qiita.com/tadaken3/items/e09ba2ede988bbacb303
# https://qiita.com/kaizen_nagoya/items/fc095b0c580a35001ea7

import sys
import re
from bs4 import BeautifulSoup
from urllib.request import urlopen
from urllib.parse import unquote

args = sys.argv

url = "https://ja.wikipedia.org/" + args[1]

html = urlopen(url)
bsObj = BeautifulSoup(html,'html.parser')

pattern = re.compile("^(/wiki/)((?!:).)*$")

for link in bsObj.find('div',{'id':'bodyContent'}).findAll('a',href = pattern):
        if 'href' in link.attrs:
                    print (unquote(link.attrs['href']))  
```
HAZOPを引数で実行ー＞エラー

```
# ./wia.py HAZOP
Traceback (most recent call last):
  File "./wia.py", line 14, in <module>
    html = urlopen(url)
  File "/opt/conda/lib/python3.7/urllib/request.py", line 222, in urlopen
    return opener.open(url, data, timeout)
  File "/opt/conda/lib/python3.7/urllib/request.py", line 531, in open
    response = meth(req, response)
  File "/opt/conda/lib/python3.7/urllib/request.py", line 641, in http_response
    'http', request, response, code, msg, hdrs)
  File "/opt/conda/lib/python3.7/urllib/request.py", line 569, in error
    return self._call_chain(*args)
  File "/opt/conda/lib/python3.7/urllib/request.py", line 503, in _call_chain
    result = func(*args)
  File "/opt/conda/lib/python3.7/urllib/request.py", line 649, in http_error_default
    raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 404: Not Found
```
統計を引数で実行ー＞エラー

```
/# ./wia.py 統計
Traceback (most recent call last):
  File "./wia.py", line 14, in <module>
    html = urlopen(url)
  File "/opt/conda/lib/python3.7/urllib/request.py", line 222, in urlopen
    return opener.open(url, data, timeout)
  File "/opt/conda/lib/python3.7/urllib/request.py", line 525, in open
    response = self._open(req, data)
  File "/opt/conda/lib/python3.7/urllib/request.py", line 543, in _open
    '_open', req)
  File "/opt/conda/lib/python3.7/urllib/request.py", line 503, in _call_chain
    result = func(*args)
  File "/opt/conda/lib/python3.7/urllib/request.py", line 1360, in https_open
    context=self._context, check_hostname=self._check_hostname)
  File "/opt/conda/lib/python3.7/urllib/request.py", line 1317, in do_open
    encode_chunked=req.has_header('Transfer-encoding'))
  File "/opt/conda/lib/python3.7/http/client.py", line 1229, in request
    self._send_request(method, url, body, headers, encode_chunked)
  File "/opt/conda/lib/python3.7/http/client.py", line 1240, in _send_request
    self.putrequest(method, url, **skips)
  File "/opt/conda/lib/python3.7/http/client.py", line 1107, in putrequest
    self._output(request.encode('ascii'))
UnicodeEncodeError: 'ascii' codec can't encode characters in position 5-6: ordinal not in range(128)
```

文字によってエラーが違う。

```python:wia2.py
#! /usr/bin/env python
#codeing:utf-8
# https://qiita.com/tadaken3/items/e09ba2ede988bbacb303
# https://qiita.com/kaizen_nagoya/items/fc095b0c580a35001ea7

import sys
import re
from bs4 import BeautifulSoup
from urllib.request import urlopen
from urllib.parse import unquote

args = sys.argv

url = "https://ja.wikipedia.org/" + args[1]

html = urlopen(url)
bsObj = BeautifulSoup(html,'html.parser')

pattern = re.compile("^(/wiki/)((?!:).)*$")

for link in bsObj.find('div',{'id':'bodyContent'}).findAll('a',href = pattern):
        if 'href' in link.attrs:
                    print (unquote(link.attrs['href'])) 
```
文字コード変換を入れてみた。

```python:wib.py
#! /usr/bin/env python
#codeing:utf-8
# https://qiita.com/tadaken3/items/e09ba2ede988bbacb303
# https://qiita.com/kaizen_nagoya/items/fc095b0c580a35001ea7

import sys
import re
from bs4 import BeautifulSoup
from urllib.request import urlopen
import urllib.parse 

args = sys.argv

url = "https://ja.wikipedia.org/" + urllib.parse.quote(args[1])

html = urlopen(url)
bsObj = BeautifulSoup(html,'html.parser')

pattern = re.compile("^(/wiki/)((?!:).)*$")

for link in bsObj.find('div',{'id':'bodyContent'}).findAll('a',href = pattern):
        if 'href' in link.attrs:
                    print (unquote(link.attrs['href']))  
```
実行してみる。ー＞エラー

```
# ./wib.py 統計
Traceback (most recent call last):
  File "./wib.py", line 12, in <module>
    url = "https://ja.wikipedia.org/" + urllib.parse.quote(args[1])
NameError: name 'urllib' is not defined
```
２つのimportに関する行を、一つにまとめられるかと思ったら駄目だった。

```python:wic.py
#! /usr/bin/env python
#codeing:utf-8
# https://qiita.com/tadaken3/items/e09ba2ede988bbacb303
# https://qiita.com/kaizen_nagoya/items/fc095b0c580a35001ea7

import sys
import re
from bs4 import BeautifulSoup
from urllib.request import urlopen
from urllib.parse import unquote
import urllib.parse 

args = sys.argv

url = "https://ja.wikipedia.org/" + urllib.parse.quote(args[1])

html = urlopen(url)
bsObj = BeautifulSoup(html,'html.parser')

pattern = re.compile("^(/wiki/)((?!:).)*$")

for link in bsObj.find('div',{'id':'bodyContent'}).findAll('a',href = pattern):
        if 'href' in link.attrs:
                    print (unquote(link.attrs['href']))  
```
１行追加（前からあったもの）を入れて実行してみる。
まだまだエラー

```
# ./wic.py hazop
Traceback (most recent call last):
  File "./wic.py", line 14, in <module>
    html = urlopen(url)
  File "/opt/conda/lib/python3.7/urllib/request.py", line 222, in urlopen
    return opener.open(url, data, timeout)
  File "/opt/conda/lib/python3.7/urllib/request.py", line 531, in open
    response = meth(req, response)
  File "/opt/conda/lib/python3.7/urllib/request.py", line 641, in http_response
    'http', request, response, code, msg, hdrs)
  File "/opt/conda/lib/python3.7/urllib/request.py", line 569, in error
    return self._call_chain(*args)
  File "/opt/conda/lib/python3.7/urllib/request.py", line 503, in _call_chain
    result = func(*args)
  File "/opt/conda/lib/python3.7/urllib/request.py", line 649, in http_error_default
    raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 404: Not Found
```
だめやん。URLに/wiki/がない。

```python:wid.py
#! /usr/bin/env python
#codeing:utf-8
# https://qiita.com/tadaken3/items/e09ba2ede988bbacb303
# https://qiita.com/kaizen_nagoya/items/fc095b0c580a35001ea7


import sys
import re
from bs4 import BeautifulSoup
from urllib.request import urlopen
from urllib.parse import unquote
import urllib.parse 

args = sys.argv

url = "https://ja.wikipedia.org/wiki/" + urllib.parse.quote(args[1])

html = urlopen(url)
bsObj = BeautifulSoup(html,'html.parser')

pattern = re.compile("^(/wiki/)((?!:).)*$")

for link in bsObj.find('div',{'id':'bodyContent'}).findAll('a',href = pattern):
        if 'href' in link.attrs:
                    print (unquote(link.attrs['href']))  
```
統計を引数ではうまくいった。

```
# ./wib.py 統計
/wiki/ウィキペディア日本語版
/wiki/現象
/wiki/調査
/wiki/数量
/wiki/データ
/wiki/統計量
/wiki/統計学
/wiki/国家
/wiki/兵役
/wiki/人口
/wiki/土地
/wiki/近代国家
/wiki/ナポレオン・ボナパルト
/wiki/フランス
/wiki/オーストリア
/wiki/パーソナルコンピュータ
/wiki/大学
/wiki/企業
/wiki/統計法
/wiki/律令制
/wiki/戸籍
/wiki/検地
/wiki/人別改
/wiki/明治政府
/wiki/1871年
/wiki/太政官
/wiki/正院
/wiki/1885年
/wiki/内閣
/wiki/総務省
/wiki/総理府
/wiki/統計局
/wiki/独立行政法人
/wiki/統計センター
/wiki/統計法
/wiki/個人情報
/wiki/2007年
/wiki/1947年
/wiki/2007年
/wiki/統計法
/wiki/地方公共団体
/wiki/都道府県
/wiki/市町村
/wiki/総務大臣
/wiki/統計法
/wiki/2007年
/wiki/10月
/wiki/国勢調査
/wiki/家計調査
/wiki/個人
/wiki/消費
/wiki/賃金
/wiki/通関
/wiki/貿易統計
/wiki/国民経済計算
/wiki/鉱工業指数
/wiki/統計学
/wiki/企業
/wiki/電通
/wiki/広告
/wiki/第三次産業
/wiki/プライバシー
/wiki/個人情報保護法
/wiki/規制緩和
/wiki/行政指導
/wiki/標準化
/wiki/トレードオフ
/wiki/小泉内閣
/wiki/聖域なき構造改革
/wiki/市場化テスト
/wiki/総務省
/wiki/国勢調査
/wiki/労働力調査
/wiki/家計調査
/wiki/経済センサス
/wiki/財務省_(日本)
/wiki/国税庁
/wiki/文部科学省
/wiki/厚生労働省
/wiki/農林水産省
/wiki/農林業センサス
/wiki/経済産業省
/wiki/国土交通省
/wiki/日本経済団体連合会
/wiki/ウィクショナリー
/wiki/統計学
/wiki/統計主事
/wiki/独立行政法人
```
hazopを引数だと駄目。


```
# ./wib.py hazop
Traceback (most recent call last):
  File "./wib.py", line 15, in <module>
    html = urlopen(url)
  File "/opt/conda/lib/python3.7/urllib/request.py", line 222, in urlopen
    return opener.open(url, data, timeout)
  File "/opt/conda/lib/python3.7/urllib/request.py", line 531, in open
    response = meth(req, response)
  File "/opt/conda/lib/python3.7/urllib/request.py", line 641, in http_response
    'http', request, response, code, msg, hdrs)
  File "/opt/conda/lib/python3.7/urllib/request.py", line 563, in error
    result = self._call_chain(*args)
  File "/opt/conda/lib/python3.7/urllib/request.py", line 503, in _call_chain
    result = func(*args)
  File "/opt/conda/lib/python3.7/urllib/request.py", line 755, in http_error_302
    return self.parent.open(new, timeout=req.timeout)
  File "/opt/conda/lib/python3.7/urllib/request.py", line 531, in open
    response = meth(req, response)
  File "/opt/conda/lib/python3.7/urllib/request.py", line 641, in http_response
    'http', request, response, code, msg, hdrs)
  File "/opt/conda/lib/python3.7/urllib/request.py", line 569, in error
    return self._call_chain(*args)
  File "/opt/conda/lib/python3.7/urllib/request.py", line 503, in _call_chain
    result = func(*args)
  File "/opt/conda/lib/python3.7/urllib/request.py", line 649, in http_error_default
    raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 404: Not Found
```
大文字にすると動く。

```
# ./wib.py HAZOP
/wiki/FMEA
/wiki/フォルトツリー解析
/wiki/FMEA
/wiki/日本学術会議
/wiki/安全工学シンポジウム
/wiki/TRIZ
/wiki/小川清
/wiki/日本技術士会
/wiki/ISSN
/wiki/デジタルオブジェクト識別子
/wiki/Portable_Document_Format
```
大文字に変換してみる。

```
#! /usr/bin/env python
#codeing:utf-8

import sys
import re
from bs4 import BeautifulSoup
from urllib.request import urlopen
from urllib.parse import unquote
import urllib.parse 

args = sys.argv

url = "https://ja.wikipedia.org/wiki/" + urllib.parse.quote(args[1].upper())

html = urlopen(url)
bsObj = BeautifulSoup(html,'html.parser')

pattern = re.compile("^(/wiki/)((?!:).)*$")

for link in bsObj.find('div',{'id':'bodyContent'}).findAll('a',href = pattern):
        if 'href' in link.attrs:
                    print (unquote(link.attrs['href']))  
```
やっつけ感満載。


```
# ./wic.py fmea
/wiki/英語
/wiki/故障
/wiki/不具合
/wiki/設計
/wiki/フォルトツリー解析
/wiki/トップダウン手法
/wiki/ボトムアップ手法
/wiki/フォルトツリー解析
/wiki/HAZOP
/wiki/国際電気標準会議
/wiki/故障モード
/wiki/英語
/wiki/FMEA#工程FMEA
/wiki/HACCP
/wiki/フォード・モーター
/wiki/フォード・ピント#欠陥
/wiki/グラマン
/wiki/先行製品品質計画
/wiki/トヨタ自動車
/wiki/HAZOP
/wiki/製品
/wiki/ヒューマンエラー
/wiki/安全
/wiki/リスクアセスメント
/wiki/リスク分析
/wiki/信頼性工学
/wiki/信頼性設計
/wiki/工学
/wiki/技術
```

でも動いた。

# windows/anaconda3

```
>wic.py hazop
```
なんの出力も、エラーもない。
ファイルのプロパティを開いて、anacondaフォルダを探し、
ユーザの下にAnaconda3というフォルダのpythonファイルを関連付け

![wi_py.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/51423/b33953ab-1cec-6c7f-3089-95c4783b0819.png)


```
>python wic.py hazop
/wiki/FMEA
/wiki/フォルトツリー解析
/wiki/FMEA
/wiki/日本学術会議
/wiki/安全工学シンポジウム
/wiki/TRIZ
/wiki/小川清
/wiki/日本技術士会
/wiki/ISSN
/wiki/デジタルオブジェクト識別子
/wiki/Portable_Document_Format

>wic.py hazop
Traceback (most recent call last):
  File "C:\Users\kaize\Downloads\wic.py", line 15, in <module>
    url = "https://ja.wikipedia.org/wiki/" + urllib.parse.quote(args[1].upper())
IndexError: list index out of range
```
pythonで起動すれば動く、pythonつけないとエラーになるやん。

WindowsでanacondaのPythonに引数が渡せない？
https://ja.stackoverflow.com/questions/40319/windowsでanacondaのpythonに引数が渡せない

レジストリファイルは、今なおしたくない。Windowsではpythonをつけて動かすことに。


# docker

```shell-session
$ docker run -v /tmp/docker:/tmp/docker -it kaizenjapan/python23wi /bin/bash
```
-v /tmp/docker:/tmep/dockerは、dockerを起動するシステムに/tmp/dockerというフォルダが利用可能な場合に記載。フォルダ名は、利用できるもので、docker側が空のものであればよい。


docker(89) dockerでpython2, python3
https://qiita.com/kaizen_nagoya/items/ecbe11a4d743357134d5

今日のpython error: ModuleNotFoundError: No module named 'bs4'
https://qiita.com/kaizen_nagoya/items/f0056e5fc735b3ad5783

今日のpython error: UnicodeEncodeError: 'utf-8' codec can't encode characters
https://qiita.com/kaizen_nagoya/items/ac48ba7946b303bb25fb


# 参考資料(reference)

Pythonプログラムの先頭行の #! シバン（Shebang）について
https://gammasoft.jp/python/python-shebang/

「wikipediaからのページからリンク一覧を取得する方法」を動かしてみた
https://qiita.com/kaizen_nagoya/items/ef4a8d21ec98851d10a0

Python: コマンドライン引数とは？（超基礎）
https://qiita.com/orange_u/items/3f0fb6044fd5ee2c3a37


PythonでURLのクエリ文字列（パラメータ）を取得・作成・変更
https://note.nkmk.me/python-urllib-parse-query-string/

URLに引数を渡したい
https://teratail.com/questions/109883

【初心者向け】PythonでURLを指定して画像をダウンロードする
https://qiita.com/ozaki_physics/items/c17ca626b480d352e90f


コマンドライン引数の取得
http://books-nekoya.jp/Programming/Python/python_command_line_prm.html

pythonでget引数にjavascriptでencodeURIComponent()したurlを渡したらcgi.FieldStrage()がおかしくなる
https://ja.stackoverflow.com/questions/11954/


PythonでURLエンコード・デコード
https://note.nkmk.me/python-urllib-parse-quote-unquote/

PythonのURLとクエリパラメータのパースまとめ
https://qiita.com/yagays/items/e59731b3930252b5f0c4

【保存版】Pythonの文字変換（半角,全角,小文字,大文字）
https://qiita.com/shakechi/items/d12641d6cad01479785f

一覧

物理記事　上位100
https://qiita.com/kaizen_nagoya/items/66e90fe31fbe3facc6ff

量子(0) 計算機, 量子力学 https://qiita.com/kaizen_nagoya/items/1cd954cb0eed92879fd4

数学関連記事１００
https://qiita.com/kaizen_nagoya/items/d8dadb49a6397e854c6d

言語・文学記事　１００
https://qiita.com/kaizen_nagoya/items/42d58d5ef7fb53c407d6

医工連携関連記事一覧
https://qiita.com/kaizen_nagoya/items/6ab51c12ba51bc260a82

自動車　記事　１００
https://qiita.com/kaizen_nagoya/items/f7f0b9ab36569ad409c5

通信記事１００
https://qiita.com/kaizen_nagoya/items/1d67de5e1cd207b05ef7

日本語（０）一欄
https://qiita.com/kaizen_nagoya/items/7498dcfa3a9ba7fd1e68

英語(0) 一覧
https://qiita.com/kaizen_nagoya/items/680e3f5cbf9430486c7d

転職(0)一覧
https://qiita.com/kaizen_nagoya/items/f77520d378d33451d6fe

仮説（0）一覧
https://qiita.com/kaizen_nagoya/items/f000506fe1837b3590df

Qiita(0)Qiita関連記事一覧（自分）
https://qiita.com/kaizen_nagoya/items/58db5fbf036b28e9dfa6

鉄道（０）鉄道のシステム考察はてっちゃんがてつだってくれる
https://qiita.com/kaizen_nagoya/items/26bda595f341a27901a0

安全（0）安全工学シンポジウムに向けて: 21
https://qiita.com/kaizen_nagoya/items/c5d78f3def8195cb2409

一覧の一覧( The directory of directories of mine.) Qiita(100)
https://qiita.com/kaizen_nagoya/items/7eb0e006543886138f39

Ethernet 記事一覧　Ethernet(0)
https://qiita.com/kaizen_nagoya/items/88d35e99f74aefc98794

Wireshark 一覧 wireshark(0)、Ethernet(48)
https://qiita.com/kaizen_nagoya/items/fbed841f61875c4731d0

線網（Wi-Fi）空中線(antenna)(0) 記事一覧
https://qiita.com/kaizen_nagoya/items/5e5464ac2b24bd4cd001

OSEK OS設計の基礎　OSEK(100)
https://qiita.com/kaizen_nagoya/items/7528a22a14242d2d58a3

Error一覧 error(0)
https://qiita.com/kaizen_nagoya/items/48b6cbc8d68eae2c42b8

プログラマによる、プログラマのための、統計(0)と確率のプログラミングとその後
https://qiita.com/kaizen_nagoya/items/6e9897eb641268766909

官公庁・学校・公的団体（NPOを含む）システムの課題、官（０）
https://qiita.com/kaizen_nagoya/items/04ee6eaf7ec13d3af4c3

「はじめての」シリーズ　 ベクタージャパン　
https://qiita.com/kaizen_nagoya/items/2e41634f6e21a3cf74eb

AUTOSAR(0)Qiita記事一覧, OSEK(75)
https://qiita.com/kaizen_nagoya/items/89c07961b59a8754c869

プログラマが知っていると良い「公序良俗」
https://qiita.com/kaizen_nagoya/items/9fe7c0dfac2fbd77a945

LaTeX(0) 一覧　
https://qiita.com/kaizen_nagoya/items/e3f7dafacab58c499792

自動制御、制御工学一覧（０）
https://qiita.com/kaizen_nagoya/items/7767a4e19a6ae1479e6b

Rust(0) 一覧　
https://qiita.com/kaizen_nagoya/items/5e8bb080ba6ca0281927

小川清最終講義、最終講義（再）計画, Ethernet(100) 英語(100) 安全(100)
https://qiita.com/kaizen_nagoya/items/e2df642e3951e35e6a53
 
 ＜この記事は個人の過去の経験に基づく個人の感想です。現在所属する組織、業務とは関係がありません。＞
### 文書履歴(document history)
ver. 0.01 初稿 20190501 夕
ver. 0.02 動作版 20190501 夜
ver. 0.03 windows/anaconda3追記 20190501真夜中
ver. 0.04 詳細部分追記 20190502
ver. 0.05 項目入れ替え 20190514 午後
ver. 0.06 引数追記 20190514 夜
ver. 0.07 docker追記 20191230
ver. 0.08 error追記 20191231 朝
ver. 0.09 docker run 20191231 午前
### 最後までおよみいただきありがとうございました。
いいね　💚、フォローをお願いします。
#### Thank you very much for reading to the last sentence.
Please press the like icon 💚　and follow me for your happy life.

<a href="http://b.hatena.ne.jp/entry/s/qiita.com/kaizen_nagoya/items/fc095b0c580a35001ea7" class="hatena-bookmark-button" data-hatena-bookmark-layout="basic-label-counter" data-hatena-bookmark-lang="ja" title="このエントリーをはてなブックマークに追加"><img src="https://b.st-hatena.com/images/v4/public/entry-button/button-only@2x.png" alt="このエントリーをはてなブックマークに追加" width="20" height="20" style="border: none;" /></a><script type="text/javascript" src="https://b.st-hatena.com/js/bookmark_button.js" charset="utf-8" async="async"></script>
http://b.hatena.ne.jp/guide/bbutton