実験
wikipediaからのページからリンク一覧を取得する方法
https://qiita.com/tadaken3/items/e09ba2ede988bbacb303
のプログラムに手を入れて、引数渡しにしてみた。
<この項は書きかけです。順次追記します。>
#! /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)
文字によってエラーが違う。
#! /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']))
文字コード変換を入れてみた。
#! /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
2つのimportに関する行を、一つにまとめられるかと思ったら駄目だった。
#! /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']))
1行追加(前からあったもの)を入れて実行してみる。
まだまだエラー
# ./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/がない。
#! /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ファイルを関連付け
>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
$ 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
数学関連記事100
https://qiita.com/kaizen_nagoya/items/d8dadb49a6397e854c6d
言語・文学記事 100
https://qiita.com/kaizen_nagoya/items/42d58d5ef7fb53c407d6
医工連携関連記事一覧
https://qiita.com/kaizen_nagoya/items/6ab51c12ba51bc260a82
自動車 記事 100
https://qiita.com/kaizen_nagoya/items/f7f0b9ab36569ad409c5
通信記事100
https://qiita.com/kaizen_nagoya/items/1d67de5e1cd207b05ef7
日本語(0)一欄
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
鉄道(0)鉄道のシステム考察はてっちゃんがてつだってくれる
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を含む)システムの課題、官(0)
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
自動制御、制御工学一覧(0)
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.