selenium搜狗搜图简单操作(爬取任意关键字的图片)

Picture preview

在这里插入图片描述
在这里插入图片描述

Steps

这里以搜狗搜图作为一个简单的例子:

第一步就是获取我们的需求了,输入需要下载的图片名字以及需要下载的图片数量。

接下来我们需要在搜狗搜图中输入用户的需求,透过xpathxpath锁定搜索框,然后输入需求,进入图片浏览页面。

然后我们点击第一张图片,进入另一个窗口,这个时候我们代码中的窗口也需要跟着变换

b.switch_to.window(b.window_handles[1])

然后就可以开始我们的爬取了,同样的通过xpathxpath得到我们的下载连接,再一张一张的下载到我们设定好的地址中。

为了方便,我设置了一个默认的地址,即D:/+nameD:/ + name的形式文件。

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("下载完成")

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章