前言

在上一篇文章中讲述了如何使用XPath来提取数据,那么这篇文章就紧随其后,来教各位小伙伴如何使用XPath进行实战,获取网页的信息。

所以我今天带来的内容就是获取必应壁纸

准备工作

工欲善其事,必现利其器。玩爬虫也是同样的道理。

首先,安装好两个库:lxml与requests

pip install lxml
pip install requests

需求分析

爬取的网址:https://bing.ioliu.cn/

抓包分析

首先打开开发者工具,随便点击一张图片进入它的高清大图,点击network进行抓包,在点击图片的下载按钮。

点击下载按钮之后,你会发现,浏览器向图中的网址发起了请求,点击进去之后发现这个就是高清图片的链接地址。

从而我们的第一个需求就是获取所有图片的链接地址。

获取图片链接

为什么要获取图片链接呢?

首先,你思考一下,每一张图片你都要点击下载按钮来将图片保存到本地吗?如果你不懂爬虫那当然没有办法了。但是,我们懂爬虫的人还会这么干吗?

既然每一次点击下载按钮,浏览器都是向对应的高清大图发起请求,那么也就是说我们可以获取到所有的图片链接,然后利用Python模拟浏览器向这些链接发起请求,即可下载这些图片。

链接如下:

https://h2.ioliu.cn/bing/LoonyDook_ZH-CN1879420705_1920x1080.jpg?imageslim

关于翻页

打开网页之后,你会发现起码有100页的图片。那这100页的图片怎么样获取呢?

很简单,依然还是先分析每一页的URL地址,看看有没什么变化规律。

# 第二页
https://bing.ioliu.cn/?p=2
# 第三页
https://bing.ioliu.cn/?p=3

其实看到上面的URL变化之后,我想你也应该明白了变化的规律了吧。

功能实现

构造每一页的链接

其实就是实现简单的翻页功能。

具体代码示例如下所示:

def get_page_url():page_url = []for i in range(1,148):url = f'https://bing.ioliu.cn/?p={i}'page_url.append(url)return page_url

上面代码的功能是构造每一页的链接。将链接保存在page_url中。

获取每一页中的图片链接

在上图中你会发现,图片的链接就藏在了data-progressive里面,这不就是img标签的属性吗?有何难?

但是细心的朋友就会发现,这个链接和我们最开始抓包的链接是不一样的,到底哪里不一样呢?

我们来具体看看

https://h2.ioliu.cn/bing/LoonyDook_ZH-CN1879420705_1920x1080.jpg?imageslim
http://h2.ioliu.cn/bing/LoonyDook_ZH-CN1879420705_640x480.jpg?imageslim

发现了吗?分辨率是不一样的。其他都相同的,那只要将分辨率替换掉就可以了呀。

具体代码如下所示:

def get_img_url(urls):headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36'}img_urls = []count = 1for url in urls[:3]:time.sleep(5)text = requests.get(url, headers=headers).content.decode('utf-8')html = etree.HTML(text)img_url = html.xpath('//div[@class="item"]//img/@data-progressive')img_url = [i.replace('640x480', '1920x1080') for i in img_url]print(f'正在获取第{count}页链接')img_urls.extend(img_url)count += 1return img_urls

上面的代码是获取每一页的图片链接,将链接保存在img_urls中。

保存图片

 def save_img(self, img_urls):headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36'}count = 1for img_url in img_urls:content = requests.get(img_url, headers=headers).contentprint(f'正在下载第{count}张')with open(f'../image/{count}.jpg', 'wb') as f:f.write(content)count += 1

保存图片的代码还是比较简单的,可以将获取到的所有图片链接作为参数传进来,进行逐个访问,即可。

最后

本次分享到这里就结束了,如果你读到了这里,那说明本篇文章对你还是有所启发的,这也是我分享的初衷。

路漫漫其修远兮,吾将上下而求索

我是啃书君,一个专注于学习的人,你懂的越多,你不懂的越多。更多精彩内容,我们下期再见!

