スキルアップ

Pythonでモノづくり!ブロガー垂涎!?カッテネフォーマットの自動生成を作ろう!(第6回)

こんちにわ。やすひでおです。

Pythonを使ってカッテネフォーマットを自動生成するプログラムを作り始めて、遂に最終6回目です。

やっとここまできました。

過去の制作過程をまだ見ていない方は、是非見てみてください。

Pythonでモノづくり!ブロガー垂涎!?カッテネフォーマットの自動生成を作ろう!(第1回)みなさんの中でこんな悩みはありませんか? こんにちわ。やすひでおです。 今回は、Pythonでカッテネフォー...
Pythonでモノづくり!ブロガー垂涎!?カッテネフォーマットの自動生成を作ろう!(第2回)カッテネフォーマット自動生成ツールの作成を通して、Pythonの勉強をします。 今回は、ユーザーからの入力を受け付ける入力フォームを作成します。...
Pythonでモノづくり!ブロガー垂涎!?カッテネフォーマットの自動生成を作ろう!(第3回)スクレイピングの準備をします。 seleniumとchromedriverを使いました。 簡単な動作確認として、googleに接続してみました。...
Pythonでモノづくり!ブロガー垂涎!?カッテネフォーマットの自動生成を作ろう!(第4回)今回は、Pythonでスクレイピングをしていきます。 実際のサイトに対して欲しい情報を取りに行っているので、実践的な内容となっています。 seleniumを使っているため、ログインなども可能です。...
Pythonでモノづくり!ブロガー垂涎!?カッテネフォーマットの自動生成を作ろう!(第5回)こんちにわ。やすひでおです。 Pythonを使ってカッテネフォーマットを自動生成するプログラム作成の5回目です。 今回は、スクレイピングで取得した情報と、フォームから取得した情報を整形していきます。...

前回は、フォーマット作成を行いました。

今回は、繰り返し処理やリストを使います。

では早速作っていきましょう。

Let's Start Python!!!

繰り返し処理でリンクを作る

前回フォーマットを作りましたが、まだ1つしかリンクが出来ていません。

前回の結果↓

 

画像と同じものを記載しています。

[kattene]
{
"image": "http://testtesttest.jpg",
"title": "テストのタイトル",
"description": "テスト田 テス男",
"site": [
{
"color": "orange",
"url": "//af.moshimo.com/af/c/click?a_id=2078482&p_id=170&pc_id=185&pl_id=4062&url=http%3A%2F%2Fwww.amazon.co.jp",
"label": "Amazon",
"main": "true"
}
]
}
[/kattene]

第4回でもしもアフィリエイトにスクレイピングをした際に、以下の処理を行いました。

  1. リンク先URLを入力する
  2. リンクテキストを入力する
  3. 「どこでもリンクを作成する」ボタンをクリックする
  4. 出来たリンクをコピーする
  5. テキストボックスをクリアする

1~5を繰り返して、情報を取得していきます。

繰り返し処理は、いくつか書き方がありますが、今回はfor文を使いました。

また、list(リスト)もfor文を使う上でよく出てきますので、合わせて実装していきます。

リストで必要な情報をグループ化

リストを使うことで、for文の処理をわかりやすくしたり、変数をまとめたりできます。

Pythonでリストは[]で表します。

実行コマンド

# 初期化
input_urls = []

# リストへの追加
input_urls.append(link1_url_text.get())
input_urls.append(link2_url_text.get())
input_urls.append(link3_url_text.get())
input_urls.append(link4_url_text.get())
input_urls.append(link5_url_text.get())

それぞれ見ていきます。

# 初期化
input_urls = []

ここで、input_urlsという名前のリストを宣言して、初期化しています。
リスト名 = []で初期化できます。

# リストへの追加
input_urls.append(link1_url_text.get())
input_urls.append(link2_url_text.get())
input_urls.append(link3_url_text.get())
input_urls.append(link4_url_text.get())
input_urls.append(link5_url_text.get())

次にappendメソッドを使って、リストに値を代入しています。

以下の赤枠の内容をリストに追加しています。


 

これでinput_urlsというリストには、GUIで入力したURLが全て格納されたことになります。

例えば以下のような形で代入されています。

input_urls = ['https://www.amazon.co.jp', 'https://www.kindle.co.jp', 'https://www.rakuten.co.jp', 'https://www.rakutenkobo.co.jp', 'https://www.audible.co.jp']

このように、各要素が「'」で囲まれて、「,」区切りで格納されています。

1つ目の'https://www.amazon.co.jp'が欲しい場合は、以下のようにします。

実行コマンド

input_urls[0]

プログラミングの世界では、よくある話ですがPythonのリストにアクセスする場合は、0からになります。

慣れればどうってことないのですが、ややこしいのでご注意ください。

input_urls[0] → 'https://www.amazon.co.jp'
input_urls[1] → 'https://www.kindle.co.jp'
input_urls[2] → 'https://www.rakuten.co.jp'
input_urls[3] → 'https://www.rakutenkobo.co.jp'
input_urls[4] → 'https://www.audible.co.jp'

