“静态网页"和"动态网页”

"静态网页":一次性加载,爬虫可以爬到全部信息。关于静态网页的Demo
“动态网页”:分多次加载,爬虫只能爬取部分信息(无法直接执行JavaScript代码带来的问题)。

接下来让我们用selenium开始解析动态网页吧

我们需要的工具selenium

selenium是什么?有啥用?我们用了它能解决什么问题?

selenium最初是一个自动化测试工具,而爬虫中使用它主要是为了解决requests无法直接执行JavaScript代码的问题。
selenium本质是通过驱动浏览器,完全模拟浏览器的操作,比如跳转、输入、点击、下拉等,来拿到网页渲染之后的结果,可支持多种浏览器。

selenium的下载和安装

提供两种方法
1、pip xxx
2、打开pycharm等软件,自行搜索库名下载。

selenium对应浏览器插件的下载和安装

下方是selenium支持的浏览器

Chrome
Firefox
PhantomJS
Safari
Edge

根据自己的浏览器类别去下载对应的浏览器插件,接下来用Chrome做例子。

1、查看自己浏览器的版本
打开浏览器,在地址栏输入chrome://version/

2.下载对应的插件
Chrome插件下载地址

找到和自己浏览器版本最接近的版本,点击进去,点击对应操作系统的链接进行下载。

Hello Word~(测试环境是否成功)

from selenium import webdriverdriver = webdriver.Chrome ('你下载的浏览器插件的路径')

如果弹出Chrome窗口,恭喜你。
如果报错,请你检查一下上面步骤或者百度

壁纸网址介绍

超级好看的的壁纸网站

简单说一下这个网站的特点
1、下拉式加载壁纸
2、JS加载壁纸
3、每个壁纸都有很多版本(4K、2K等)

源码

