【Python/Selenium】Instagram特定投稿のいいねユーザースクレイピング
Contents
スクレイピングは自己責任で
当記事はInstagramのスクレイピングを推奨するものではありません。Instagramの規約に従い、スクレイピングは自己責任で行ってください。
またソースコードは著作権物です。個人での利用、改変は自由ですが、転載は禁止です。
コード
# coding:utf-8
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
import chromedriver_binary
import bs4
import pandas as pd
import time
import random
import sys
import argparse
#chromedriver
driver = None
# instagram login
def login(id, password):
global driver
name_input_e = driver.find_element_by_name("username")
name_input_e.send_keys(id)
pass_input_e = driver.find_element_by_name("password")
pass_input_e.send_keys(password)
pass_input_e.send_keys(Keys.RETURN)
time.sleep(3)
def main():
parser = argparse.ArgumentParser(description='インスタグラムの対象投稿のいいねを解析します。')
parser.add_argument('url', help='解析対象の投稿URL')
parser.add_argument('iu', help='Instagram ログインID')
parser.add_argument('ip', help='Instagram ログインPASSWORD')
args = parser.parse_args()
global driver
url = args.url;
print("start crawling favorite of " + url)
driver = webdriver.Chrome()
driver.get('https://www.instagram.com/accounts/login/?source=auth_switcher')
time.sleep(2)
# login
login(args.iu, args.ip)
driver.get(url)
time.sleep(3)
follower_button = driver.find_elements_by_css_selector("a.zV_Nj")[0]
follower_button.click()
time.sleep(3)
dialog = driver.find_element_by_css_selector("div.Igw0E.IwRSH.eGOV_.vwCYk.i0EQd").find_element(By.TAG_NAME, 'div')
favorites = []
favorite_not_found_count = 0;
# scroll popup window
for i in range(300):
driver.execute_script("arguments[0].scrollTop = arguments[0].scrollHeight", dialog)
page_url = driver.page_source
soup = bs4.BeautifulSoup(page_url,"lxml")
elm = soup.find_all("a", {"class": "FPmhX notranslate MBL3Z"})
favorite_found = False
for e in elm:
if e.text not in favorites:
favorites.append(e.text)
print("favorite:"+e.text+" found.")
favorite_found = True
favorite_not_found_count=0
if favorite_found == False:
favorite_not_found_count +=1
if favorite_not_found_count>3:
break
time.sleep(2)
df = pd.Series(favorites)
df.to_csv("insta_favorites.csv")
print("csv file is created.")
driver.close()
if __name__ == '__main__':
main()
使い方
第1引数に投稿URLを指定、第2引数にInstagramのユーザーID、第3引数にパスワードを指定して実行。
ディスカッション
コメント一覧
まだ、コメントがありません