내가 파이썬의 셀레늄 웹 드라이버 (크롬)파이썬 셀레늄 웹 드라이버
내가 여러 드라이버를 사용하여 각 드라이버 크롤에게 이미지를 가질 수 있습니다 이미지를 크롤링 무엇입니까?
나는
소스 코드
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)
실제 다중 처리 대기열을 구현해야합니다. 셀레늄은 블로킹이 파이썬이 다른 일을하지 못하도록한다는 의미입니다. 드라이버 1은 페이지를 요청하고 드라이버 2는 드라이버 1이 완료 될 때까지 아무 것도 할 수 없습니다. 이것은 다중 처리 라이브러리로 해결됩니다. – eusid