本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理
以下文章来源于腾讯云 作者:Python进阶者
( 想要学习Python?Python学习交流群:1039649593,满足你的需求,资料都已经上传群文件流,可以自行下载!还有海量最新2020python学习资料。 )
/1 前言/
想要电脑换个壁纸时都特别苦恼,因为百度搜到那些壁纸也就是分辨率达到了壁纸的水准。可是里面图片的质量嘛,实在是不忍直视…。而有些4K高清的壁纸大多是有版权的 ,这就使我们想要获取高清的图片,变得非常的困难。
wallhaven 网站是无版权的4K壁纸 ,而且主题丰富(创意、摄影、人物、动漫、绘画、视觉),今天教大家如何去批量的去下载wallhaven4K原图。
/2 项目目标/
获取对应的4K壁纸,并批量下载保存在文件夹。
/3 涉及的库和网站/
软件:PyCharm
需要用到的库:requests、lxml、fake_useragent、time
先列出网址,如下所示:
https://wallhaven.cc/search?q=id%3A65348&page={}
www#gaodaima.com来源gaodai$ma#com搞$$代**码)网搞代码
网址city=%E5%B9%BF%E5%B7%9E指的是广州这个城市、pn指的是页数。
/4 项目分析/
滑动鼠标观察下一页的网址的变化:
https://wallhaven.cc/search?q=id%3A65348&page=1<span> https:</span>//wallhaven.cc/search?q=id%3A65348&page=2<span> https:</span>//wallhaven.cc/search?q=id%3A65348&page=3
<code>滑动下一页时,每增加一页page自增加1,用{}代替变换的变量,再用for循环遍历这网址,实现多个网址请求。 </code>
/5 具体实现/
1、定义一个class类继承object,定义init方法继承self,主函数main继承self。导入需要的库和网址。
<span>import</span><span> requests </span><span>from</span> lxml <span>import</span><span> etree </span><span>from</span> fake_useragent <span>import</span><span> UserAgent </span><span>import</span><span> time </span><span>class</span><span> wallhaven(object): </span><span>def</span> <span>__init__</span><span>(self): self.url </span>= <span>"</span><span>https://wallhaven.cc/search?q=id%3A65348&page={}</span><span>"</span> <span>def</span><span> main(self): </span><span>pass</span> <span>if</span> <span>__name__</span> == <span>"</span><span>__main__</span><span>"</span><span>: imageSpider </span>=<span> wallhaven() imageSpider.main()</span>
2、fake_useragent模块实现随机产生UserAgent。
ua = UserAgent(verify_ssl=<span>False) </span><span>for</span> i <span>in</span> range(1, 50<span>): self.headers </span>=<span> { </span><span>"</span><span>User-Agent</span><span>"</span><span>: ua.random, }</span>
3、for循环实现多网址访问。
startPage = int(input(<span>"</span><span>起始页:</span><span>"</span><span>)) endPage </span>= int(input(<span>"</span><span>终止页:</span><span>"</span><span>)) </span><span>for</span> page <span>in</span> range(startPage, endPage + 1<span>): url </span>= self.url.format(page)
4、发送请求 获取响应。
<span>"""</span><span>发送请求 获取响应</span><span>"""</span> <span>def</span><span> get_page(self, url): res </span>= requests.get(url=url, headers=<span>self.headers) html </span>= res.content.decode(<span>"</span><span>utf-8</span><span>"</span><span>) </span><span>return</span> html
5、解析一级页面,得到二级页面的 href 地址。
<span>def</span><span> parse_page(self, html): parse_html </span>=<span> etree.HTML(html) image_src_list </span>= parse_html.xpath(<span>"</span><span>//figure//a/@href</span><span>"</span>)
6、遍历二级页面网址,发生请求、解析数据。找到相对于的图片地址。
html1 = self.get_page(i) <span>#</span><span> 二级页面发生请求</span> parse_html1 =<span> etree.HTML(html1) </span><span>#</span><span> print(parse_html1)</span> filename = parse_html1.xpath(<span>"</span><span>//div[@class="scrollbox"]//img/@src</span><span>"</span><span>) </span><span>#</span><span> print(filename)</span>
7、获取到的图片地址,发生请求,保存。
<span>#</span><span> 图片地址发生请求</span> <span>for</span> img <span>in</span><span> filename: dirname </span>= <span>"</span><span>./图/</span><span>"</span> + img[32:] <span>"""</span><span>可修改图片保存的地址</span><span>"""</span> <span>print</span><span>(dirname) html2 </span>= requests.get(url=img, headers=<span>self.headers).content with open(dirname, </span><span>"</span><span>wb</span><span>"</span><span>) as f: f.write(html2) </span><span>print</span>(<span>"</span><span>%s下载成功</span><span>"</span> % filename)
8、调用方法,实现功能。
html =<span> self.get_page(url) self.parse_page(html) 优化:设置延时。(防止ip被封)。 time.sleep(</span>1.4) <span>"""</span><span>时间延时</span><span>"""</span>