Picture preview
Steps
这里以搜狗搜图作为一个简单的例子:
第一步就是获取我们的需求了,输入需要下载的图片名字以及需要下载的图片数量。
接下来我们需要在搜狗搜图中输入用户的需求,透过xpathxpathxpath锁定搜索框,然后输入需求,进入图片浏览页面。
然后我们点击第一张图片,进入另一个窗口,这个时候我们代码中的窗口也需要跟着变换
b.switch_to.window(b.window_handles[1])
然后就可以开始我们的爬取了,同样的通过xpathxpathxpath得到我们的下载连接,再一张一张的下载到我们设定好的地址中。
为了方便,我设置了一个默认的地址,即D:/+nameD:/ + nameD:/+name的形式文件。
path = "D://" + nameif not os.path.exists(path):os.mkdir(path)
Coding
#-*- coding = utf-8 -*-
#@Time : 2020/6/30 17:15
#@Author : lifehappy
#@File : 搜狗搜图selenium.py
#@Software : PyCharmfrom selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
import requests
import os##记得要安装driver到chorme浏览器的相应目录下。
chromedriver_path = "C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe"b = webdriver.Chrome(chromedriver_path)def get_page(name):b.get("https://pic.sogou.com/")search_window = b.find_element_by_xpath(r'''//*[@id="form_querytext"]''')##get到输入窗口。search_window.send_keys(name)##在输入窗口输入我们要查找的关键词。search_window.send_keys(Keys.ENTER)##ENTER键,进入图片浏览页面。time.sleep(2)##设置休眠时间,玄学设定。def start_spider(num, path):##点击第一张图片获得它的xpath。new_window = b.find_element_by_xpath(r'''/html/body/div[2]/div[2]/ul/li[1]/div/a[1]/img''')new_window.click()b.switch_to.window(b.window_handles[1])##因为新开了一个窗口,我们一定要跳转窗口才能完成后面的操作。for i in range(num):print("正在下载第%d张" % (i + 1))image_element = b.find_element_by_xpath(r'''//*[@id="imageBox"]/img''')##得到图片连接的xpathlink = image_element.get_attribute("src")link = requests.get(link)##转换类型,为了后面的下载。image_path = path + "//%d.jpg" % (i + 1)##图片名称设置为第几张。down_load(image_path, link)##下载next_page = b.find_element_by_xpath(r'''//*[@id="btnPgRgt"]/span''')##点击按钮到下一张图片。next_page.click()time.sleep(1)def down_load(path, link):with open(path, 'wb') as f:f.write(link.content)time.sleep(1)f.close()if __name__ == "__main__":name = input("输入下载图片名称:")num = int(input("输入下载图片数量:"))path = "D://" + nameif not os.path.exists(path):os.mkdir(path)get_page(name)start_spider(num, path)print("下载完成")