python爬虫-单线程爬取图片

今天我们准备使用爬虫来爬取一些图片首先我们找到其url页面
https://pvp.qq.com/web201605/wallpaper.shtml,进入之后当我们点击跳转页面的时候,发现其上方的网址没有发生变化,如果不发生变化的话就不可以进行翻页操作,于是我们找到源代码,发现源码下面竟然没有任何的数据。于是我们猜想可能是把它藏到了别的地方于是我们点击后台network,找到了这个:

workList_inc.cgi?activityId=2735&sVerifyCode=ABCD&…26

然后我们继续点击他的response,看到里面的json文件,并在json.cn中对其进行了解析,我们发现确实把信息都藏在了这里。包括翻页、对应的图片等。
但是我们发现这些照片的url是经过加密的,所以我们要对其进行解析,parse解密。于是我们现在可以获取到网页的翻页信息,同时也可以找到网页中壁纸的url,那么我们就开始本次爬虫:

import requests
from urllib import parse
from urllib import request #对照片进行下载需要的库
import os #对文件的操作库

headers={
    
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.60 Safari/537.36',
        }#首先我们找到headers
def explanin_data(data):#解码函数
    image_urls=[]
    for x in range(1,9):#因为一张图对应八张分辨率不同的图片且都需要解码
        image_url= parse.unquote(data['sProdImgNo_%d'%x]).replace('200','0')
        #这里将url中的x由200替换成0 表示获取到高清壁纸
        image_urls.append(image_url)
    return image_urls
def main():
    for page in range(9):#我们只爬取9页,可以自由调节
        page_url=f'https://apps.game.qq.com/cgi-bin/ams/module/ishow/V1.0/query/workList_inc.cgi?activityId=2735&sVerifyCode=ABCD&sDataType=JSON&iListNum=20&totalpage=0&page={
      
      page}&iOrder=0&iSortNumClose=1&iAMSActivityId=51991&_everyRead=true&iTypeId=2&iFlowId=267733&iActId=2735&iModuleId=2735&_=1649850019827'
        resp=requests.get(page_url,headers=headers)
        #访问网页源码
        result=resp.json()
        #json一下,变成json格式
        datas=result['List']
        #找到result中的List标签,照片信息全部在这里
        for data in datas:
            image_urls=explanin_data(data)
            #对照片解码并替换成高清
            name=parse.unquote(data['sProdName'])
            #对文件名字进行解码
            dirpath=os.path.join('image',name)
            #os文件操作,文件明的拼接
            os.mkdir(dirpath)
            #创建文件
            for index,image_url in enumerate(image_urls):
            #重要的函数enumerate!!!! 可同时提取索引和内容
                request.urlretrieve(image_url,os.path.join(dirpath,"%d.jpg"%(index+1)))#进行下载
                print('%s下载完成'%image_url)


if __name__ == '__main__':
    main()

这就是我们本次爬虫的全部内容,其中确实有很多很多内容需要学习,我们要知其所以然,感谢各位大佬得观看,看完了麻烦点个赞,谢谢大家啦!

猜你喜欢

转载自blog.csdn.net/m0_37623374/article/details/124691288