徒然だみー

オオトリ様との日常

MENU

日向坂メンバーのブログ画像をスクレイピングしてみた~◢⁴⁶

今長野にいるんですけど、ほんと暑いですね~
山梨けぇったら溶けちゃうんだろーな

こんちゃ!だみーです

山梨ってほんと暑いんですよ
気温もなんですけど体にまとわりつく湿気の塊みたいなのがほんとにいや!!
でも、桃とかおいしいもの一杯です♡

はじめに

今回は日向坂メンバーのブログから画像をスクレイピングしようと思います。
昨年、「あなたは日向坂に入れるか!」といったメンバーの画像から日向坂に入れる確率を求めるモデルを作成しようと思い立った。
そのためには大量のメンバーの画像が必要となる

決してやましいことに使うのではない。研究のため、これも世のためだ!

画像を集めるときに使ったプログラムを紹介します。
基本的にコピペで日向坂メンバーの大量の画像が入った変態フォルダが創れると思います。


ちなにみ、わしはくみてん推しでした

プログラム

以下が全コードです↓

import requests,os,time,urllib
from bs4 import BeautifulSoup
import glob

home_url = 'https://www.hinatazaka46.com/s/official/diary/member?ima=0000/'
html = requests.get(home_url)

urlss = []
url_all = []
soup = BeautifulSoup(html.text, "html.parser")
for element in soup.find_all("a"):
    urll = element.get("href")
    if 'diary/detail' in urll:
      a="https://www.hinatazaka46.com"+urll
      urlss.append(a)

#フォルダ内の画像を格納
files = glob.glob("-----------画像を保存したいフォルダへのパス---------------------/*.jpg")

#同じリンクを取り除く
url_all =tuple(urlss)
print(url_all)

j = len(url_all)
for i in range(j):
  #サイトのURL
  target_url = url_all[i]
  response = requests.get(target_url)
  image = response.content
  #画像保存先
  save_dir = "-----------画像を保存したいフォルダへのパス---------------------"
  #ダウンロードの処理
  def download_images():
    #HTML取得
    html = requests.get(target_url).text
    #URLの取得
    urls = get_image_urls(html)
    #URLダウンロード
    go_download(urls)

  #URLの一覧取得
  def get_image_urls(html):
    #HTML解析
    soup = BeautifulSoup(html,"html.parser")
    #画像URLを取得
    res = []
    dv = soup.find('div', class_="c-blog-article__text")
    for img in dv.find_all("img"):
      src = img['src']
      #URLを絶対パスに変換
      url = urllib.parse.urljoin(target_url,src)
      #print('img.src = ',url)
      res.append(url)
    return res

  #URLダウンロード
  def go_download(urls):
    l = len(urls)
    #保存先フォルダー
    if not os.path.exists(save_dir):
      os.mkdir(save_dir)
    for url in urls:
      fname = os.path.basename(url)
      save_file = save_dir + '/' + fname
      r = requests.get(url)
      j = len(fname)
      with open(save_file,'wb') as fp:
        fp.write(r.content)
        print("save:",save_file)
      time.sleep(1)

  if __name__ == '__main__':
    download_images()


普通にスクレイピングすると、実行のたびに同じ画像が保存されてしまうのですが
今回は同じ名前の画像を削除するようにしてあるのでその心配はありません!!

注意点

  • 「-----------画像を保存したいフォルダへのパス---------------------」この部分は画像の保存先を指定してください。
  • プログラムはpythonで記述されています。google colaboを使えばネット上でも実行できます。

colab.research.google.com

  • 上のリンクからgoogle colaboのサイトを開きます。
  • 新しいノートブック作成をクリックします。
  • 次のコードを先にコピペして実行してください。
#ドライブをマウントする
from google.colab import drive
drive.mount('/content/drive')
%cd "/content/drive/My Drive/Google Colab"
  • 次にさっきの全コードをコピペしましょう。
  • google colaboで実行する場合は画像の保存先(-----------画像を保存したいフォルダへのパス--------------------- ←この部分)以下のように指定します。
/usr/bin/chromedriver

これで以上です!!

おひさまの皆さん、変態の皆さんぜひやってみてください!!
最高のフォルダができることを願っています

んじゃ!