Picture preview
Steps
这里以搜狗搜图作为一个简单的例子:
第一步就是获取我们的需求了,输入需要下载的图片名字以及需要下载的图片数量。
接下来我们需要在搜狗搜图中输入用户的需求,透过锁定搜索框,然后输入需求,进入图片浏览页面。
然后我们点击第一张图片,进入另一个窗口,这个时候我们代码中的窗口也需要跟着变换
b.switch_to.window(b.window_handles[1])
然后就可以开始我们的爬取了,同样的通过得到我们的下载连接,再一张一张的下载到我们设定好的地址中。
为了方便,我设置了一个默认的地址,即的形式文件。
path = "D://" + name
if not os.path.exists(path):
os.mkdir(path)
Coding
#-*- coding = utf-8 -*-
#@Time : 2020/6/30 17:15
#@Author : lifehappy
#@File : 搜狗搜图selenium.py
#@Software : PyCharm
from 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''')##得到图片连接的xpath
link = 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://" + name
if not os.path.exists(path):
os.mkdir(path)
get_page(name)
start_spider(num, path)
print("下载完成")