悩める人
悩める人
どうしてわざわざリストに入れるんだ?
やすひでお
やすひでお
これから行う繰り返しの回数に関係してきます

いざ!繰り返し処理

繰り返し処理について、いくつか記載方法がありますが、今回はfor文を使いました。

for文が初めに使う基本的な繰り返し処理になります。

実行コマンド

for url in input_urls:
    target_url.send_keys(url)

# どこでもリンクを作成するボタンをクリック
    make_anywhere_link = driver.find_element_by_xpath('//*[@id="promotion-assignment"]/div[3]/form/div[2]/div/div/div/div/div[2]')
    make_anywhere_link.click()

# ソースをコピー
# .textで情報を取れなかったため、変数にコピーして整形
    anywhere_link_source = driver.find_element_by_xpath('//*[@id="target-source"]')
    anywhere_link_source.click()
    raw_source = driver.execute_script("return window.getSelection().toString();")

# raw_sourceから「<a href=」と「 rel="nofollow" ....」に囲まれた部分を抽出している
    source = re.findall('<a href=(.*) rel="nofollow".*', raw_source)
    sources.append(source)
    target_url.clear()

それぞれ見ていきます。

for url in input_urls:

繰り返し処理のキモはここです。

for文の基本構文

for 変数 in オブジェクト:
    繰り返し行う処理

変数にオブジェクトを代入して処理を実行していきます。

今回のケースでは、input_urlsの1つ目の'https://www.amazon.co.jp'をurlという変数に代入しています。

その後処理を実施すると、次にinput_urlsの2つ目の'https://www.kindle.co.jp'をurl変数に代入して処理を行います。

これを繰り返して、input_urlsの中身を全て処理したら終了するようになっています。

繰り返し行う処理については、for文の下にインテンドをそろえて記載するだけです。

pythonでは、インテンドをそろえることで処理を行うようになっています。

インテンドは半角スペース4つ分がスタンダードとなっています。

以下の処理については、第4回で行った「どこでもリンク」を作るところになります。

詳しくは、第4回を参照してください。

target_url.send_keys(url)

# どこでもリンクを作成するボタンをクリック
make_anywhere_link = driver.find_element_by_xpath('//*[@id="promotion-assignment"]/div[3]/form/div[2]/div/div/div/div/div[2]')
make_anywhere_link.click()

# ソースをコピー
# .textで情報を取れなかったため、変数にコピーして整形
anywhere_link_source = driver.find_element_by_xpath('//*[@id="target-source"]')
anywhere_link_source.click()
raw_source = driver.execute_script("return window.getSelection().toString();")

# raw_sourceから「<a href=」と「 rel="nofollow" ....」に囲まれた部分を抽出している
source = re.findall('<a href=(.*) rel="nofollow".*', raw_source)

以下の処理は先ほど出てきたリストに追加する処理を行っています。

sources.append(source)

sourcesというリストにsourceという変数を追加してます。

これで無事、作った「どこでもリンク」の情報をsourcesリストに格納することが出来ました。

同様に、フォーマット作成でも繰り返し処理を行っています。

最終成果物はこれ!


 

 
選択して、コピー可能

 
画像と同じものを記載しています。

[kattene]
{
"image": "http://testtesttest.jpg",
"title": "テストのタイトル",
"description": "テスト田 テス男",
"site": [
{
"color": "orange",
"url": "//af.moshimo.com/af/c/click?a_id=2078482&p_id=170&pc_id=185&pl_id=4062&url=https%3A%2F%2Fwww.amazon.co.jp",
"label": "Amazon",
"main": "true"
},
{
"color": "blue",
"url": "//af.moshimo.com/af/c/click?a_id=2078482&p_id=170&pc_id=185&pl_id=4062&url=https%3A%2F%2Fwww.kindle.co.jp",
"label": "Kindle"
},
{
"color": "red",
"url": "//af.moshimo.com/af/c/click?a_id=2078482&p_id=170&pc_id=185&pl_id=4062&url=https%3A%2F%2Fwww.rakuten.co.jp",
"label": "楽天"
},
{
"color": "green",
"url": "//af.moshimo.com/af/c/click?a_id=2078482&p_id=170&pc_id=185&pl_id=4062&url=https%3A%2F%2Fwww.rakutenkobo.co.jp",
"label": "楽天Kobo"
},
{
"color": "pink",
"url": "//af.moshimo.com/af/c/click?a_id=2078482&p_id=170&pc_id=185&pl_id=4062&url=https%3A%2F%2Fwww.audible.co.jp",
"label": "Audible"
}
]
}
[/kattene]

最後に

いかがだったでしょうか。

最終回として、リストと繰り返し処理を行いました。

一つのプログラムを作り上げることで、総合的な知識が付いたのではないかと思います。

プログラムを作ることで、単純作業を効率化して、価値創造の時間を増やしたいですね。

今回のように必要な情報を得ながら作っていくことも、大切ですね。

最後までお付き合いいただきありがとうございました。

皆様の勉強のご参考になれば幸いです。

僕も一緒に勉強していきます。