最近有读者反映想要下载千图网的高清背景图片,但是需要会员才能下载,而且需要的量非常大,问博主有没有办法能免费下载这些图片。
付费,不存在的o( ̄▽ ̄)o!,博主今天讲解如何通过python爬取千图网的高清背景图片。
快,快,坐好小板凳,拿好小瓜子,听博主吹牛,额,是讲课,讲课!╰( ̄ω ̄o)

编写环境

为了完美食用本篇教程贴,搭建好如下环境
可以上互联网的win7或win10电脑一台
火狐浏览器(版本无要求)
Python(版本3就可以了)
requests库(版本没啥要求)
lxml库(版本:4.3.3,需要带有etree的lxml库)

需求分析

我们本次要爬取的网页是:千图网背景图片模块

我们【右键】下面的四张背景图片中的其中一张,在弹出的选项栏中选择【查看元素】,查看背景图片的网页代码
在这里插入图片描述可以看到图片指向了一个url,我们将这个url复制出来,在新的标签页中打开。看看,是不是到了图片的高清大图页面。
url链接【//www.58pic.com/newpic/33945157.html】
可以看到进入了图片的高清大图页面。证明,我们最开始打开的页面
【https://www.58pic.com/piccate/10-0-0-p1.html】 的源代码中包含着每张图片的高清大图页面的url。这就说明,我们可以通过爬取最开始打开的页面的源代码进入对应的背景图片的详情页面。(00)/好棒!
我们在看看能不能在背景图片详情页面的源代码中找到图片对应的url,如果有url,我们就可以直接请求url下载高清大图了,就能实现和登陆下载一样的效果。
【右键】图片,点击【查看元素】,即可跳转到网页源代码中图片源码的位置
打开后的页面如下:可以看到高清大图的url存在于页面的源代码当中。我们将这个图片的网址复制出来,在新页面中打开看看,是不是对应的这张图片。
图片链接【//pic.qiantucdn.com/back_origin_pic/05/63/65/2484f933a50db5e542da4d3a4f1ea31c.jpg!/fw/1024/watermark/url/L2ltYWdlcy93YXRlcm1hcmsvc2h1aXlpbi5wbmc=/repeat/true 】
提示referer头错误,证明下载图片时,请求头中需要携带referer参数。
那这个referer参数是干啥的呢(⊙o⊙)?
referer你可以理解为告诉网站服务器,我是从哪个网页跳转过来的。

我们现在总解下上面分析的内容:
1.首先爬取首页面,比如说这个【https://www.58pic.com/piccate/10-0-0-p1.html 】,首页面的源代码中包含有详情页的url
2.详情页的url中包含有高清大图的详细url
3.请求高清大图的url时需要在请求头中携带referer参数

好腻害,我们居然猜到了网页设计着的思路╰( ̄ω ̄o)
话不多说,我们来写python代码

实战代码

  1. 前提参数
    首先我们先写下这些代码
# -*- coding:utf-8 -*-
#作者:猫先生的早茶
#时间:2019年5月21日

第一行 # -*- coding:utf-8 -*-的意思时指点该程序使用的utf-8编码,这个utf-8编码是干啥的呢?这里博主先不做讲解,我们先指导程序的开头需要写上这句代码就可以了。(づ ̄ 3 ̄)づ皮一下,很开心。
第二行和第三行不是必须要写的,可以省略。。。。

  1. 导入模块
    我们接在在导入要使用的模块
import requests
from lxml import etree

这个requests的作用你可以理解为是获取网页代码的,etree的作用类似于转换网页格式,并提取我们想要的信息。

  1. 设置变量
    我们现在要去设置好接下来会使用到的变量.
main_url = 'https://www.58pic.com/piccate/10-0-0-p1.html'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:66.0) Gecko/20100101 Firefox/66.0','Referer':'https://www.58pic.com/piccate/10-0-0-p1.html',}

