2017-05-14 2 views
1

私はPythonのセレンウェブドライバ(クローム)Pythonのセレンウェブドライバ

は、私は複数のドライバを使用して、各ドライバのクロールにイメージを持つことができて画像をクロールしていますか?

私は、あなたは

ソースコード

def crawl(searchText): 
    driver = webdriver.Chrome('C:\\Users\\HYOWON\\Desktop\\Desktop\\Graduation\\Code\\Crawling\\chromedriver.exe') 

    searchUrl = "https://www.google.com/search?q={}&site=webhp&tbm=isch".format(searchText) 

    driver.get(searchUrl) 

    imgs_urls = [] # Url 저장 배열 
    cnt = 0 

    for j in range(20): 
    element = driver.find_element_by_css_selector("div[data-ri = '" + str(cnt + j) + "'] img") 
     element.click() 
     sleep(1) 

     soup = create_soup() 

     for img in soup.find_all('img'): 
      try: 
       if img['src'].startswith('http') and img['src'].endswith('jpg'): 
        imgs_urls.append(img['src']) 
      except: 
       pass 

    driver.close() 
    return(imgs_urls) 

変更コード実際

def crawl(): 
    imgs_urls = [] 
    for j in range(50): 
     element1 = driver1.find_element_by_css_selector("div[data-ri = '" + str(cnt) + "'] img") 
     element2 = driver2.find_element_by_css_selector("div[data-ri = '" + str(cnt) + "'] img") 
     element3 = driver3.find_element_by_css_selector("div[data-ri = '" + str(cnt) + "'] img") 

     element1.click() 
     WebDriverWait(driver1, 1) 
     soup1 = create_soup(driver1) 

     for img in soup1.find_all('img'): 
      try: 
       if img['src'].startswith('http') and img['src'].endswith('jpg'): # http로 시작 jpg로 끝나는것만 
       imgs_urls.append(img['src']) 
      except: # 예외 pass 
       pass 

     element2.click() 
     WebDriverWait(driver2, 1) 
     soup2 = create_soup(driver2) 

     for img in soup2.find_all('img'): 
      try: 
       if img['src'].startswith('http') and img['src'].endswith('jpg'): 
       imgs_urls.append(img['src']) 
      except: # 예외 pass 
       pass 

     element3.click() 
     WebDriverWait(driver3, 1) 
     soup3 = create_soup(driver3) 


     for img in soup3.find_all('img'): 
      try: 
       if img['src'].startswith('http') and img['src'].endswith('jpg'): 
       imgs_urls.append(img['src']) 
      except: # 예외 pass 
       pass 

     cnt += 3 

    return (imgs_urls) 

def download_img(url, filename): 
    full_name = str(filename) + ".jpg" 
    urllib.request.urlretrieve(url, 'C:/Python/' + full_name) 

for url in crawl(): 
    download_img(url, filename) 
+0

実際のマルチプロセッシングキューを実装する必要があります。 Seleniumは、あなたのPythonが何か他のことをするのを止めるという意味です。ドライバ1はページを要求し、ドライバ2はドライバ1が完了するまで何もできません。これは、マルチプロセッシングライブラリで解決されます。 – eusid

答えて

0

複数の処理で、次のことを行うことができますしたいです!私は現在取り組んでいる現在のプロジェクトにマルチドライバソリューションを使用することを考えてきました。

この例では、私はドライバオブジェクトを別々に宣言していますが、私は個人的にそれらを参照するために何らかの種類の配列に入れたいと思っています。もちろん、これはあなたのコードの構造を少しずつ変えてしまいますが、ここではあまりにも多くの問題に遭遇するべきではありません。

from selenium import webdriver 
from selenium.webdriver.chrome.options import Options 
from selenium.webdriver.common.keys import Keys 
from selenium.webdriver.common.by import By 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 

baseURL_1 = "http://www.stackoverflow.com/" 
baseURL_2 = "http://www.google.com/" 

def main(): 
    init() 
    initialPage() 
    return 

def init(): 
    global drv1 
    global drv2 

    chromedrvPath = "C:\\path_to_chrome\\chromedriver.exe" 
    opt = webdriver.ChromeOptions() 
    opt.add_experimental_option('prefs', { 
     'credentials_enable_service': False, 
     'profile': { 
      'password_manager_enabled': False 
     } 
    }) 
    drv1 = webdriver.Chrome(chromedrvPath,chrome_options=opt) 
    drv2 = webdriver.Chrome(chromedrvPath,chrome_options=opt) 

    return 

def initialPage(): 
    navigate(baseURL_1,1) 
    navigate(baseURL_2,2) 
    return 

def navigate(URL,d): 
    if(d == 1): 
     drv1.get(URL) 
    if(d == 2): 
     drv2.get(URL) 
    return 

if __name__ == "__main__": 
    main() 
+0

ありがとうございました。私は私の方法で上記のコードを修正しようとしていますが、403エラーが発生しました。私はそれを修正できますか? **変更コード**をご覧ください –

関連する問題