キーワード検索Googleの画像をクロールのpython +セレン

  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を()

 

おすすめ

転載: www.cnblogs.com/buyizhiyou/p/11140128.html