爬取百度任意类型的图片

该代码用到了selenium库和request库:
写的思想如下:
1.先用selenium模仿人在 百度图片 中,对想要的图片进行搜索;
在这里插入图片描述
2.分析页面的源代码,其实这些图片应该不是百度自己上传的,按f12调试工具,找到第一张图片的连接:
在这里插入图片描述

图片img标签被超链接a标签所包裹,意思就是你点击图片,其实跳转的就是a标签href那个地址,这一点很关键!!!!!
再就是找一个规律,怎么才可以定位出第一张图片,注意要有普遍性,用XPath肯定是不行的,因为搜索其他图片可能值就会变,而我们的代码要有普遍性。经过观察,我发现a标签的name=pn0 就是个很好的定位标准,无论搜索什么,第一张图片的name都为pn0
3.让浏览器仿照人点击这张图片,也就是访问a标签那个href
然后继续分析该页面的源码:

在这里插入图片描述
你会发现该页面唯一的一张图片class值都是currentImg,所以可以根据这一点,来定位该图片进行下载,现在该考虑的就是进行下一张的下载:
继续分析源代码:
在这里插入图片描述
人就是点击右边那个按钮切换到下一张的,可以直接定位该按钮,让selenium模仿人进行点击,然后重复上面的下载步骤即可连续下载!

下面就是所有的源码

from selenium import webdriver
import requests



def looking(mubiao):
    chrome_driver = 'E:\\chromedriver_win32\\chromedriver.exe'
    driver = webdriver.Chrome(executable_path = chrome_driver)
    driver.get('https://image.baidu.com/')
    driver.find_element_by_id('kw').send_keys(mubiao)
    driver.find_element_by_class_name('s_search').click()
    href = driver.find_element_by_name("pn0").get_attribute('href')
    print(href)
    return href
    driver.close()

def download(url,n):
    chrome_driver = 'E:\\chromedriver_win32\\chromedriver.exe'
    driver = webdriver.Chrome(executable_path = chrome_driver)
    driver.get(url)
    for i in range(n):
        ret = driver.find_element_by_class_name("currentImg").get_attribute("src")
        response = requests.get(ret)
        with open(r'E:\Photo\%s.jpg' % (i+1),'wb') as f:
            print("第",i+1,"张图片下载完毕!!!")
            f.write(response.content)
        driver.find_element_by_xpath('//*[@id="container"]/span[2]/span').click()
    driver.close()

if __name__== "__main__":
    mubiao = input("请输入要下载的图片类型:")
    n = int(input("请输入下载数量:"))
    url = looking(mubiao)
    download(url,n)

下载效果图:

在这里插入图片描述
欢迎大佬指教!!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

键盘歌唱家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值