我的第一个爬虫之爬取搜狗壁纸并按分类存入本地文件夹

想学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('所有图片都下载完成!')  
原文地址:https://www.cnblogs.com/BreezeFeng/p/11808434.html