1.MongoDB.py
輸入pymongo pymongo.collectionインポートコレクションから クライアント= pymongo.MongoClient(ホスト= '192.168.54.41'、ポート= 27017) デシベル=クライアント[ 'douyin'] DEF send_task(): '、 'douyin_hot_id.txt'(オープンrの')Fとして: f_read = f.readlines() iについてf_readで: task_info = {} task_info [' share_id '] = i.replace(' \ n」を、 '') [ 'task_type'] = 'share_id' task_info 印刷( '当前保存的タスク为%S:' %のtask_info) save_task(task_info) DEF save_task(タスク):#保存数据到MongoDBの中 task_collections =コレクション(DB、 'douyin_task') task_collections.update({[share_id ':タスク[' share_id ']}、タスク、真) :DEF(task_type)get_task task_collections =コレクション(DB、 'douyin_task') タスク= task_collections.find_one_and_delete({ 'task_type':task_type}) 戻りタスク デフDELETE_TASK(タスク): 合格 :DEF save_data(アイテム) data_collections =コレクション(DBを、 'douyin_data') data_collections.insert(アイテム)
2.decode.py
輸入JSONの 試み: douyin.handle_mongo輸入save_taskから 除く: handle_mongo輸入save_taskのから デフ応答(フロー): flow.request.urlの'aweme / V1 /ユーザー/フォロワー/リスト/'の場合: json.loadsでのユーザーのために(流れ.response.text)[ 'フォロワー']: douyin_info = {} douyin_info [ 'share_id'] =ユーザ[ 'UID'] [ 'douyin_id'] douyin_info =ユーザ[ 'short_id'] save_task(douyin_info)
3.douyin.py
インポート時間 selenium.webdriver.support.uiインポートWebDriverWaitから appiumインポートからwebdriverを desired_caps = {}は [ 'platformName'] desired_caps = 'アンドロイド' desired_caps [ 'DEVICENAME'] = 'TGIRPJOBFUZ9IJSW' desired_caps [ 'platformVersion'] = '6.0' desired_caps [ 'appPackage'] = 'com.ss.android.ugc.aweme' desired_caps [ 'appActivity'] = 'com.ss.android.ugc.aweme.splash.SplashActivity' desired_caps [ 'NORESETは'] = TRUE [desired_capsを'unicodeKeyboardは'] = TRUE [ 'resetKeyboardが'] = TRUE desired_capsを ( 'http://192.168.54.56:4723/wd/hub' desired_caps)ドライバ= webdriver.Remoteを DEF(ドライバ)get_size。 リターン(x、y)は X = driver.get_window_size() '幅'] Y = driver.get_window_size() '高'] WebDriverWait(ドライバ、3).until(ラムダXの場合:x.find_element_by_xpath( デフhandle_douyin(ドライバ): #1处理权限 してみてください: WebDriverWaitしばらく(ドライバ、5).until(ラムダX:x.find_element_by_xpath( 「//android.widget.TextView[@resource-id='android:id/le_bottomsheet_default_title '] 「)): driver.find_element_by_xpath( "//android.widget.Button[@resource-id='com.android.packageinstaller:id/permission_allow_button ']")(クリックしてください)。 除い: パス 試み: #点击搜索 プリント( '点击搜索') "//android.widget.ImageView[@resource-id='com.ss.android.ugc.aweme:id/ab_ ']")): driver.find_element_by_xpath( "//android.widget.ImageView[@resource- = ID 'com.ss.android.ugc.aweme:ID / AB&_']「)をクリック()。 除く: #[26,76] [115165] driver.tap([(26、76である)、(115、165 )]、500)NA#のXPathの位置を制御 #ロケーション検索ボックスを WebDriverWait(ドライバ、3).until(ラムダX- IF:x.find_element_by_xpath( 「//android.widget.EditText[@resource-id='com .ss.android.ugc.aweme:上記のID / A4P「] ")): #はdouyin_id検索取得 driver.find_element_by_xpath( " //android.widget.EditText[@resource-id='com.ss.android.ugcを。 aweme:ID / A4P '] ")。send_keys( 'lwnx1208') 一方driver.find_element_by_xpath( " //android.widget .EditText [@リソース-ID = 'com.ss.android.ugc.aweme:ID / A4P']「)テキスト= 'lwnx1208':。! driver.find_element_by_xpath( 「//android.widget.EditText[@resource-id='com.ss.android.ugc.aweme:id/a4p']").send_keys('lwnx1208' ) time.sleep(0.1) #点击搜索 driver.find_element_by_xpath( "// android.widget.TextView [リソース-ID = 'com.ss.android.ugc.aweme:ID / A4R' @]")。クリックしてください() #点击用户标签 WebDriverWait場合(ドライバ、3).until(ラムダX:x.find_element_by_xpath( "// android.widget.TextView [テキスト@ = '用户']")): driver.find_element_by_xpathテキスト@( "// android.widget.TextView [= '用户'] ")をクリックします()。 #点击头像 WebDriverWait(ドライバ、3の場合)(ラムダX .until:x.find_element_by_xpath( 「//android.support.v7.widget.RecyclerView[@resource-id='com.ss.android.ugc.aweme:id/kh '] / android.widget.RelativeLayout [1] /android.widget.RelativeLayout [ 1] /android.widget.ImageView [1] ")): driver.find_element_by_xpath( " //android.support.v7.widget.RecyclerView[@resource-id='com.ss.android.ugc.aweme:id/ KH '] / android.widget.RelativeLayout [1] /android.widget.RelativeLayout [1] /android.widget.ImageView [1]」)。(クリック) #点击粉丝按钮 WebDriverWait(ドライバ、3)(.until場合ラムダX:x.find_element_by_xpath( "//android.widget.TextView[@resource-id='com.ss.android.ugc.aweme:id/a6a ']")): driver.find_element_by_xpath( "//アンドロイド。 widget.TextView [リソース-ID @ =」com.ss.android.ugc.aweme:ID / A6A '] ")をクリックします()。 L = get_size(ドライバ) X1 = INT(L [0] * 0.5) Y1 = INT(L [1] * 0.75) Y2 = INT(L [1] * 0.25) 真中: もし'没有更多了'でdriver.page_source: ブレーク driver.swipe(X1、Y1、X1、Y2) time.sleep(0.5) の場合__name__ == '__main__': handle_douyin(ドライバ)