import os
import random
import ssl
import timessl._create_default_https_context = ssl._create_unverified_contextfrom bs4 import BeautifulSoup
import urllib.request'''
在这说明一下  为什么要用selenium
1、有些页面是异步加载返回的,它不是直接返回请求的数据,爬虫只能抓取到最开始的部分数据(空壳数据)后面的数据是由Javascript异步加载进来的
2、爬虫不能解决js加载的问题,所以我们要用selenium
3、我们需要利用selenium抓取js加载的数据(壁纸)
'''from selenium import webdriver  # 调用浏览器做操作
from selenium.webdriver.common.by import By  # 按照什么方式查找,By.ID,By.CSS_SELECTOR
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait  # 等待页面加载某些元素  js加载# 指定Chrome驱动的位置
chromePath = '/Users/apple/Downloads/Chrome下载/chromedriver'
# 壁纸保存的路径
savePath = '/Users/apple/Downloads/desktopPictureTest'# 下该函数为载壁纸  pageCode参数:选择壁纸的种类 maxSlideNumber参数:下拉的次数
def downloadPicture(pageCode, maxSlideNumber):# 打开Chrome浏览器browser = webdriver.Chrome(chromePath)print('打开Chrome中...')# 由于这个网站下拉加载更多的壁纸  所以 初始化下拉次数slideNumber = 1# 存放爬取到的图片hrefDownloadList = []# 下载失败的图片hrefnoDownloadList = []try:# 跳转到壁纸页面browser.get('https://ss.netnr.com/wallpaper' + pageCode)# 我们需要的壁纸放在class名为'row'的div中  我们需要等这个div加载好  我们再抓数据while True:try:# 有时候服务器和网会有点小问题,所以给row10秒加载  如果加载大于10秒 刷新网页 重新开始wait = WebDriverWait(browser, 10)# 等到CLASS_NAME为raw的div加载完毕,最多等10秒wait.until(EC.presence_of_element_located((By.CLASS_NAME, 'row')))# 如果达到了下拉次数,则跳出循环if slideNumber > maxSlideNumber:break# 没达到下拉次数  +1继续循环slideNumber = slideNumber + 1# 如果div加载成功我们需要更多的壁纸,所以下滑到底。print('下拉中....')browser.execute_script('window.scrollTo(0,document.body.scrollHeight)')# 睡眠5秒再次下拉  可以充分展现下拉的用处time.sleep(5)# 如果加载大于10秒 刷新网页 重新开始except:# 刷新网页print('刷新网页...')browser.refresh()# 此时的网页就是下拉n次后的网页  蕴含着好多壁纸# 处理网页内容soup = BeautifulSoup(browser.page_source, "html.parser")# 抓取divrows = soup.findAll(class_='list-group')for i in rows:# 抓取a标签aHref = i.findAll('a')for i in aHref:# 抓取href(下载地址)src = i.get('href')# 把壁纸的href放入列表DownloadList.append(src)# 为什么要break呢  因为此网站提供好几个版本的壁纸  我们只需要第一个(画质最好的版本)break# 此时开始下载壁纸# 如果文件夹不存在则创建if not os.path.exists(savePath):os.makedirs(savePath)# 所有的图片处理完成(失败或者成功)  才可以结束# 可能因为网络和机器的问题,下载会失败,所以采用循环机制print('\033[0;36m')print('共抓取到' + str(DownloadList.__len__()) + '张壁纸')print('\033[0m')print('<=====================================================================================================================================>')# 无论处理成功还是失败,列表的数据处理完才能结束while DownloadList.__len__()>0:# 遍历列表  逐个下载壁纸for i in DownloadList:# 壁纸名称name = i.split('/')[-1]# 避免名称重复  采用随机数saveFile = savePath + "/" + 'qianFuXin' + str(random.randint(0, 9)) + str(random.randint(0, 9)) + \str(random.randint(0, 9)) + str(random.randint(0, 9)) + nameif os.path.exists(saveFile):print(saveFile + '已经存在')exit(0)try:urllib.request.urlretrieve(i, saveFile)# 下载成功就移除列表DownloadList.remove(i)print('处理成功!该文件为:' + saveFile)print('还剩' + str(DownloadList.__len__()) + '张')print('<=====================================================================================================================================>')except:# 下载失败就等下次继续下载noDownloadList.append(i)print("\033[37;41m处理失败\033[0m")DownloadList.remove(i)print('还剩' + str(DownloadList.__len__()) + '张')print('<=====================================================================================================================================>')# 输出未完成的href  人工处理print("\033[37;41m未完成的图片href如下\033[0m")for i in noDownloadList:print(i)finally:# 关闭Chrome页面browser.close()def initChoose():pictureKindAndCode = {'最新壁纸': '#', '4K专区': '#36', '美女模特': '#6','爱情美图': '#30', '风景大片': '#9','小清新': '#15', '动漫卡通': '#26','明星风尚': '#11', '萌宠动物': '#14','游戏壁纸': '#5', '汽车天下': '#12','炫酷时尚': '#10', '日历壁纸': '#29','影视剧照': '#7', '节日美图': '#13','军事天地': '#22', '劲爆体育': '#16','baby秀': '#18', '文字控': '#35'}pictureKindAndNumber = {}number = 1print('<=====================================================================================================================================>')for i in pictureKindAndCode:print(str(number) + '、' + i)pictureKindAndNumber[str(number)] = inumber = number + 1print('<=====================================================================================================================================>')userChoose = input("\033[1;30;47m输入壁纸编号(范围:1-19):\033[0m")# 正则表达式判断输入是不是在数字范围内# matches  只要有一个满足就行  11 是满足[1-9]的  因为1满足了[1-9]# 做个标记# 改用isdigitif userChoose.isdigit() and 20 > int(userChoose) > 0:pageCode = pictureKindAndCode[pictureKindAndNumber[userChoose]]else:print("\033[37;41m请输入1-19之间的数字\033[0m")exit(0)maxSlideNumber = input("\033[1;30;47m输入下拉次数(范围1-99):\033[0m")# 正则表达式判断输入是不是在数字范围内# matches  只要有一个满足就行if userChoose.isdigit() and 100 > int(userChoose) > 0:passelse:print("\033[37;41m请输入1-99之间的数字\033[0m")exit(0)return pageCode, maxSlideNumberif __name__ == '__main__':print('\033[0;36m')print('Default ChromePath\t==>\t' + chromePath)print('Default SavePicturePath\t==>\t' + savePath)print('\033[0m')# 确定路径是都正确defaultPathChoose = input('请查看上方路径是否正确,如果正确输入1继续执行程序,否则输入任意字符退出程序:')if defaultPathChoose.__eq__('1'):passelse:exit(0)# 初始化选择pageCode, maxSlideNumber = initChoose()print('准备下载壁纸.....')# 下载壁纸downloadPicture(pageCode, int(maxSlideNumber))#结束下载print('\033[0;36m')print('下载结束')print('\033[0m')

