zoukankan      html  css  js  c++  java
  • 我的第一个爬虫之爬取搜狗壁纸并按分类存入本地文件夹

    想学python很久了,却一直不知道该从哪里学起。最近觉得不管那么多,先从爬虫学起吧。

    这个爬虫其实很基础。

    首先分析要爬取的网站,我这里要爬取的的是搜狗壁纸。打开搜狗壁纸网站,然后f12打开开发者工具,切换到network,选择XHR

    一般壁纸网站都采取瀑布流图片显示,即每次只显示一部分图片,滑到底部时再加载出另一部分图片。当网页开始加载另一部分图片时,XHR位置就会出现请求url

     将这条url复制下来并加以分析,这是爬虫中相当重要的一步

    https://pic.sogou.com/pics/channel/getAllRecomPicByTag.jsp?category=%E5%A3%81%E7%BA%B8&tag=%E5%8A%A8%E6%BC%AB&start=0&len=15&width=1920&height=1080
    很容易就可以发现,这条url中包含着几个重要元素:
    category,tag,star,width,height。
    其中category默认是壁纸,tag是类别,star是开始位置,width和height是壁纸的分辨率
    知道了这几个东西是做什么的,就可以构造出一个适用于所有url的可变url
    https://pic.sogou.com/pics/channel/getAllRecomPicByTag.jsp?category='+cate+'&tag='+t+'&start=0&len='+str(length)+'&width=1920&height=1080

    下面是爬虫源码:

    import requests
    import urllib
    import json
    def createDir():   #创建文件夹函数,参数是要创建文件夹的路径
        import os   #引入模块
        #创建壁纸文件夹名称数组
        tag=['游戏','摄影','卡通','清新','优质','手绘','炫彩','创意']
        #path='D:/a/'
        d_name=[]     #创建路径数组
        for t in tag:  #插入各路径
            dir_path='D:/a/'+t+'/'
            d_name.append(dir_path)  #将路径放入文件夹数组中
            os.makedirs(dir_path)   #创建文件夹
            print(dir_path+' 文件夹创建成功!')
        return d_name  #返回数组
            
               
    def getImg(cate,length,path):  #定义一个函数下载图片,参数是标签,图片数量,下载地址
        tag=['游戏','摄影','卡通','清新','优质','手绘','炫彩','创意']
        re_path=[]      #请求数组
        header={
            
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36',
            'X-Requested-With': 'XMLHttpRequest'
        }
        #header=request.headers  #请求头内容,进行爬虫伪装
        for t in tag:   #插入请求数组元素    
            re_path.append('https://pic.sogou.com/pics/channel/getAllRecomPicByTag.jsp?category='+cate+'&tag='+t+'&start=0&len='+str(length)+'&width=1920&height=1080')
       # print(re_path)
     
        for tg,address in zip(re_path,path):  #按每个标签进行下载 同时遍历两个数组
            m=requests.get(tg,headers=header)    #tg是请求数组元素,address是文件保存路径数组元素
            j=json.loads(m.text)  #将已编码的 JSON 字符串解码为 Python 对象
            j=j['all_items']       #all_items是json一个索引值,
            m_url=[]
            #path='D:/a/'     #定义一个下载路径
            for k in j:
                m_url.append(k['pic_url'])       #append:在数组最后插入新元素
            m=0
            for m_url in m_url:       #图片下载   
                print('******'+str(m)+'.jpg *******'+'downloading')
                urllib.request.urlretrieve(m_url,address+str(m)+'.jpg')    #这个是urllib的下载函数 参数:下载地址,下载路径
                m=m+1    
            print('sucessful downliading!')
    
    path=createDir()   #path数组成功返回
    getImg('壁纸',50,path)
    print('所有图片都下载完成!')  
  • 相关阅读:
    JAVA中的流-简介(二)
    JAVA中的流-简介(一)
    Java中内部类简介
    应用小练习-自定义栈
    集合知识点(二)
    集合知识点(一)
    JAVA中的正则表达式简介
    从头文件中学习sfr和sbit
    PCB中实现元器件旋转一个角度放置
    DXP中插入LOGO字体方法(2)
  • 原文地址:https://www.cnblogs.com/BreezeFeng/p/11808434.html
Copyright © 2011-2022 走看看