コマンドラインから実行してるけど普通にjupyter notebook入れた方が早いと思いました。まる。
0-1
・スクレイピング:Webサイトの情報を抽出すること。HTML形式で作られているWebの情報を抽出するための工夫や、広告などの不要な情報を除くためのサイトの構造解析、それに、ログイン必要なサイトの情報を抽出するための工夫などが必要。
・クローリング:プログラムがWebサイトを巡回して、情報をダウンロードすること。
機械学習ではデータを収集、抽出することが大事。その上で、これらの技術が必要。
1-1
PythonでWebサイトのデータを取得するために「urllib」を使う(urllibライブラリと書いてあったけどlibがライブラリじゃね?)
・ウェブサイトからファイルをダウンロードする方法×2
[手法1] urllib.requestモジュールの中のurlretrieve()を使う。urlretrieve(第一引数, 第二引数)の第一引数は取得したいファイルのurlを、第二引数はセーブ先ファイルの名前をつけてあげる。
import urllib.request as req #いちいちurllib.requestとか書いてるのは面倒なのでreqにする url = '(ここにファイルのurlが入る)' savename = '(適当な名前をつけて保存)' req.urlretrieve(url, savename)
[手法2] urllib.requestモジュールの中のurlopen()を使う。直接ファイルに保存するのではなく、データがPythonのメモリ上に保存される。メモリ上に保存→明示的にファイルに保存、という2ステップを踏まないとファイルに保存できない。
⭐︎with構文:開始と終了時にしなければならない作業を実行する(e.g.ファイルのオープン、クローズ/通信開始、終了)。例えば、with open〜と書けば、close()と明示的に書かなくてもclose()の処理も行ってくれる。
import urllib.request as req url = '(ここにファイルのurlが入る)' savename = '(適当な名前)' #ダウンロード、urlopen()でURLリソースを開き、read()で読み取る mem = req.urlopen(url).read() #fはセーブしたファイルを「w:書き込み」「b:バイナリ」で開いたもの。fにmem(メモリー上に保存されたファイル)を書き込む with open(savename, mode='wb') as f: f.write(mem)
・ウェブサイトからデータを取得(XML、HTML)
・IP確認APIにアクセスして情報を取得
import urllib.request as req #データ取得 url = "http://api.aoikujira.com/ip/ini" data = req.urlopen(url).read() #取得データをUTF-8(ぱっと見読める形)に変換 text = data.decode('utf-8') print(text) #表示
・任意のパラメータをつけてリクエストを送信、それに対する情報を受け取る
ア:郵便番号をパラメータとして送り、それに対応する住所を得る
import urllib.request as req import urllib.parse as parse #parseは「解析」の意、これからparserなどが出てくる API = 'http://api.aoikujira.com/zip/xml/get.php' #このAPIにアクセス予定 #変数設定 values = { 'fmt': 'xml', #ここではxmlに指定、他にもhtmlとかいろいろできる 'zn': '1100001' #検索したい郵便番号を入れる } params = parse.urlencode(values) #変数をURLに登場する形に成形(e.g.「fmt=xml」) url = API + '?' + params #URLの形はAPIで指定したアドレス+はてな+変数 print('url=', url) #データダウンロード data = req.urlopen(url).read() text = data.decode('utf-8') print(text) #表示
イ:文字を入力して、それが入ってる百人一首の句を探す
import sys import urllib.request as req import urllib.parse as parse #sys.argv変数でコマンドラインから単語を読む。sys.argv[0]はスクリプト名、sys.argv[1]にコマンドライン引数が入る。入力として何もなければ(len(sys.argv)<1)USAGE(使い方)を表示 keyword = sys.argv[1] if len(sys.argv) <= 1: print('USAGE: hyakunin.py (keyword)') sys.exit() #パラメータをURLエンコード。コマンドラインじゃなくてもここのkeyword弄れば適当に検索はできる API = 'http://api.aoikujira.com/hyakunin/get.php' query = { 'fmt': 'ini', 'key': 'keyword' } params = parse.urlencode(query) url = API + '?' + params print('url=', url) #データをダウンロードして表示 with req.urlopen(url) as r: b = r.read() data = b.decode('utf-8') print(data)