【挑戦】urlopenとBeautifulSoupを使ってインポートが分からなくなる【9日目】

前回は、対話形式のREPLを使ってDOM要素を取り出してみました。

今後、どうやって使っていくか分かっていませんが。

今回は、urlopenとBeautifulSoupを使って郵便番号から住所を取得します。

スポンサーリンク

参考にしている本



BeautifulSoupのおさらい

BeautifulSoupは、HTMLやXMLを解析するライブラリでした。

前回は、ソースの中にHTMLを書いて、そのソースの中から要素を抽出する例を勉強しました。

今回は、ソースの中にURLを書いて解析する仕組みですので、実用性がありそうです。

#ライブラリを取り込む
from bs4 import BeautifulSoup
import urllib.request as req

url = "https://***************/zip/xml/1500042"

#urlopen()でデータ取得
res = req.urlopen(url)

#BeautifulSoupで解析
soup = BeautifulSoup(res,"html.parser")

#データを抽出
ken = soup.find("ken").string
shi = soup.find("shi").string
cho = soup.find("cho").string
print(ken,shi,cho)
BeautifulSoup 実行結果

urlにURLを入れておけば、urlopenで開いて、BeautifulSoupで解析して、データを抽出することが出来ました。

urllib.requestの中のurlopenってことですね。

urllib.request.urlopen

urllib.request は URL を開いて読むためのモジュールです。

urllib.requestの中にurlopenをいう関数があります。

インポートにはfromとimport がある

BeautifulSoupをインポートするときはfrom

urllibをインポートするときはimport

なぜ?

fromは「bs4」=「Beautiful Soup 4」というライブラリの中にある 「BeautifulSoup」という関数だけをインポートします。

BeautifulSoupだけしかインポートしていないので、解析するときに BeautifulSoup()だけで使えるということになります。

「soup = BeautifulSoup(res,”html.parser”)」

importを使った場合

fromでは、ライブラリの中の関数だけをインポートできますが、importでは、ライブラリ全体を読み込む感じですかね。

importだけではエラーになる

importしか使わないとエラーになります。BeautifulSoupが見つからないですね。

importの場合は、全体がインポートされるので、実行時は「どこの」を指定してあげないといけないことが分かりました。

soup = bs4.BeautifulSoup(res,”html.parser”)

importだけの場合は、ライブラリ名.で指定が必要

formとimportの違い

  1. from bs4 import BeautifulSoup
  2. import bs4

1はbs4ライブラリの中のBeautifulSoupだけをインポートできるので、実行時はライブラリ名を省略できる。

2はbs4全体がインポートできるので、実行時にライブラリを指定する。

なので、

BeautifulSoupしか使わないよ、というときはfromでOKで、コードが簡潔に書けるので便利。何度もライブラリを指定しなくて良いですからね。

BeautifulSoup以外も使うよ、という場合はimportですね。

言葉で混乱してきた

本の中では、「ライブラリ」をインポートすると記載がある。

ネット上のサイトでは「ライブラリ」というサイトと「モジュール」というサイトがある。

関数であったりクラスだったり、ちょっとワケが分からなくなってきました。

タイトルとURLをコピーしました