Python에서 Twitter analytics 데이터 내보내기 (트윗에 대한 자세한 정보 [노출, 참여, 좋아, 리트윗 등] 보고서) 자동 획득

1. 본 기사란?



Python을 사용하여 Twitter 애널리틱스의 데이터 내보내기를 자동화했습니다.
· Twitter 애널리틱스 데이터 내보내기
  - 자세한 트윗 정보를 얻을 수 있다.
  - 취득할 수 있는 것은 자신의 트윗만
  - 인증 필요 없음
・트위터 api
  - 어떤 트윗도 획득 가능
  - 자세한 정보를 얻을 수 없음
  - 인증 필요
  - 자동으로 트윗하는 기능이 있다
  - 취득할 수 있는 정보는 트윗 본문, 좋아요, 리트윗 수 등

아래 두 기사의 조합에 약간의 추가를 추가한 것입니다.
・ruby판(참고로 했습니다.)
Mechanize에서 Twitter 애널리틱스 데이터 내보내기 자동화
· 파이썬으로 트위터에 로그인
Python Selenium에서 트위터 로그인에서 게시 할 bot

2 코드



python.py
import time
from selenium import webdriver

# 各種設定
# twitterアカウント
account = '[email protected]' #メールアドレスを推奨(user_id or メールアドレス)
password = '〜password〜'


# Twitterログイン実行する処理

# ログインページを開く
URL="https://analytics.twitter.com/user/[user_id]/tweets"#[user_id]には、自分のユーザーID
driver = webdriver.Chrome("〜chromedriverのPATH〜")
driver.get(URL)
time.sleep(3)  # 動作止める
# accountを入力する
element_account = driver.find_element_by_class_name("js-username-field")
element_account.send_keys(account)
time.sleep(3)  # 動作止める
# パスワードを入力する
element_pass = driver.find_element_by_class_name("js-password-field")
element_pass.send_keys(password)
time.sleep(3)  # 動作止める
# ログインボタンをクリックする
element_login = driver.find_element_by_xpath('//*[@id="page-container"]/div/div[1]/form/div[2]/button')
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
element_login.click()
time.sleep(3)  # 動作止め

#7日version
driver.find_element_by_class_name('daterange-selected').click()
time.sleep(3)
element_login=driver.find_element_by_xpath("/html/body/div[4]/div[4]/ul/li[1]")
element_login.click()
time.sleep(3)
element_login=driver.find_element_by_xpath("//*[@id='export']/button")
element_login.click()
time.sleep(5)

#28日version
#driver.find_element_by_xpath("//*[@id='export']/button")
#time.sleep(3)

3 보충



first.py
driver.find_element_by_class_name('daterange-selected').click()



second.py
element_login=driver.find_element_by_xpath("/html/body/div[4]/div[4]/ul/li[1]")



third.py
driver.find_element_by_xpath("//*[@id='export']/button")




xpath를 사용할 때의 참고
【슈퍼 편리】Python과 Selenium에서 브라우저를 자동 조작하는 방법 정리

4. AWS에서 실행하려고 할 때 빠진 점을 소개



위 코드를 실행할 때 오류
1.selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":".daterange-selected"}
(Session info: headless chrome=76.0.3809.100)
=> account = '[email protected]' #メールアドレスを推奨(user_id or メールアドレス)곳을 user_id로 실행하고 있었는데, 로그인할 수 없는 경우가 있어 메일 주소로 실행해 해결.
이때의 디버그로 참고로 한 기사
Selenium에서 화면 전환 후 화면에서 요소를 얻을 수없는 문제 해결print(driver.current_url)
를 넣는다.
2.selenium.common.exceptions.WebDriverException: Message: unknown error: Chrome failed to start: exited abnormally
(Driver info: chromedriver=2.34.522913 (36222509aa6e819815938cbf2709b4849735537c),platform=Linux 4.9.20-10.30.amzn1.x86_64 x86_64)
그리고Message: unknown error: call function result missing 'value'
=> aws에 다운로드 한 chrome과 choromdrive의 버전이 다른 경우 발생합니다.
Amazon Linux에서 Selenium 환경을 최단으로 구축
Amazon Linux에서 Python + Selenium + Headless Chrome을 사용하여 웹 스크래핑
를 참고로 버전을 맞추면,
options = webdriver.ChromeOptions()
options.add_argument('--no-sandbox')
options.add_argument("start-maximized")
options.add_argument("--disable-dev-shm-usage")
options.add_argument("disable-infobars")
options.add_argument('--disable-extensions')
options.add_argument('--headless')
options.add_argument('--disable-gpu')
driver = webdriver.Chrome(options=options)


같은 옵션을 지정하여 해결.

AWS Lambda(Python3)에서 Selenium + Chrome Headless +로 웹 스크래핑
chromedriver 설치 노트

참고로 해결.
3.
2에서 다음 코드를 사용하면 CSV 데이터를 다운로드 할 수없는 문제가 발생합니다.
options.add_argument('--headless')

[해결책]
def enable_download_in_headless_chrome(browser, download_dir):
    #add missing support for chrome "send_command"  to selenium webdriver
    browser.command_executor._commands["send_command"] = ("POST", '/session/$sessionId/chromium/send_command')

    params = {'cmd': 'Page.setDownloadBehavior', 'params': {'behavior': 'allow', 'downloadPath': download_dir}}
    browser.execute("send_command", params)


enable_download_in_headless_chrome(driver, "〜保存したいフォルダ名〜")

[Selenium] 헤드리스 모드에서 CSV 파일을 다운로드하고 싶을 때의 조치
위 기사에서 소개된 기사
에 작성된 코드를 삽입하여 해결.

플러스로 보충



crontab에서 자동으로 코드를 실행합니다.
#crontabで編集可能になる。
#crontab -rはcrontabの内容が消えてしまうので注意する。

$ crontab -e
* * * * * * bash -l -c "python ~/python.py"

#一つ目の*は「分」
#二つ目の*は「時」を表す。
#この二つで、毎日~時~分に実行できるようになるため十分だと思います。
#丁寧に説明すると、上のコードを書いた後、
[esc]を押して、
次は : を押して、
最後に wq を入力して
[enter] で保存完了。

5. 정리



여러가지는 버렸습니다만, selenum의 공부를 충분히 할 수 있었습니다.
이 후의 분석은
【Python에 의한 데이터 분석①】Python으로 트위터의 오리지널 데이터로부터 확산되기 쉬운 트윗을 분석해 보자!
등으로 공부하고 분석해 보는 것도 좋네요.

좋은 웹페이지 즐겨찾기