zoukankan      html  css  js  c++  java
  • 竟然如此简单!输入明星名字就可以直接爬取高清图片

    听说你在自己喜欢的明星壁纸?比如李易峰,王一博,易烊千玺、王源、王俊凯,李现等。今天教你批量下载这些明星高清壁纸(文末有福利)

    最近图慌,闲来无事爬取李易峰的高清图片,当做手机壁纸也是不错的选择。
    废话不多说,下面上效果图:

    是不是很帅气呢?

    爬取的步骤也非常简单:

    1、获取目标网址。
    2、浏览器抓包,得到图片的具体url。
    3、通过Python编写代码,用requests模块对url发起请求,将图片下载到本地文件夹中。

    本文是通过面向对象的方法,代码更加稳定,想要多少张图片就能下载多少张图片。

    1、分析目标网站
    首先,要想爬取图片,第一步肯定是要分析目标网址,以此来获取图片的 url。打开浏览器的控制台,对该网页进行抓包,发现该网页上的图片是通过瀑布流的方式加载出来的,于是在往下滑,得到的下方箭头指向的网址,那这个是否就是我们需要的呢。

    为了证实该网址里面有我们需要的数据,打开preview,发现这些这是我们需要的,数据通过json的格式给我们呈现出来。

    抓包得到我们需要的网址,接下来就简单多了,通过requests模块向该网址发起请求,那不完事了吗。

    2、编写代码
    说干就干,首先导入我们需要的模块

    import requests
    import time
    import random
    from urllib.request import urlretrieve
    import os
    
    
    

    下面就开始敲代码,通过面向对象的方式,先将具体的框架写下来

    class Wangyibo(object):
        def __init__(self,name):
            self.headers = {
                'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'
            }
            self.name = name
    
    
    if __name__ == "__main__":
        #明星图片
        name="李易峰"
        Wangyibo(name).run()
    

    为了不被网站发现我们是网络爬虫而不是浏览器,因此要加入请求头。

    def __init__(self):
      self.headers = {
      'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'
      }
    
    
    

    下面步入正轨,对网址发送请求,先暂时爬取九页

    def run(self):
            for i in range(0, 200, 24):
                url = 'https://www.duitang.com/napi/blog/list/by_search/?kw='+self.name+'&type=feed&include_fields=top_comments%2Cis_root%2Csource_link%2Citem%2Cbuyable%2Croot_id%2Cstatus%2Clike_count%2Clike_id%2Csender%2Calbum%2Creply_count%2Cfavorite_blog_id&_type=&start={}'.format(
                    i)
                self.request(url)
    

    下面对该网址发起请求,将图片下载到本地

    def download_pic(self, href):
            # 判断当前目录下是否存在该文件夹,如果没有就创建
            if not os.path.exists(self.name):
                os.mkdir(self.name)
    
    
            name = os.path.split(href)[1]
            urlretrieve(href, './'+self.name+'/{}'.format(name))
            print("=================={}下载完成===================".format(name))
            time.sleep(random.random())
    
        def request(self, url):
            response = requests.get(url, headers=self.headers)
            time.sleep(random.uniform(0, 1))
            lists = response.json()['data']['object_list']
            for list in lists:
                pic_url = list['photo']['path']
                self.download_pic(pic_url)  # pic_url即为图片的网址
    

    为了防止爬取太快,可能会被封IP,因此每爬取一张图片都休息一定的时间,保证爬虫的安全、稳定性。最后运行整体的程序,过不了多久,王一博的帅照全部都被下载到本地啦。

    3、结语

    整个程序的代码相对来说还是非常简单的,感兴趣的小伙伴们都可以自己试一下。

    if __name__ == "__main__":
        #明星图片
        name="李易峰"
        Wangyibo(name).run()
    

    在这里改为自己喜欢的明星名字就可以了,他/她的高清壁纸非你莫属。

    本文完整源码获取方式

    识别文末二维码,回复:明星壁纸

    - END -

    各种爬虫源码获取方式

    识别文末二维码,回复:爬虫源码

    欢迎关注公众号:Python爬虫数据分析挖掘,方便及时阅读最新文章

    记录学习python的点点滴滴;

    回复【开源源码】免费获取更多开源项目源码;

  • 相关阅读:
    用户使用调查报告
    Beta阶段敏捷冲刺五
    Beta阶段敏捷冲刺四
    Beta阶段敏捷冲刺三
    Beta阶段敏捷冲刺二
    Beta阶段敏捷冲刺一
    软工网络15团队作业8——Beta阶段敏捷冲刺
    Beta阶段Scrum 冲刺博客合集
    软工网络15Alpha阶段敏捷冲刺博客集合
    项目复审——Beta阶段
  • 原文地址:https://www.cnblogs.com/chenlove/p/14088508.html
Copyright © 2011-2022 走看看