Python爬取动态加载的壁纸网站(高清壁纸福利)相关推荐

  1. 用Python爬取动态加载的诸如百度的图片

    用Python爬取动态加载的诸如百度的图片 使用原因 代码如下 模块介绍 selenium模块 lxml解析模块 requests模块 去除重复 开启多线程 效果如下 留言 使用原因 学习Python ...

  2. python爬取动态加载的网页之爬取猫眼电影实时票房

    <猫眼电影实时票房>这个网页是通过动态加载的数据,大约4秒钟就要请求一次服务器,上面的数据每次请求都会产生变化,如果直接用requests请求它的html源代码,并获取不了它的数据. 网页 ...

  3. 教你用Python爬取动态加载的数据

    例子1:爬取豆瓣电影中的电影详情数据 url:https://movie.douban.com/ 1.什么是动态加载的数据: 我们通过requests模块进行数据爬取无法每次都是可见即可得,有些数据是 ...

  4. python爬虫动态加载页面_Python+Selenium爬取动态加载页面(2)

    注: 上一篇<Python+Selenium爬取动态加载页面(1)>讲了基本地如何获取动态页面的数据,这里再讲一个稍微复杂一点的数据获取全国水雨情网.数据的获取过程跟人手动获取过程类似,所 ...

  5. python爬取js加载的数据_JS动态加载数据不会爬?老司机教你两个方法爬取想要的数据...

    学习Python的人绝大部分都是在用Python做爬虫,毕竟对于爬虫而言Python是不二选. 但是一般简单的静态页面网站还是很好爬取的,对于很多动态加载的网站就不知道怎么办了,今天小编就给大家介绍两 ...

  6. python爬虫动态加载_python爬虫入门实战(四)!爬取动态加载的页面!

    今天的主题是爬取动态网页的经验分享,以cocos论坛为例子进行分享.(官方不会打我吧 ) 配置环境 为什么选择cocos论坛呢?因为自己在浏览论坛时,发现标题内容会随着滚动条的位置而动态添加. 环境: ...

  7. python爬动态网页json_爬虫再探实战(四)———爬取动态加载页面——请求json...

    还是上次的那个网站,就是它.现在尝试用另一种办法--直接请求json文件,来获取要抓取的信息. 第一步,检查元素,看图如下: 过滤出JS文件,并找出包含要抓取信息的js文件,之后就是构造request ...

  8. python爬取动态网页图片_python爬虫之爬取动态加载的图片_百度

    运行坏境 python3.x 选择目标--百度 当我们在使用右键查看网页源码时,出来的却是一大堆JavaScript代码,并没有图片的链接等信息 因为它是一个动态页面嘛.它的网页原始数据其实是没有这个 ...

  9. 怎么加载csv_python爬虫入门实战(四)!爬取动态加载的页面

    今天的主题是爬取动态网页的经验分享,以cocos论坛为例子进行分享.(官方不会打我吧 ) 配置环境 为什么选择cocos论坛呢?因为自己在浏览论坛时,发现标题内容会随着滚动条的位置而动态添加. 环境: ...

最新文章

  1. numpy使用[]语法索引二维numpy数组中指定指定列之后所有数据列的数值内容(accessing columns in numpy array after specifc column)
  2. php 清空cache,到底如何清除 cache? 我真的快瘋了
  3. [学习笔记]多项式开根
  4. python表白代码照片墙-python入会生成照片墙 利用python生成照片墙代码
  5. SQL 登录注入脚本_常见web安全问题,SQL注入、XSS、CSRF,基本原理以及如何防御...
  6. MYSQL 添加外键报错
  7. MFC源码解读(一)最原始一个MFC程序,手写不用向导
  8. FFMpeg写MP4文件例子分析
  9. MATLAB GUI的界面归一化问题
  10. 网络协议端口号说明(转)
  11. Snell Advanced Media选择金雅拓保护其知识产权
  12. Wannafly 每日一题 2016-12-26 KAOS 字典树
  13. 小D课堂 - 零基础入门SpringBoot2.X到实战_第4节 Springboot2.0单元测试进阶实战和自定义异常处理_20、SpringBoot2.x配置全局异常实战...
  14. prolog与python_讲解:SENG201、Software、Python,Java/c++Web|Prolog
  15. 集装箱装柜计算机器在线,集装箱装柜数智能计算表
  16. windows7蓝牙怎么打开_windows7系统玩游戏不能全屏怎么办?
  17. android 定位轨迹功能,小步外勤怎么看轨迹 定位轨迹功能详解
  18. 读研的那些事儿(三)
  19. Libra最大的竞争对手是什么?Calibra高管给出答案
  20. DFT分析连续非周期信号注意事项

热门文章

  1. RecyclerView的超强辅助Graywater——点击事件
  2. 人人站CMS-站长工具箱上线(常用工具汇总)
  3. Git把本地项目上传github遇到unrelated history的问题
  4. 逗比日记_参考的小习惯
  5. 专业专注,极致体验,高端隐形智能晾衣机品牌邦先生官宣浙江卫视知名主持人沈涛为品牌代言人
  6. 高并发秒杀系统解决方案(银行产品秒杀系统)
  7. outlook 脱机通讯录_使用Outlook 2003中的通讯组列表节省时间
  8. Office365 Word/Excel/PPT 无格式粘贴 设置方法最新终极版 (针对Macos venture 13系统)
  9. 你好世界,我来自遥远的东方,请问你是哪里的高人?
  10. 毕业设计So Easy:卷积神经网络实现中药材识别系统APP