本项目将使用requests库、BeaurifulSoup库、selenium库实现下载百度图片的功能.

1、前言

首先,为什么要使用selenium库呢?因为在我们编写爬虫代码的过程中,可能会遇到一个问题:我们需要爬取的内容虽然打开浏览器开发者工具可以看到对应的HTML代码,但是打开网页源代码却找不到对应的内容,而且使用requests库get到的HTML代码也不包含那部分内容.造成这种问题的原因是:你想要爬取的内容采取了js动态加载的方式,属于动态网页.

所谓的动态网页,是指跟静态网页相对的一种网页编程技术。静态网页,随着html代码生成,页面的内容和显示效果就不会发生变化了。而动态网页则不然,其显示的页面则是经过Javascript处理数据后生成的结果,可以发生改变。这些数据的来源有多种,可能是经过Javascript计算生成的,也可能是通过Ajax加载的。

从下面两张图中可以看到区别

那么,从以上的描述我们就知道,使用selenium库的目的就是解决requests库无法加载动态网页的问题.那么selenium库是什么?

2、selenium库

Selenium最初是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Firefox,Safari,Google Chrome,Opera等。但是后来,随着动态网页技术的出现,我们用传统方法爬取动态网页遇到了很多困难,这时候就有人开始把selenium库用于爬取动态网页,虽然速度变慢了,但是爬取的结果相当不错.

2.1 安装selenium库

pip install selenium

2.2 下载浏览器驱动

由于我最常使用的是Chrome浏览器,所以我以Chrome浏览器为例.

首先,在Chrome地址栏输入地址

chrome://version

从图中我们可以看到最上面一行Google Chrome:77.0.3865.90,Chrome对应版本为77

然后再从http://npm.taobao.org/mirrors/chromedriver/网站找到对应版本的Chromedriver.

2.3 使用selenium

# 从selenium导入webdriver
from selenium import webdriver
from bs4 import BeautifulSoup
import timeChromeDriverPath = "/home/nc/download/google/chromedriver"
# 获取Chrome驱动
driver = webdriver.Chrome(executable_path=ChromeDriverPath)
url = "https://www.baidu.com"
# 获取url界面
driver.get(url)
# 将HTML页面内容使用Beautiful解析
soup = BeautifulSoup(driver.page_source, "lxml")
# 保持浏览器界面10s
time.sleep(10)
#浏览器可以同时打开多个界面,close只关闭当前界面,不退出浏览器
driver.close()
#退出整个浏览器
driver.quit()

运行结果:

3、总程序

import requests
from bs4 import BeautifulSoup
from selenium import webdriver
import time
from PIL import Image
from io import BytesIOdef get_soup(url):ChromeDriverPath = "/home/nc/download/google/chromedriver"driver = webdriver.Chrome(executable_path=ChromeDriverPath)driver.get(url)soup = BeautifulSoup(driver.page_source, "lxml")# print(soup.prettify())time.sleep(3)driver.close()#浏览器可以同时打开多个界面,close只关闭当前界面,不退出浏览器driver.quit()#退出整个浏览器return soupdef main():urls = []pages = 5 # 下载10页内容,每一页20张图像# 初始化链接for page in range(pages):url_front = "https://image.baidu.com/search/flip?tn=baiduimage&ie=utf-8&word=狼"url_end = "&ct=&ic=0&lm=-1&width=0&height=0"url = url_front + "&pn=" + str(page*20) + "&gsm=" + str(hex(page*20))urls.append(url)num = 0for url in urls:soup = get_soup(url)children = soup.find_all("li", class_="imgitem")print(len(children))imageLinks = []# 保存链接for child in children:imageLinks.append(child.img["src"])headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0'}for imageLink in imageLinks:r = requests.get(imageLink, headers=headers)image = Image.open(BytesIO(r.content))try:image.save("../downloadResources/wolf_" + str(num) + ".jpg")except:print("save Error")num += 1if __name__ == '__main__':main()

运行结果:

python网络爬虫--下载图片相关推荐

  1. 一篇文章教会你使用Python网络爬虫下载酷狗音乐

    [一.项目背景] 现在的听歌软件动不动就是各种付费,要下载软件才能听,当你下载了之后,你会惊奇的发现这首歌还收费,这就让一向喜欢白嫖的小编感到很伤心了.于是,小编冥思苦想,终于让我发现了其中的奥秘,一 ...

  2. Python网络爬虫之图片懒加载技术、selenium和PhantomJS

    引入 今日概要 图片懒加载 selenium phantomJs 谷歌无头浏览器 知识点回顾 验证码处理流程 今日详情 动态数据加载处理 一.图片懒加载 什么是图片懒加载? 案例分析:抓取站长素材ht ...

  3. 天涯论坛——python网络爬虫下载论坛关键字帖文(一)

    前言 本文介绍了一个天涯网站关键词搜索的爬虫实现 内容 相关爬取内容如下所示 代码 # 账号列表 # 对应关系二维列表from pyquery import PyQuery as pq import ...

  4. python网络爬虫基础知识_Python网络爬虫基础知识

    一.网络爬虫 网络爬虫又被称为网络蜘蛛,我们可以把互联网想象成一个蜘蛛网,每一个网站都是一个节点,我们可以使用一只蜘蛛去各个网页抓取我们想要 的资源.举一个最简单的例子,你在百度和谷歌中输入'Pyth ...

  5. Python网络爬虫:爬取并下载个性化签名图片 附GUI窗体版

    Hello,大家好,我是wangzirui32,最近我开了个新的系列,是"Python网络爬虫"分类,还请大家多多支持! 今天,我们来学习如何爬取并下载个性化签名图片,开始学习吧! ...

  6. python爬虫抓取图片-python网络爬虫源代码(可直接抓取图片)

    在开始制作爬虫前,我们应该做好前期准备工作,找到要爬的网站,然后查看它的源代码我们这次爬豆瓣美女网站,网址为:用到的工具:pycharm,这是它的图标 ...博文来自:zhang740000的博客 P ...

  7. python网络爬虫_爬图片

    python网络爬虫_爬图片 1.安装 Beautifulsoup4 #解析返回的html与json数据pip install Beautifulsoup4 使用 :           运行后输入要 ...

  8. python爬虫代码-python网络爬虫源代码(可直接抓取图片)

    在开始制作爬虫前,我们应该做好前期准备工作,找到要爬的网站,然后查看它的源代码我们这次爬豆瓣美女网站,网址为:用到的工具:pycharm,这是它的图标 ...博文来自:zhang740000的博客 P ...

  9. 利用python从网络上爬取图片_一篇文章教会你利用Python网络爬虫抓取王者荣耀图片...

    点击上方"IT共享之家",进行关注 回复"资料"可获赠Python学习福利 [一.项目背景] 王者荣耀作为当下最火的游戏之一,里面的人物信息更是惟妙惟肖,但受到 ...

  10. 如何用python搜索要用的素材_一篇文章教会你利用Python网络爬虫获取素材图片

    [一.项目背景] 在素材网想找到合适图片需要一页一页往下翻,现在学会python就可以用程序把所有图片保存下来,慢慢挑选合适的图片. [二.项目目标] 1.根据给定的网址获取网页源代码. 2.利用正则 ...

最新文章

  1. 查看器_三款完美替代Windows10自带照片查看器的神器!
  2. 我在学习springboot和vue前后台连接时碰到的问题记录!(跨域问题)
  3. 第四范式获批工信部工业和信息化人才培养工程培训基地
  4. Swift-函数的理解
  5. Java 函数式接口以及Lambda举例
  6. python中lines是什么类型_Python中splitlines()方法的使用简介
  7. cf1523B. Lord of the Values
  8. 17校招真题题集(3)11-15
  9. 使用STS创建Spring boot project报错:Project build error: Non-resolvable parent POM for
  10. configure: error: You requested G729 audio codec but not found...die
  11. 即时通讯领域必将最终由XMPP协议一统天下
  12. python launcher下载_Python flauncher包_程序模块 - PyPI - Python中文网
  13. 最好用图像处理库CxImage入门
  14. docker安装Lefse和分析流程
  15. 关联规则挖掘(Apriori算法)
  16. 与奥运会有关的常用英语术语及句子
  17. 完美删除Mac Os自带输入法
  18. Designing an Encoder for StyleGAN Image Manipulation论文解读
  19. (2020)JAVA中级篇(集合类)
  20. lisp语言cond和if套用_lisp语言入门

热门文章

  1. 2020用vue实现仿美团导航切换功能和淘宝购物车功能,实现默认第一个导航显示效果?
  2. 拼多多为什么越来越受资本青睐?
  3. 物联网毕业设计 基于STM32的环境质量监测系统(源码+原理图+论文)
  4. java json to bson_JSON BSON 效率比较
  5. 汽车行业报告汇总(附下载)
  6. 最全面的SpringMVC教程(五)——文件上传与下载
  7. 微信 获取好友 公众号 群聊的信息
  8. Gurobi求解运输问题
  9. 轩辕剑龙舞云山如何在电脑上玩 轩辕剑龙舞云山模拟器教程
  10. unity 3d实现各种粒子效果