博客
关于我
爬取百度任意类型的图片
阅读量:350 次
发布时间:2019-03-04

本文共 1640 字,大约阅读时间需要 5 分钟。

该代码用到了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 webdriverimport requestsdef 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)

下载效果图:

在这里插入图片描述

欢迎大佬指教!!

转载地址:http://wfhe.baihongyu.com/

你可能感兴趣的文章
Mysql5.7深入学习 1.MySQL 5.7 中的新增功能
查看>>
Webpack 之 basic chunk graph
查看>>
Mysql5.7版本单机版my.cnf配置文件
查看>>
mysql5.7的安装和Navicat的安装
查看>>
mysql5.7示例数据库_Linux MySQL5.7多实例数据库配置
查看>>
Mysql8 数据库安装及主从配置 | Spring Cloud 2
查看>>
mysql8 配置文件配置group 问题 sql语句group不能使用报错解决 mysql8.X版本的my.cnf配置文件 my.cnf文件 能够使用的my.cnf配置文件
查看>>
MySQL8.0.29启动报错Different lower_case_table_names settings for server (‘0‘) and data dictionary (‘1‘)
查看>>
MYSQL8.0以上忘记root密码
查看>>
Mysql8.0以上重置初始密码的方法
查看>>
mysql8.0新特性-自增变量的持久化
查看>>
Mysql8.0注意url变更写法
查看>>
Mysql8.0的特性
查看>>
MySQL8修改密码报错ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
查看>>
MySQL8修改密码的方法
查看>>
Mysql8在Centos上安装后忘记root密码如何重新设置
查看>>
Mysql8在Windows上离线安装时忘记root密码
查看>>
MySQL8找不到my.ini配置文件以及报sql_mode=only_full_group_by解决方案
查看>>
mysql8的安装与卸载
查看>>
MySQL8,体验不一样的安装方式!
查看>>