python如何实现壁纸批量下载

  介绍

这篇文章主要介绍python如何实现壁纸批量下载,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

前言

好久没有写文章了,因为最近都在适应新的岗位,以及利用闲暇时间学习python。这篇文章是最近的一个python学习阶段性总结,开发了一个爬虫批量下载某壁纸网站的高清壁纸。

注意:本文所属项目仅用于python学习,严禁作为其他用途使用!

初始化项目

项目使用了virtualenv <代码> 来创建一个虚拟环境,避免污染全局。使用<代码> pip3> pip3  install  virtualenv

然后在合适的地方新建一个<代码> wallpaper-downloader 目录,使用virtualenv <代码> 创建名为<代码> venv> virtualenv  venv   只venv/bin/激活

接下来创建依赖目录:

echo  bs4  lxml  requests 在需求。txt

最后云下载安装依赖即可:

pip3  install  -r 让

分析爬虫工作步骤

为了简单起见,我们直接进入分类为“航空”的壁纸列表页:http://wallpaperswide.com/aer...。

 python如何实现壁纸批量下载

可以看的到,这一页里面一共有10张可供下载的壁纸。但是由于这里显示的都是缩略图,作为壁纸来说清晰度是远远不够的,所以我们需要进入壁纸详情页,去找到高清的下载链接。从第一张壁纸点进的去,可以看到一个新的页面:

 python如何实现壁纸批量下载

因为我机器是视网膜屏幕,所以我打算直接下载体积最大的那个以保证高清(红圈所示体积)。

了解了具体的步骤以后,就是通过开发者工具找到对应的dom节点,提取相应的url即可,这个过程就不再展开了,读者自行尝试即可,下面进入编码部分。

访问页面

新建一个<代码>下载。py 文件,然后引入两个库:

得到bs4  import  BeautifulSoup   import 请求

接下来,编写一个专门用于访问url,然后返回页html的面函数:

def  visit_page (url):   ,headers =, {   & # 39;才能用户代理# 39;:,& # 39;Mozilla/5.0, (Macintosh;, Intel  Mac  OS  X  10 _13_1), AppleWebKit/537.36, (KHTML, like 壁虎),Chrome/63.0.3239.108  Safari/537.36 & # 39;   ,}=,,r  requests.get (url, headers =,标题)=,r.encoding  & # 39; utf - 8 # 39;=,,soup  BeautifulSoup (r.text, & # 39; lxml # 39;)   汤,return 

为了防止被网站反爬机制击中,所以我们需要通过在头添加UA把爬虫伪装成正常的浏览器,然后指定utf - 8编码,最后返回字符串格式的html。

提取链接

在获取了页面的html以后,就需要提取这个页面壁纸列表所对应的url了:

def  get_paper_link(页面):=,,links  page.select (& # 39; # content 祝辞,div 祝辞,ul 祝辞,li 祝辞,div 祝辞,div 一个# 39;)=,collect  []   ,for  link 拷贝链接:   collect.append才能(link.get (& # 39; href # 39;))   以前,return 收集

这个函数会把列表页所有壁纸详情的url给提取出来。

下载壁纸

有了详情页的地址以后,我们就可以进去挑选合适的大小了。在对页面的dom结构分析后可以知道,每一个尺寸都对应着一个链接:

 python如何实现壁纸批量下载

所以第一步,就是把这些大小对应的链接提取出来:

wallpaper_source =, visit_page(链接)   时间=wallpaper_size_links  wallpaper_source.select (& # 39; # wallpaper-resolutions 祝辞,一个# 39;)   时间=size_list  []   for  link  wallpaper_size_links拷贝:=,,href  link.get (& # 39; href # 39;)   ,size_list.append ({   & # 39;才能大小# 39;:,eval (link.get_text () .replace (& # 39; x # 39;,, & # 39; * & # 39;)),   & # 39;才能名字# 39;:,href.replace(& # 39;/下载/& # 39;,,& # 39;& # 39;),   & # 39;才能url # 39;: href   之前,})

<代码> size_list> 中大小我使用了<代码> eval 方法,直接把这里的

python如何实现壁纸批量下载