这个main_url指的就是我们首先要爬取的主页面的url,
headers存储的就是请求头信息,什么是请求头呢?就是用于告诉服务器我的信息,
headers中的User-Agent参数就是告诉服务器我使用的浏览器版本信息,我使用的这个就是告诉服务器,我使用的是火狐浏览器,是一台win10,64位的电脑。
headers中的Referer参数用于表示我是从哪个网页跳转过去的。

  1. 网页下载函数
    现在我们先一个函数用于请求网页代码,需要传递url作为参数,会将下载到的网页代码作为返回值弹出
def get_html(url):'''下载网页代码'''html = requests.get(url,headers).textreturn html

我们定义了一个get_html函数专门用于下载网页代码,每次使用这个函数下载网页代码时,需要给其传递一个url参数。
函数中,我使用requests库的get方法下载了网页的源代码,get方法使用了变量url和变量headers作为参数,这里的变量url,就是函数调用时传递的url参数,headers是我们在步骤2导入模块中设置的变量,用于作为请求头,我们讲下载到的网页代码的以文本的形式存储在变量html中,然后讲网页代码作为函数的执行结果弹出
我们先测试下执行效果

def get_html(url):'''下载网页代码'''html = requests.get(url,headers).textreturn htmlhtml = get_html(main_url)
print (html)

可以看到,我们成功的下载到了网页的源代码,好棒,好棒。鼓掌鼓掌ˋ( ° ▽、° )
现在我们能下载到网页的源代码了,还需要提取出来网页代码中图片的详情页面的url

  1. 爬取图片详细页url
def get_page_url(data):'''提取详情页url'''html = etree.HTML(data)url_list = html.xpath('//a[@class="thumb-box"]/@href')return url_list

这里我们创建了一个名为get_page_url的函数专门用于提取主页面源代码中的图片详情页的url,调用该函数时需要将主页面的源代码作为参数传递进来。
首先我先使用etree.HTML()将传递进来的源代码html,转换为etree格式的数据,然后使用xpath匹配出了网页源代码中的所有图片详情页面的url
为啥xpath后面的括号中要写【’//a[@class=“thumb-box”]/@href’】呢?,因为在【需求分析】的第二张图片中讲到了,图片详情页的url存储在主页面源代码中class属性为"thumb-box"的a标签的href属性中( •̀ ω •́ )
我们调用查看下效果:

html = get_html(main_url)
url_list = get_page_url(html)
print (url_list)


现在我们获取到了图片详情页的url了,接着获取图片详情页的源代码

  1. 获取详情页源码
for url in url_list:html=get_html('http:'+url)print (html)

使用for循环提取出来详情页的url,然后使用前面创建的get_html进行下载网页源码,由于获取到的详情页的url缺少字符’http:'所以我使用【‘http’+url】将其补全。
当前我们的代码如下:

# -*- coding:utf-8 -*-
#作者:猫先生的早茶
#时间:2019年5月21日import requests
from lxml import etreemain_url = 'https://www.58pic.com/piccate/10-0-0-p1.html'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:66.0) Gecko/20100101 Firefox/66.0','Referer':'https://www.58pic.com/piccate/10-0-0-p1.html',}def get_html(url):'''下载网页代码'''html = requests.get(url,headers).textreturn htmldef get_page_url(data):'''提取详情页url'''html = etree.HTML(data)url_list = html.xpath('//a[@class="thumb-box"]/@href')return url_listhtml = get_html(main_url)
url_list = get_page_url(html)
for url in url_list:html=get_html('http:'+url)print (html)

实现了获取主页面的源码,然后提取出详情页的url,接着在获取详情页的源码。
执行后可以看到我们下载到了图片详情页的源代码了。
我们也能获取详情页面的源码了,接着就该提取出详情页中的高清大图的url

  1. 获取高清大图url和标题
    我们还需要编写一个函数用于提取高清大图url和title,url用于作为图片的下载地址,title用于作为图片的保存名称