通过Python爬取必应壁纸,学XPath相关推荐

  1. 利用Python爬取必应壁纸

    前言 一个喜欢折腾的人,长期看到桌面只有一种壁纸,就想着自己从网上爬取一些壁纸,存下来,随机切换壁纸. 本文仅供学习交流. 工具 Python3 + requests + re Fiddler 抓包工 ...

  2. python壁纸数据抓取软件_python应用:Python 爬取必应壁纸

    Python是一种解释型脚本语言,可以应用于以下领域: web和Internet开发 科学计算和统计 人工智能 教育 桌面界面开发 软件开发 后端开发 网络爬虫 import re import os ...

  3. Python 爬取必应(壁纸+搜索词)

    爬取必应壁纸 经常使用必应应该可以发现,其主页每天都会更新一张图片,这些图片很好看,希望每天能够下载收藏每张图片.具体请看这个网站:必应每日高清壁纸(https://bing.ioliu.cn/) 效 ...

  4. Python爬取wallhaven壁纸 2023.1.31

    Python爬取wallhaven壁纸 壁纸页面 前言 源码 壁纸页面 前言 学习中,未加多线程,由于网站.图片大小等因素导致下载缓慢 望各位大神提出建议并加以修善 网站主页及其爬取页如下,可自行修改 ...

  5. 用Python爬取手机壁纸,太简单了吧

    用Python爬取手机壁纸,太简单了吧! 人生苦短,快学Python! 在Python爬虫的学习过程中,爬取图片几乎是每个初学者都练习过的项目,比如我们之前就分享过:如何用Python快速爬取小姐姐的 ...

  6. python爬取InterfaceLIFT壁纸,下载到本地,数据存入数据库(mysql,mongodb)

    github地址 欢迎star,欢迎拍砖 适用pythopn版本 Python 2.7 or Python 3.6 只在这两个版本之下测试过,正常运行 项目文件说明 main.py 主要文件 mysq ...

  7. Python爬取百度壁纸图片

    Python爬取百度壁纸图片 #! /usr/bin/python -- coding: utf-8 -- @Author : declan @Time : 2020/05/31 16:29 @Fil ...

  8. python爬取桌面壁纸(初学者),一看就会

    今天想给我的电脑里面多加点壁纸,但是嫌弃一个个保存太慢,于是想着写个爬虫直接批量爬取,正好我也刚刚学完爬虫. 我们要爬取一个壁纸网站 http://www.netbian.com/weimei/ind ...

  9. python下载图片 referer_Python必应超清壁纸爬虫下载|Python爬取必应每日图片源码 - PS下...

    不知道大家是否对每日一成不变的壁纸感到厌倦呢?反正对于我个人来说,如果每天打开电脑映入眼帘的都是不同的画面,那么科研热情都会被充分激发,从而提高自己的劳动生产力.下面笔者给大家分享一下Python必应 ...

  10. 基于Jsoup的Java爬虫-爬取必应壁纸网站的壁纸(Java静态壁纸爬虫实例)

    准备阶段 1.必应壁纸网站:https://bing.ioliu.cn(爬取对象网站) 2.Jsoup包下载地址:https://jsoup.org/download(以下代码需要用到该包,记得导入包 ...

最新文章

  1. python 3 廖雪峰博客笔记(三) 命令行模式与交互模式
  2. rocketmq4.1.0部署及流量切换实践
  3. 欢迎加入Hello China技术讨论群组-QQ群:38467832
  4. java中关键字、标识符、常量、变量、数据类型
  5. 2017 年全球十大突破技术:逼格很高很难懂
  6. Javascript 笔记与总结(1-3)arguments
  7. Linux内核为什么会发生soft lockup?
  8. delphi 消息列表中文说明
  9. 软件混沌工程原则以及应用介绍(PRINCIPLES OF CHAOS ENGINEERING)
  10. 【LensFlare镜头光晕】Unity3D奇葩实现
  11. C/C++编程学习 - 第22周 ② 非负数的和
  12. 如何制作图片一句话木马
  13. 传奇开服怎么开服?不会技术自己能开服吗?传奇开服需要准备什么?前期需要投入多少?
  14. 小伙获25位美国总统签名 价值数百万(图)
  15. Base64加密与解密
  16. ### Cause: java.sql.SQLIntegrityConstraintViolationException: Column ‘user_id‘ cannot be null
  17. Golang之上下文Context
  18. 软件自动化测试项目总结,自动化测试总结报告.docx
  19. 重装系统后发现只有系统盘c盘怎么办?
  20. 甲骨文华育兴业|【大数据调查】80%的程序员年薪都在10万以上,三分之一的人年薪20万以上

热门文章

  1. 关于错误“未能加载文件或程序集”的错误的若干处理办法——对GAC的简单应用
  2. android10 psp模拟器,PPSSPP(PSP模拟器) V1.10 安卓版
  3. 鏈接腳本、靜態庫、共享庫
  4. 学习笔记整理:Photoshop软件应用-基础-图像选择
  5. 【Photoshop】——Ps基础学习笔记
  6. 上云之路千万条,青立方易捷版第一条
  7. vulnhub:Who Wants To Be King: 1
  8. pimple idiom C++
  9. 2018北大数学夏令营游记
  10. 中科院数学所夏令营试卷