なろう分析記録

『小説家になろう』をふくめ『ネット小説投稿サイト』を分析する。コード置き場,主にPython,javascript,たまに創作。

【Pythonプログラミング】配列を使ったテキスト操作 URLの作成

ここではスクレイピングやwebAPIを利用する際にリクエスト先のURLを変数的に扱う方法についてご紹介したいと思います。

f:id:karupoimou:20190520053947p:plain:w400
URL文字列操作

URL全体をそのまま配列として使う方法

例えば下記の様なURLがある場合、

"https://yomou.syosetu.com/rank/genrelist/type/daily_101/"
"https://yomou.syosetu.com/rank/genrelist/type/daily_102/"
"https://yomou.syosetu.com/rank/genrelist/type/daily_201/"
"https://yomou.syosetu.com/rank/genrelist/type/daily_202/"
"https://yomou.syosetu.com/rank/genrelist/type/daily_301/"

一番簡単な方法はURLを一つの配列に入れてしまって、呼び出す方法です。

この様に。

url_list=[  "https://yomou.syosetu.com/rank/genrelist/type/daily_101/",
                "https://yomou.syosetu.com/rank/genrelist/type/daily_102/",
                "https://yomou.syosetu.com/rank/genrelist/type/daily_201/",
                "https://yomou.syosetu.com/rank/genrelist/type/daily_202/",
                "https://yomou.syosetu.com/rank/genrelist/type/daily_301/"]

print(url_list[2])
#https://yomou.syosetu.com/rank/genrelist/type/daily_201/

という感じに必要なものを指定して取り出すことができます。

URLの一部を変数として扱う方法

しかしこのURLすべてをリストに入れてしまう方法では、数が多くなると管理が大変になります。

そこで、共通する部分と変わっている部分を別なものとして考え、あとでくっつけるという方法がとられます。


この例のURLの場合、

https://yomou.syosetu.com/rank/genrelist/type/daily_

の部分はすべて共通しており、変わっているのは「101」「102」……と言った数字だけなのです。

replaceを使う方法

replaceを使うことで元URLの一部を書き換えるという方法が可能となります。

url_number=["101","102","201","202","301"]

pre_url="https://yomou.syosetu.com/rank/genrelist/type/daily_number/"
url=pre_url.replace('number',url_number[2])

print(url)
#https://yomou.syosetu.com/rank/genrelist/type/daily_201/
%sを使う方法

また「%s」を使う方法もあります。
どちらかというと、こっちの方がスッキリとしているかもしれません。

url_number=["101","102","201","202","301"]

url="https://yomou.syosetu.com/rank/genrelist/type/daily_%s/" %url_number[2]

print(url)
#https://yomou.syosetu.com/rank/genrelist/type/daily_201/

for文でURLを一つずつ処理していく方法

リストを使ったURL生成の利点としてfor文で一つずつ処理することがしやすいという点が挙げられます。

例えば

url_number=["101","102","201","202","301"]

for number in url_number:
    url="https://yomou.syosetu.com/rank/genrelist/type/daily_%s/" %number
    print(url)

#https://yomou.syosetu.com/rank/genrelist/type/daily_101/
#https://yomou.syosetu.com/rank/genrelist/type/daily_102/
#https://yomou.syosetu.com/rank/genrelist/type/daily_201/
#https://yomou.syosetu.com/rank/genrelist/type/daily_202/
#https://yomou.syosetu.com/rank/genrelist/type/daily_301/

この様にすることが出来ます。

url_number=["101","102","201","202","301"]

for number in url_number:
    url="https://yomou.syosetu.com/rank/genrelist/type/daily_%s/" %number
    print(number)
    print(url)

#101
#https://yomou.syosetu.com/rank/genrelist/type/daily_101/
#102
#https://yomou.syosetu.com/rank/genrelist/type/daily_102/
#201
#https://yomou.syosetu.com/rank/genrelist/type/daily_201/
#202
#https://yomou.syosetu.com/rank/genrelist/type/daily_202/
#301
#https://yomou.syosetu.com/rank/genrelist/type/daily_301/

しかもこのやり方だと配列の中身を別のことにも使えるので便利です。

参考資料

qiita.com