1 #UTF-8 - * - :コーディング- - * 2 3 インポートJSON 4 インポートOS 5 インポート時間 6 からマルチプロセッシングインポートプール 7 インポートマルチプロセッシング 8つの インポート要求 9 からセレンインポートwebdriverを 10 11 12 DEF = 1000 num_requested get_image_links(キーワード、): 13 「」「セレンの画像リンクを得る 14 『』を」 15 。INT = number_of_scrolls(NUM_REQUESTED / 400)+ 1 16 img_urls = SET() #は自動的に、重複除外リンクを設定するために設定されている 17。 chrome_optionsの=のwebdriver.ChromeOptions() 18である #1 chrome_options.add_argument( ' -ヘッドレス')ヘッドレスブラウザ位に配置されましたである 19。 #chrome_options.add_argument( '= "Mozillaは(Windows NTの10.0 / 5.0; WOW64)のAppleWebKit / 537.36(KHTML、ヤモリなど)クローム/ 69.0.3497.100サファリ/ 537.36は、"ユーザーエージェント') 20がある #のchrome_options.add_argumentは( " LANG = en_USの")#セット言語 21は、 #{profile.managed_default_content_settings.images":2}環境設定は= " 22は、 #1 (chrome_options.add_experimental_option"環境設定」、環境設定)#コンフィギュレーションは、画像をロードしない 23 ドライバ= webdriver.Chrome(chrome_options = chrome_options) 24 driver.maximize_window() 25 SEARCH_QUERY = キーワード 26 のURL = " https://www.google.com/search?q= " + SEARCH_QUERY + " &ソース= lnms&TBM = ISCH " 27 ドライバ.get(URL) 28 のための _ 中範囲(number_of_scrolls): 29 用の I における範囲(5 ): 30の #すべての400枚の画像を表示するために必要な複数スクロール 31 driver.execute_scriptを("window.scrollBy(0、100000)" ) 32 。time.sleep(1 ) 33がある 。(5)time.sleep #のリフレッシュするために、または、彼らは目に見える要素ではないかもしれないページを待つ 34で 試してみる: 35 #1 driver.find_element_by_xpath(" // INPUTの[@ =] 'より多くの結果を表示する'値 ")。 ブラウザの異なるクリック()#英語版 36 driver.find_element_by_xpath(" // INPUT [値@ =] 'の結果は、より多くのを示し' " ).click() 37 [ 除きます:E例外AS 38されて 印刷する(" ページの最後に到達" ) 39 BREAK 40 41がある #オープンと( 'page.html'、 'W')Fとして: 42 # f.write(driver.page_source) 43 IMGS = driver.find_elements_by_xpath(' //のdiv [含み(@class、 "rg_meta")] ')#模糊定位 44 用の I、IMG で列挙(IMGS): 45 img_url = json.loads(img.get_attribute(' innerHTMLの'))[ " OU " ] 46 img_urls.add(img_url) 47 driver.quit() 48 プリント(「すべての画像のURLを取得し終えます!」) 49 50 リターンがimg_urls 51 52を デフ(URLなどdownload_dir)をダウンロード: 53 '' ' イメージをダウンロードしてください 54 ''' 55 印刷(" !画像のダウンロードを開始" ) 56を するために、URL にURLを: 57 ファイル名= os.path.join(download_dir 、os.path.basename(URL)) 58 試し: 59 、R = requests.get(URL、ストリーム= Trueの場合、タイムアウト= 60 ) 60 r.raise_for_status() 61 のオープン(ファイル名と、' WB ' :Fなど) 62 f.write(r.content) 63 を除く例外: 64は、 引き続き 65 印刷(" 画像をダウンロード仕上がり!" ) 66個の 67 =キーワード[ ' 女の子'、' 少年' ] 68 download_dir = " 。 /画像/ ' 69 = download_dirs [] 70 用のキーワードにキーワード: 71 パス=os.path.join(download_dir、キーワード) 72 download_dirs.append(経路) 73 なら ないos.path.exists(パス): 74 os.makedirs(経路) 75 76 #main_keywordsでキーワード: 77 # image_urlsの=のget_image_links(キーワード) 78 # ダウンロード(image_urls、download_dir) 79 80 81 ################################### 82 #画像リンク/マルチ得る 83 位に################################## 84 img_urls = [] 85 multiprocessing.freeze_support() 86、P =プール(4) #のプロセスのデフォルト数は、あなたのCPUのコア数で、自分でそれを変える 87の ためのキーワードでキーワード: 88 img_urls.append(p.apply_async(get_image_links、(キーワード、 ))) 89 #img_urls:[<0x7f536925fcc0でmultiprocessing.pool.ApplyResultオブジェクト>、<0x7f536925fd68でmultiprocessing.pool.ApplyResultオブジェクト>] 90 用の I、URLの中に列挙(img_urls): 91 img_urls [I] = urls.get () 92 p.close() 93 p.join() 94 95 96 ##################################### 97 #は##のダウンロード画像/マルチ 98 #### ################################# 99 P =プール(4)#のプロセスのデフォルト数はコアの数でありますあなたのCPUを、自分でそれを変更する 100 のために、私のURL で:列挙(img_urls) 101 p.apply_async(ダウンロード、[URLを、download_dirs [I]]) 102 p.close() 103 p.joinを()