Python:王者荣耀壁纸爬取

分析流程
目标网站
在这里插入图片描述http://shp.qpic.cn/ishow/2735010212/1577940093_84828260_16596_sProdImgNo_2.jpg/0 1024768壁纸
http://shp.qpic.cn/ishow/2735010212/1577940125_84828260_1263_sProdImgNo_3.jpg/0 1280
720壁纸
http://shp.qpic.cn/ishow/2735010212/1577940125_84828260_1263_sProdImgNo_5.jpg/0 1440900壁纸
http://shp.qpic.cn/ishow/2735010212/1577940125_84828260_1263_sProdImgNo_6.jpg/0 1920
1080壁纸
http://shp.qpic.cn/ishow/2735010212/1577940125_84828260_1263_sProdImgNo_7.jpg/0 19201200壁纸
http://shp.qpic.cn/ishow/2735010212/1577940094_84828260_16596_sProdImgNo_8.jpg/0 1920
1440壁纸
图片链接变化地址在于sProdlmgNo_数字

分析该网站
在这里插入图片描述
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=0&iOrder=0&iSortNumClose=1&jsoncallback=jQuery17103338126908824741_1578643949906&iAMSActivityId=51991&_everyRead=true&iTypeId=2&iFlowId=267733&iActId=2735&iModuleId=2735&_=1578643950203

在这里插入图片描述
怎么解决呢?暴力解决
在URL中删除该值,前端是以&符来分割数据在这里插入图片描述
删除后的目标网站为: 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=0&iOrder=0&iSortNumClose=1&iAMSActivityId=51991&_everyRead=true&iTypeId=2&iFlowId=267733&iActId=2735&iModuleId=2735&_=1578643950203

在这里插入图片描述
requests.utlis.unquote():解码
requests.utils.quote():编码

# -*- coding: utf-8 -*- 
# @Time : 2020/1/15 20:58 
# @Author : 大数据小J

import requests
from urllib import request
import os


class wallpaper():

    def __init__(self):
        for i in range(20):
            self.url = '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={}&iOrder=0&iSortNumClose=1&iAMSActivityId=51991&_everyRead=true&iTypeId=2&iFlowId=267733&iActId=2735&iModuleId=2735&_=1579093407070'.format(i)
            self.headers = {
                'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',
                'referer': 'https://pvp.qq.com/web201605/wallpaper.shtml'}

    def get_url(self):
        response = requests.get(self.url, headers=self.headers).json()
        data = response['List']
        return data

    def get_data(self, data):
        list_data = []
        for index, jpg_url in enumerate(range(1, 9)):
            jpg_url = data['sProdImgNo_{}'.format(jpg_url)]
            jpg_url = requests.utils.unquote(jpg_url).replace('200', '0')
            name = requests.utils.unquote(data['sProdName'])
            list_data.append((index, jpg_url, name))
        return list_data

    def write_data(self, index, jpg_url, name):
        path = 'demo'
        dir_path = path + '/' + name
        if not os.path.exists(dir_path):
            os.mkdir(dir_path)
        request.urlretrieve(jpg_url, os.path.join(dir_path + '/' + '%d.jpg' % (index + 1)))
        print('下载完成第{}张{}壁纸'.format(index,name))

    # 主要的业务逻辑
    def run(self):
        for data in self.get_url():
            for i in self.get_data(data):
                index = i[0]
                jpg_url = i[1]
                name = i[2]
                self.write_data(index, jpg_url, name)


if __name__ == '__main__':
    data = wallpaper()
    data.run()

运行结果:
在这里插入图片描述
在这里插入图片描述

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值