[Python #9] requestsでparamsを使う(初心者向け)

こんにちは、pythonチームのT.Sです。

前回はrequestsのparamsを使用したWebAPIの利用についてお話しました。

今回は、pythonのrequestsライブラリを使用したWebスクレイピングの際に役立つ、paramsの使い方についてお話しようと思います。

paramsとは

前提として、URLには、辞書型であるkey = value の形式でパラメータを指定する事ができ、パラメータを指定する方法の中には、requestsライブラリを用いてURLに付与する方法があります。                                                       

具体的には、requestsライブラリのGETメソッドにアクセス先URLと一緒に指定することで、パラメータが付与されたURLにアクセスされます。paramsは、その時に引数として使われるものであり、以下のようなコードでURLにパラメータを付与できます。

requests.get(URL , params = {key:value})

keyはパラメータ記号ともいい、アクセス先のサイト、付与するパラメータによって記号が異なります。例えば、Googleで検索を掛けたい場合のパラメータ記号は'q'になります。また、アクセス先のページによっては、パラメータを2つ以上付与する場合もあります。

Webスクレイピングにおけるparamsの使い方

上記で説明した通り、urlにパラメータを付与する事で検索を掛けることができるので、reqeustsライブラリでWebスクレイピングを行う際にも活用できます。ただ、サイトによってパラメータ記号が異なる為リクエストする前にアクセス先のURLの特徴を見る必要があります。

paramsで検索を掛けてみる

実際に、requestsライブラリでparamsを使って検索を掛けてみます。

実行環境

OS:Windows11 Pro                                                                各種バージョン:                                                                        Python3.9.7                                                                       requests2.26.0

Googleで検索を掛ける

まず、Googleで検索を掛ける際は、先ほども説明した通り、パラメータ記号は'q'でパラメータを付与します。

'スクレイピング'というキーワードで検索を掛けてみます。

import requests
url = 'https://www.google.com/search'
res = requests.get(url2, params={'q': 'スクレイピング'})
print(res.url)

以下が実行結果です。アクセス先のURLが出力されました。

出力されたURLにアクセスしてみると、'スクレイピング'というキーワードで検索が掛かったページに飛んでいることがわかります。

ただ、リクエストしたURLをよく見てみると、Googleトップページの「https://www.google.com/?hl=ja」というURLと違うことがわかると思います。

下記でパラメータを付与されたURLについて詳しく見ていきます。

パラメータを付与されたURL

パラメータ記号は'?'の後に付与されてることが多く、私がアクセスしたGoogleトップページには'hr=ja'というパラメータがデフォルトで付与されていることがわかります。この'hr'というパラメータ記号は、検索言語を意味しており、検索言語はデフォルトで日本語に設定されているということになります。

これと同じく、検索後のURLを見て見てみます。

「https://www.google.com/search?q=%E3%82%B9%E3%82%AF%E3%83%AC%E3%82%A4%E3%83%94%E3%83%B3%E3%82%B0」

'?'の後にパラメータ記号がkey=valueの形でパラメータが付与されています。

「%E3%82%B9%E3%82%AF%E3%83%AC%E3%82%A4%E3%83%94%E3%83%B3%E3%82%B0」の部分が検索ワードである'スクレイピング'です。検索ワードは、パーセントエンコーディングにより符号化されている状態です。ちなみに、パーセントエンコーディングは、URLで使用できない文字を扱う際に行われます。

つまり、requestsでパラメータを付与する際は、q=%E3%82%B9%E3%82%AF%E3%83%AC%E3%82%A4%E3%83%94%E3%83%B3%E3%82%B0にあたる箇所を指定する必要があります。

まだしっくりこない方もいらっしゃると思うので、ぐるなびを例にparamsで検索を掛けてみます。

ぐるなびで検索を掛けてみる

具体的には以下の手順を踏みます。

  1. アクセス先サイトで一度、検索したいキーワードを手動で検索する                                                                                 
  2. 検索後URLからそのサイトで検索する際の、key=valueの形式を把握
  3. 把握したkey=valueの形式で検索後ページにアクセス

まず、paramsで検索を掛けたいワードを一度手動で検索します。「寿司」という検索ワードで検索を掛けた場合、検索後のURLは以下になります。                                            「https://r.gnavi.co.jp/area/jp/rs/?date=20220831&fw=%E5%AF%BF%E5%8F%B8」                                              

次に、検索後URLから検索する際のkey=valueの形式を把握します。                                            '?'の後を見てみると、date=20220831、fw=%E3%83%A9%E3%83%B3%E3%83%81と2つのパラメータが付与されていることがわかります。恐らく、dateというkeyは日付を示しており、fwというkeyは検索ワードを示していると予測できると思います。

形式を把握できたので、paramsで検索を掛けてみます。

import requests
gurunabi = 'https://r.gnavi.co.jp/area/jp/rs/'
res = requests.get(gurunabi, params={'date':20220831,'fw':'寿司'})
print(res.url)

出力されたURLにアクセスしてみます。

'寿司'で検索後のページにアクセスされていることがわかります。

最後に

ここまでを振り返って、「一度手動で検索するなら最初から検索後のURLに直接リクエストすればいいじゃん。」と感じる方もいると思いますが、paramsの付与は関数化することで、柔軟に指定したキーワードを検索後のページにアクセスすることができます。

是非試してみて下さい。                                                     

ファイナルアンサーのPythonチームではwebスクレイピングを用いた課題が用意されています。webスクレイピングに興味がある方は、弊社のインターンで一緒に学びましょう!!

参考

Python, Requestsの使い方 | note.nkmk.me

【Python】requestsの使い方(グーグル検索してみる) | 鎖プログラム (pg-chain.com)