目次
アカウントを集める理由
まずは前回までのあらすじパーシーだよ!!😤
— しよたろ (@_syotarow) March 4, 2020
付き合うまでの工程をウォーターフォールかアジャイルかで語るのやめなさい
— なまぬるいおにぎり🍙デザイナー (@onigiritan) February 28, 2020
ツイッター界隈にはセンスのあるツイートが多い
そんな彼らをささせているフォロワーにはどんな人がいるのかを調査すべく、スクレイピングの旅が始まった。
前回の内容は以下のURlから
urllibとbeautifulSoupでtwitterのツイート数,フォロー数,フォロワー数,いいね数,を取得する
事前準備
今回使用するコードはseleniumのwebdriverを使用します。
ですので、まずはseleniumのwebdriverを手に入れてください
グーグル等で検索すれば記事が出現しますが,希望があれば記事にするのでtwitterのdm等で気軽に話しかけて!
さらにツイッターにログインするコードを継承したコードを使用します
コードは以下のurlから確認してください
seleniumでtwitterに自動的にログインしてみた(RPA,スクレイピング)
それでもわからない時はやはり直接聞いてもらった方がいいので、dm等お願いします
https://twitter.com/matuki_no_ukiwa
コードとその解説
以下がスクレイピング用のコードです
やっていることはいつも通り単純
1,ツイッターにログインする
2,特定のアカウントのフォロワーのページへ移動する
3,スクロールと@のつくコードを取得し続ける
4,100回スクロールするか,Ctrl +C でエラーを発生させる
5,エラー発生した時点で現在集まっているアカウントを全てファイルに書き込む
from TwitterDriver.TwitterDriver import TwitterDriver
from TwitterDriver.GoFollowerDriver import GoFollowerDriver
from TwitterDriver.CollectAtmarksDriver import CollectAtmarksDriver
from bs4 import BeautifulSoup
from TwitterDriver.TwitterDriver import driver
import time
import pickle
if __name__=="__main__":
acount_name = "@naokich48445315"
twitterDriver = TwitterDriver(driver)
twitterDriver.login()
time.sleep(3)
goFollowerDriver = GoFollowerDriver(twitterDriver.driver)
goFollowerDriver.move_followers_pange(acount_name)
time.sleep(3)
collectAtmarksDriver = CollectAtmarksDriver(goFollowerDriver.driver)
time.sleep(4)
#あまり褒められたコードではない,気をつけて!
for i in range(30):
try:
collectAtmarksDriver.get_acounts_info_yield()
except KeyboardInterrupt:
pass
except:
with open('acounts_{}.pickle'.format(acount_name), 'wb') as f:
pickle.dump(collectAtmarksDriver.acounts, f)
import traceback
traceback.print_exc()
driver.close()
with open('acounts_{}.pickle'.format(acount_name), 'wb') as f:
pickle.dump(collectAtmarksDriver.acounts, f)
以下のコードが、スクロールとアカウントの追加を行うコードです
set関数は重複を自動で取り除いてくれるリストのようなもので、
これを実装しているself.acountsにユーザー名をaddで追加していきます
CollectAtmarksDriver.py
from TwitterDriver.TwitterDriver import TwitterDriver
from TwitterDriver.GoFollowerDriver import GoFollowerDriver
from bs4 import BeautifulSoup
from TwitterDriver.TwitterDriver import driver
import time
import pickle
class CollectAtmarksDriver (TwitterDriver):
def __init__(self, arg_driver):
super().__init__(arg_driver)
self.scroll_count = 0
self.acounts = set()
def get_acounts_info_yield(self):
html = self.driver.page_source
bs_obj = BeautifulSoup(html,"lxml")
acount_tags = self.driver.find_elements_by_xpath('//div[@dir="ltr"]')
for acount_tag in acount_tags:
print(acount_tag.text)
self.acounts.add(acount_tag.text)
time.sleep(1)
self.scroll(1)
self.scroll_count+=1
time.sleep(1)
以下の二つのコードは、フォロワーとフォローしているユーザーの一覧のページへ移動するコードです。GoFollowerDriver.py
from TwitterDriver.TwitterDriver import TwitterDriver
class GoFollowerDriver(TwitterDriver):
def move_followers_pange(self, group_acount):
self.driver.get("https://twitter.com/{}/followers".format(group_acount))
GoFollowingDriver.py
from TwitterDriver.TwitterDriver import TwitterDriver
class GoFollowingDriver(TwitterDriver):
def move_follow_page(self, group_acount):
self.driver.get("https://twitter.com/{}/following?lang=ja".format(group_acount))
さて、実際に動かしてみましょう
結果
動画は以下の通り動いているのが確認できると思います