def get_img_url(data):'''提取高清大图url'''html = etree.HTML(data)url = html.xpath('//img[@class="show-area-pic"]/@src')[0]title = html.xpath('//img[@class="show-area-pic"]/@title')[0]+'.jpg'return url,title

这里我们创建了一个名为get_img_info的函数专门用于提取详情页代码中的图片信息,包括图片的url和图片的标题,调用该函数时需要将详情页的源代码作为参数传递进来。
首先我先使用etree.HTML()将传递进来的源代码html转换为etree格式的数据,然后使用xpath匹配出了网页源代码中的图片的url和title
为啥xpath后面要写[0]呢?,因为xpath默认匹配出的数据是以列表的形式存在的( •̀ ω •́ ),为了将内容提取出来所以要加[0],为啥匹配title的xpath最后面还有 【+‘.jpg’】,应为此时只有文件名,没有后缀,所以博主这里使用【+】加号将其拼接成完整的文件名。然后使用return将图片的url和图片的名称传递出来。

  1. 下载并保存图片
    现在我们也有了图片的url和名称了,就差下载保存图片了。首先我们在程序所在的创建一个名为 picture 用于保存下载的图片。然后编写一个函数专门用于下载图片
def get_img(url,file):'''下载图片'''file_name = 'picture\\'+fileimg = requests.get(url,headers=headers).contentwith open (file_name,'wb') as save_img:save_img.write(img)

这里我们创建了一个名为get_img的函数专门用于下载图片,包括下载图片和保存图片到指定目录下,调用该函数时需要将图片的网址和文件名作为参数传递进来。
首先我将保存的文件夹和文件名合并得到图片完整的存放路径,然后使用requests库的get 方法下载图片的二进制数据,将url和headers传递给get方法,headers作为get方法的请求头。将得到的图片数据保存到指定的文件中。

完整代码

# -*- coding:utf-8 -*-
#作者:猫先生的早茶
#时间:2019年5月21日import requests
from lxml import etreemain_url = 'https://www.58pic.com/piccate/10-0-0-p1.html'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:66.0) Gecko/20100101 Firefox/66.0','Referer':'https://www.58pic.com/piccate/10-0-0-p1.html',}def get_html(url):'''下载网页代码'''html = requests.get(url,headers).textreturn htmldef get_page_url(data):'''提取详情页url'''html = etree.HTML(data)url_list = html.xpath('//a[@class="thumb-box"]/@href')return url_listdef get_img_url(data):'''提取高清大图url'''html = etree.HTML(data)url = html.xpath('//img[@class="show-area-pic"]/@src')[0]title = html.xpath('//img[@class="show-area-pic"]/@title')[0]+'.jpg'return url,titledef get_img(url,file):'''下载图片'''file_name = 'picture\\'+fileimg = requests.get(url,headers=headers).contentwith open (file_name,'wb') as save_img:save_img.write(img)html = get_html(main_url)
url_list = get_page_url(html)
for url in url_list:html = get_html('http:'+url)img_url,img_title = get_img_url(html)get_img('http:'+img_url,img_title)print ('正在下载{}'.format(img_title))

