python3.doc_32
R e i - D r e a m
for Laravel
TOP > Python3 > ライブラリ(urllib)
Guest
login

最終投稿日:2022年6月18日

ライブラリ(urllib)
urllib ライブラリ
※Anaconda3 を入れていればあります
スクレイピングに使われたりします。
★ urllib.request
URL へアクセスし、対象のソースを操作
● 画像を取込み保存する(別に画像じゃなくても良い)
import urllib.request as urlreq
s = urlreq.urlretrieve( URL, ファイルパス )            ※引数は共に文字列で指定します
          ※戻り値はタプル( 保存されたパス, 何かのオブジェクト )
● URL の内容をメモリに取込む
import urllib.request as urlreq
d = urlreq.urlopen( URL ).read()            ※第1:URL(文字列)
t = d.decode('utf-8')
           ※read メソッドではバイナリデータで取得するので、必要があればデコードする
★ urllib.parse
URL の解析等を操作
● 辞書データを URL パラメータにする
import urllib.parse as urlps
v = {'hoge':'aaa','foo':'bbb'}
p = urlps.urlencode(v)                      ※hoge=aaa&foo=bbb となる
          ※マルチバイトも勝手に URL エンコードされる
● 相対パスから絶対パスを取得する
import urllib.parse as urlps
base = 'http://hoge.com/foo/bar/index.html'
urlps.urljoin(base, '../aaa.html')                      ※http://hoge.com/foo/aaa.html となる
requests ライブラリ
※Anaconda3 を入れていればあります
urllib.request.urlopen メソッドでは認証を必要とするページを突破する
例)
from bs4 import BeautifulSoup
import requests
user = 'hogehoge'                         ※ログインに必要な送信内容
pwd = 'foofoo'                                ※送信内容はもっとある場合もあります([F12]で確認)
session = requests.session()     ※セッションを開始
login_info = {
    'username':user,
    'password':pwd
}                                                              ※送信する内容を辞書型に格納
url = 'http://localhost/cake3x/users/login'     ※ログインページを指定
res = session.post(url, login_info)                      ※ログインする
res.raise_for_status()                        ※エラーの場合は例外を発生させられる
url = 'http://localhost/cake3x/'    ※実際にスクレイピングしたい URL
res = session.get(url)                      ※ログインが成功した session を使いページにアクセスできる
res.raise_for_status()
soup = BeautifulSoup(res.text, 'html.parser')            ※あとは、普通に解析できます。
【メモ】
エラーの際の res.raise_for_status() は、別にログインに失敗したとかではなく、何らかのシステムエラーの場合です。
ログイン後、BeautifulSoup で解析する場合の第1引数は、取得した変数.text となるので注意!
サーバーに送信されている情報を確認するには、ブラウザの解析ツールを使います。
まずログイン画面で [F12] から解析ツールを開きます。
ツール -> Network タブを表示し、実際にログインします。
するとブラウザが受信した一覧が表示されますので、ログイン画面の URL を選択します。
ツール -> Headers タブ内の Form Data が送信された内容となります。
表示例)
_method: POST
username: hogehoge
password: foofoo
【その他のメソッド】
url = 'https://www.uniqlo.com/jp/store/feature/uq/new/women/'
url = 'https://im.uniqlo.com/images/jp/pc/goods/416875/item/72_416875_middles.jpg'
requests.get(url).text
           ※レスポンスのボディ部分が格納されています。ボディは自動的に unicode 化されている
requests.get(url).content
           ※レスポンスボディの bytes 形式でのデータが格納されています。
※どちらを使えば良いかわからないが、HTMLをパースする場合は text で、画像のバイナリデータを取得する時は content が良いかも。。
きっぷる
ログインしてコメントを残そう!!


レンズモード 【新規購入限定用】
きっぷる