抓取用户指定的原神角色图片

目录

        1.抓包确认数据接口位置

                1.1,抓包

                1.2,找到url

2.构建单个页面请求

                2.1,构建单个请求

3.抓取图片

                3.1,我们要抓取多个页面的数据,进行url分析

                3.2,构建多页面抓取图片,接收用户输入的角色名称(成功)

                3.3,加一些过滤条件

                3.4,下载图片,完成

4.源代码

                 4.1,代码展示


1.抓包确认数据接口位置

                1.1,抓包,点击接口查看里面的数据,找到图片所在的接口


                 1.2,点击headers(请求头)找到url


2.构建单个页面请求

                2.1,构建单个请求,看一下能抓到我们需要的数据嘛(成功)


 3.抓取图片

                3.1,我们要抓取多个页面的数据,进行url分析,看一下url有规律没,通过分析发现只有last_id这个参数在变化,每次变化都是加载一个新的页面


                3.2,构建多页面抓取图片,接收用户输入的角色名称(成功)


                3.3,分析页面发现有一些攻略图片和一些心得图片以及一些违规图片无法显示,我们不需要,所以我们需要加一些过滤条件


                3.4,下载图片,完成


4.源代码

                4.1,代码展示
import requests
import re
import os


def get():
    # 共20页
    # keyword=搜索的值
    names = input('请输入需要搜索的角色名:')
    ids = 0
    while True:
        ids += 1
        url = f'https://bbs-api.miyoushe.com/post/wapi/searchPosts?gids=2&keyword={names}图片&last_id={ids}&size=20'
        data = requests.get(url=url)
        for i in range(20):
            try:
                bz = data.json()['data']['posts'][i]['topics'][0]['name']
                urls = data.json()['data']['posts'][i]['image_list']
                if re.match('.*?攻略', bz) or re.match('.*?指南',bz) or re.match('.*?心得',bz) or bz == '祈愿分享':
                    continue
                else:
                    for j in range(len(urls)):
                        url = urls[j]['url']
                        name = url[60:92]
                        if len(url) != 40:
                            # print(url,bz)
                            r = requests.get(url)
                            with open(f'./ys_tp/{name}.png', 'wb') as f:
                                f.write(r.content)
                                print(f'{name} 下载完成')
                            if r == None:
                                bz = 'False'
                                return bz
            except Exception as e:
                print(e)
                continue
        if bz == 'False':
            break


if __name__ == '__main__':
    # 创建文件夹,如果已经有了该文件夹,记得注释,不然会报错
    os.makedirs('./ys_tp/', exist_ok=True)
    get()

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值