【超有能!】Pythonでインスタの画像分類を分析してみた(後編)
前回のおさらい
前回の記事 「【超有能!】Pythonでインスタの画像分類を分析してみた(前編)」では、インスタグラムが画像分類を行っていることを、HTMLのimgタグalt属性で確認しました。
今回は、インスタグラムがどんなタグで画像分類を行っているのかを、Pythonで抽出してみようと思います。
環境
ブラウザ:Google Chrome
Webdriver:ChromeDriver
OS:Windows10
Pythonコード
今回使用したライブラリは、ブラウザを自動的に操作するSeleniumです。
Pythonについての詳しい記事は、今後の「プログラミング特集」で載せていく予定なので、今回はざっとコードと、簡単な説明です。
from selenium import webdriver from time import sleep from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC url = 'https://instagram.com/' # インスタグラムurl tagurl = 'https://instagram.com/explore/tags/' # インスタグラムのタグ検索のurl img_xpath = "//article/div[2]/div/div/div[1]/img" # 投稿の画像のXpath newpost_xpath = "//article[@class='KC1QD']/div[2]/div[1]/div[1]/div[1]" # ハッシュタグの最新投稿のXpath nextpage_xpath = "//div[@class='EfHg9']/div[@class='nf1Jg']/div[@class='DdSX2']/a[2]" # 次の投稿ボタンのXpath def open(account_name, password, keywords, picture_counter) : # ------------ SeleniumでChromeブラウザを起動する options = webdriver.ChromeOptions() options.add_argument(r'--user-data-dir=C:\Users\MT4ver2-g23-cHLCokI8\AppData\Local\Google\Chrome\User Data') options.add_argument('--profile-directory=Default') driver = webdriver.Chrome(options=options) wait = WebDriverWait(driver, 15) sleep(4) # ------------ instagramにアクセス driver.get(url) wait.until(EC.presence_of_all_elements_located) # ------------ アカウントにログイン ログイン済みならスルー try : sleep(4) driver.find_element_by_xpath('//*[@id="loginForm"]/div/div[1]/div/label/input').send_keys(account_name) sleep(4) driver.find_element_by_xpath('//*[@id="loginForm"]/div/div[2]/div/label/input').send_keys(password) sleep(4) driver.find_element_by_xpath('//*[@id="loginForm"]/div/div[3]/button').click() except : pass sleep(4) tag_list = [] # 採取的にタグを集めたリスト for keyword in keywords : # ------------ ハッシュタグにアクセス driver.get(tagurl + keyword) wait.until(EC.presence_of_all_elements_located) sleep(4) # ------------ ハッシュタグの最新投稿をクリック driver.find_element_by_xpath(newpost_xpath).click() wait.until(EC.presence_of_all_elements_located) sleep(4) counter = 0 while picture_counter >= counter : # ------------ 画像のalt属性の中身を取得 try : # エラーだった場合(動画とか)は、スルー alt_element = driver.find_element_by_xpath(img_xpath).get_attribute("alt") # ------------ 不要な文字列は取り除いていく tag_inside = alt_element.split(':')[1] words = tag_inside.split('、') for word in words : if 'テキスト' not in word : # 画像に含まれているテキストは、除く if word not in tag_list : tag_list.append(word.split('.')[0]) sleep(4) counter += 1 except : pass # ------------ 次の投稿 try : driver.find_element_by_xpath(nextpage_xpath).click() wait.until(EC.presence_of_all_elements_located) sleep(4) except : break for tag in tag_list : print(tag) # タグを出力 driver.quit() if __name__ == '__main__' : # ------------ アカウント情報と取得したいキーワード account_name = '#######' # アカウントID password = '#######' # アカウントパスワード picture_counter = 10 # 1ハッシュタグにつき、取得する投稿の枚数 keywords = [ # 取得するハッシュタグ 'グルメ', 'アウトドア', 'スポーツ' 'ペット', '自然', '集合写真' ] open(account_name, password, keywords, picture_counter)