【python--爬虫】千图网高清背景图片爬虫相关推荐

  1. 【python--爬虫】千图网高清背景图片

    爬取的网页是:千图网背景图片模块 查看背景图片的网页代码(右键–>[查看元素]/f12 / fn + f12) url链接[www.58pic.com/newpic/33945157.html] ...

  2. python爬千图网高清图片

    代码如下: import urllib.request import re for i in range(1,2):url = "http://www.58pic.com/piccate/7 ...

  3. Xpath-彼岸图网高清图片获取

    Xpath-彼岸图网高清图片获取 目标网站:彼岸图网 首先导入所需包 import os import timeimport requests from lxml import etree 做好伪装( ...

  4. 按头安利!好看又实用的中国风 古风高清背景图片素材看这里!

    想必大家都在为找中国风 古风高清背景图片而头疼吧,今天小编都为大家整理好咯,超多的中国风 古风高清背景图片资源,大家喜欢的可以先行收藏哈,之后会持续更新哒~ 因为小编的工作原因,经常会使用到中国风 古 ...

  5. 不容错过 科技 商务高清背景图片素材推荐

    最近看到很多朋友吐槽科技 商务高清背景图片素材不好找,有时花了大把时间却没找到合适的,而且有的时候会涉及到各种问题,不仅工作效率降低,还闹心郁闷,所以今天就给大家分享一下小编自己在亲身体验和搜寻网站中 ...

  6. 小白请上车 | Python抓取花瓣网高清美图

    一:前言 嘀嘀嘀,上车请刷卡.昨天看到了不错的图片分享网-- 花瓣 ,里面的图片质量还不错,所以利用selenium+xpath我把它的妹子的栏目下爬取了下来,以图片栏目名称给文件夹命名分类保存到电脑 ...

  7. Python抓取花瓣网高清美图

    一:前言 嘀嘀嘀,上车请刷卡.昨天看到了不错的图片分享网--花瓣,里面的图片质量还不错,所以利用selenium+xpath我把它的妹子的栏目下爬取了下来,以图片栏目名称给文件夹命名分类保存到电脑中. ...

  8. python花瓣飘零_小白请上车 | Python抓取花瓣网高清美图

    一:前言 嘀嘀嘀,上车请刷卡.昨天看到了不错的图片分享网-- 花瓣 ,里面的图片质量还不错,所以利用selenium+xpath我把它的妹子的栏目下爬取了下来,以图片栏目名称给文件夹命名分类保存到电脑 ...

  9. Python爬虫实战批量下载高清美女图片,男生最爱的案例吧!

    彼岸图网站里有大量的高清图片素材和壁纸,并且可以免费下载,读者也可以根据自己需要爬取其他类型图片,方法是类似的,本文通过python爬虫批量下载网站里的高清美女图片,熟悉python写爬虫的基本方法: ...

最新文章

  1. 刻意练习:Python基础 -- Task13. datetime模块详解
  2. python sql语句传参数_pyMySQL SQL语句传参问题,单个参数或多个参数说明
  3. Java之定时任务详解
  4. c#设置软件开机自动运行,修改注册表
  5. boost::type_erasure::less_than_comparable相关的测试程序
  6. python特性和属性的区别_什么是属性,什么是特性,有何不同?
  7. swift5 实现录音App
  8. python index false_整理了 Python新手 最容易犯错的 10个坑!
  9. Silverlight、XAML实现滚动文字
  10. lzugis——Arcgis Server for JavaScript API在自己的定义InfoWindow
  11. 14. Django基础:关系映射
  12. 一些 NSArray 的基本操作代码例子
  13. 解决SVG animation 在IE中不起作用
  14. Kardashev量表和AI:可能的床友
  15. Maven添加junit4依赖
  16. matlab 最小二乘法拟合_最小二乘法与高斯马尔科夫定理(无偏性、有效性)
  17. 用数据分析看泰坦尼克号
  18. 玩转居庸关长城(攻略)
  19. matplotlib 笔记: contourf contour
  20. html5 上标,HTML5 Canvas +下标和上标

热门文章

  1. 解决:启动program时出现问题,找不到指定模块
  2. narwal机器人_欧美追捧的中国黑科技产品,Narwal云鲸全自动扫拖机器人
  3. OM_销售订单的四个主要环节和每个环节用到的常用表
  4. 时间(空间)复杂度 O(N) 的理解
  5. 40页PPT详解:京东大数据基础构架与创新应用
  6. VB6银联读卡之旅(二)__55域获取流程及相关注意
  7. 基于android手机实时监控ipcam视频之二:mediastream2
  8. 【LeetCode力扣】青蛙跳台阶问题,一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。
  9. input标签 设置纯数字输入
  10. 【Win10系统右下角网络图标消失、无法联网、网络Internet状态闪退等问题解决方法】