python基于Selenium方法爬取网页图片

selenium简介

selenium是一个用于web应用程序的自动化测试工具,通过Selenium可以写出自动化程序,拟人在浏览器对网页进行操作。selenium可以编写出自动化程序,简化手动保存的部分。

requests简介

requests库可以向第三方发送http请求,是一个用于网络请求的模块,通常以GET方式请求特定资源,请求中不应该包含请求体,所有需要向被请求资源传递的数据都应该通过 URL 向服务器传递。

webdriver简介

使用selenium,离不开webdriver。selenium编写出自动化程序告知浏览器驱动,浏览器驱动再去驱动浏览器。webdriver由浏览器厂家提供,以chrome浏览器为例:

首先,从设置中查找chrome版本号。

接着,根据以下网址,查找浏览器对应的驱动版本号:

https://chromedriver.storage.googleapis.com/index.html

直接下载即可,webdriver可以直接放置在项目路径下,路径指定更加方便。

代码实现

step1:驱动浏览器

from selenium import webdriver
from selenium.webdriver.chrome.service import Service

wd = webdriver.Chrome(service=Service(r'chromedriver.exe'))# 驱动浏览器
wd.get("https://image.baidu.com/search/index?tn=baiduimage&ps=1&ct=201326592&lm=-1&cl=2&nc=1&ie=utf-8&dyTabStr=MCwzLDYsMSw1LDQsOCw3LDIsOQ%3D%3D&word=%E6%B5%B7%E7%BB%B5%E5%AE%9D%E5%AE%9D")
wd.implicitly_wait(5) # 隐式等待,每隔半秒查询一次,五秒后结束

step2:通过xpath定位元素获取url()

from selenium.webdriver.common.by import By
elements = wd.find_elements(By.XPATH, "//*[@class='rich_pages wxw-img']")# 通过Xpath根据图片的class查询

step3:导入requests包,将图片保存到指定路径(PS:这里图片的class可以通过在网页中按f12查询,不建议使用css查询,很多class名有空格,但是在css中的空格表示后代关系)

import requests
import os

i = 0
for element in elements:
    i += 1
    print('----------------')
    t = element.get_attribute('src')
    print(t)# 打印出图片的src
    path = "D:\study material\海绵宝宝图\图{}.jpg".format(i)

    r = requests.get(t)# 通过requests种的get方法得到图片的src
    r.raise_for_status()
    with open(path, 'wb') as f:# 保存图片
        f.write(r.content)
        f.close()
        print('保存成功')
 
wd.quit()# 退出自动化测试

总体代码:

 # 移动鼠标到某个元素
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
import requests
import os
import time

wd = webdriver.Chrome(service=Service(r'C:\Users\Daisy\Desktop\蓝桥杯\chromedriver.exe'))
wd.implicitly_wait(5)

wd.get('https://image.baidu.com/search/index?tn=baiduimage&ps=1&ct=201326592&lm=-1&cl=2&nc=1&ie=utf-8&dyTabStr=MCwzLDYsMSw1LDQsOCw3LDIsOQ%3D%3D&word=%E6%B5%B7%E7%BB%B5%E5%AE%9D%E5%AE%9D')
elements = wd.find_elements(By.XPATH, "//*[@class='main_img img-hover']")

d = "D:\study material\海绵宝宝图"

i = 0
time.sleep(2)
for element in elements:
    i += 1
    print('----------------')
    t = element.get_attribute('src')
    print(t)
    path = "D:\study material\海绵宝宝图\图{}.jpg".format(i)

    r = requests.get(t)
    r.raise_for_status()
    with open(path, 'wb') as f:
        f.write(r.content)
        f.close()
        print('保存成功')

wd.quit()

最终效果:

  • 9
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值