Python B站魔力赏市集搜索

该文章已生成可运行项目,

目录

获取heder(手动)

转到postman(获取你的header)(自动?)

代码

报错说明(一点点)

获取到感兴趣的商品后


参考:

 魔力赏市集搜索?使用python去以一个合适的价格搜到想要的手商品_哔哩哔哩_bilibili

写给自己看的,不回答问题

改进:

1. 添加了筛选词 exclude_words

2. 避免重复打印相同条目

3. 添加打印循环次数,让你知道程序还在跑(2023.12.20优化了显示效果,实现了直接刷新)

4. 简化打印,只打印id,名称,价格

5. 优化异常捕捉,跑太多会触发哔哩哔哩安全风控策略

6. 请gpt用Thread加速,不知道有没有用

  1. 获取heder(手动)

        进入网址https://mall.bilibili.com/neul-next/index.html?page=magic-market_index​

        选择“网络”,此时会发现是空白的,点击刷新,才会刷新出信息

选择“Fetch/XHR”,右键list

选择复制cURL(bash)

转到postman(获取你的header)(自动?)

在My Workspace里点击加号

https://mall.bilibili.com/mall-magic-c/internet/c2c/v2/list

粘贴刚才复制的cURL(bash),(好像直接复制上面这句即可)点击Send

选择Python-request,复制postman提供的代码,你就知道自己的header

代码

以下代码不能直接运行,你要填充自己的header

from time import sleep
import requests
import json
from concurrent.futures import ThreadPoolExecutor
import sys


def fetch_data(payload, headers):
        response = requests.post(url, headers=headers, data=payload)
        response.raise_for_status()
        return response.json()


def process_item(item):
    c2c_items_id = item["c2cItemsId"]
    c2c_items_name = item["c2cItemsName"]
    show_price = item["showPrice"]
    if c2c_items_id not in seen_c2c_items_ids:
        seen_c2c_items_ids.add(c2c_items_id)
        if not any(exclude_word in c2c_items_name for exclude_word in exclude_words):
            print(f"\nid: {c2c_items_id}, 名称: {c2c_items_name}, 价格: {show_price}")


url = "https://mall.bilibili.com/mall-magic-c/internet/c2c/v2/list"
i_want = []
keyword = "Thea"
exclude_words = ["景品", "早濑优香", "头盔", "英灵旅装", "二次再版", "拉芙塔莉雅", "索米", "天笠缀", "镜华",
                 "宇崎学妹想要玩", "宇崎酱想要玩耍", "炼狱杏寿郎", "噬血代码", "我推的孩子", "春野樱",
                 "战双帕弥什", "孤独摇滚", "后藤独", "嘉然", "路人女主的养成方法", "赵灵儿", "间谍教室",
                 "从零开始的异世界生活", "酒会观测者", "露西亚", "亚丝娜", "绯染天空", "游戏人生", "奥丁领域",
                 ]  # 不想要的关键词
seen_c2c_items_ids = set()
count = 0
minutes = 0

# Set up the ThreadPoolExecutor
with ThreadPoolExecutor(max_workers=5) as executor:
    while True:
        payload = json.dumps({
            "priceFilters": ["40000-90000"],  # 价格筛选,这里是400~900元,真实价格后面要加两个0
            "categoryFilter": "2312",  # 类型筛选。手办:2312 模型:2066 周边:2331 3C数码:2273
            # "discountFilters": ["50-70"],  # 折扣筛选。
            "sortType": "TIME_DESC",
            "nextId": None
        })
        headers = {
           # ... (你的header)
        }
        try:
            response = executor.submit(fetch_data, payload, headers)
            response = response.result()  # Retrieve the result of the thread execution
            if response is not None:
                nextId = response["data"]["nextId"]
                items = response["data"]["data"]
                executor.map(process_item, items)
                if nextId is None:
                    break
        except TypeError as e:
            if "'NoneType' object is not subscriptable" in str(e):
                sleep(2)
            else:
                print("新错误")
                raise  # 抛出异常
        except requests.exceptions.HTTPError as http_err:
            if http_err.response.status_code == 412:
                print("错误号:412 由于触发哔哩哔哩安全风控策略,该次访问请求被拒绝。")
                if minutes % 1 == 0:
                    print(f"睡了{minutes}分钟")
                sleep(30)
                minutes += 0.5
        except requests.exceptions.JSONDecodeError:
            print("输入参数错误,看起来是触发了哔哩哔哩安全风控策略")
            break

        count += 1
        sys.stdout.write("\r---{:03d}---".format(count))
        sys.stdout.flush()

print("==============获取完成================")
if not i_want:
    print("没有找到")
else:
    print("\n找到期望商品:")
    print(i_want)
    cheap = min(i_want, key=lambda x: x["price"])
    print("\n找到便宜好货:")
    print(cheap)

打印结果示例(现版本策略)

打印结果示例(旧版策略)

报错说明(一点点)

错误号:412 由于触发哔哩哔哩安全风控策略,该次访问请求被拒绝。

解决方法:

  • 使用魔法改变IP(缺点:可能网络不稳定,会导致报错)
  • 多sleep,比如每50次sleep30秒?不知道引发风控的点在哪里

获取到感兴趣的商品后

复制id,在网址的itemsId替换为复制的id即可https://mall.bilibili.com/neul-next/index.html?page=magic-market_detail&noTitleBar=1&itemsId=【你的id】&from=market_index

本文章已经生成可运行项目
打开下面链接,直接免费下载资源: https://renmaiwang.cn/s/2hdp5 由于B会员购魔力市集的图形化爬虫搜索脚本是一个复杂的程序工具,本文将从它的使用场景、主要功能以及技术细节等几个方面进行详细解析。我们了解到这款脚本被设计用来帮助用户在B会员购平台上自动搜索魔力市集的特定商品。在B会员购平台上,魔力市集是一个专门售卖动漫周边商品的区域,由于商品种类繁多且更新频繁,手动查找特定商品的工作量巨大,因此这款爬虫搜索脚本的出现极大地提高了效率。 这款脚本的特点是图形化操作界面,这意味着用户无需了解复杂的编程知识,通过图形界面的操作即可实现自动搜索。它通过模拟用户登录、浏览网页、搜索商品等动作,自动收集商品信息,并将这些信息反馈给用户。值得注意的是,该脚本通常会包含多种搜索条件设置,例如商品类别、价格区间、发售时间等,以帮助用户精确地找到所需的动漫周边商品。 在技术实现方面,该脚本很可能采用了现代网页爬虫常用的编程语言和技术栈。例如,它可能使用了Python语言,并且利用了如Selenium、BeautifulSoup等流行的爬虫库和框架,这些都是进行网页自动化操作和数据提取的强大工具。此外,为了应对B会员购魔力市集的反爬虫机制,脚本中可能包含了IP代理、Cookies管理以及请求头信息伪装等高级技术,从而保证了爬取过程的顺畅和隐蔽性。 为了确保用户在使用过程中能够获得持续的支持和更新,开发者一般会在脚本的最新版本中不断修复已知的bug,同时根据B会员购平台的变动对脚本进行优化升级。此外,一些作者还会提供详细的使用教程和客户支持,帮助用户解决使用过程中遇到的问题。 由于这款脚本的性质属于爬虫程序,使用时需要遵守相关法律法规,尊重数据源网的爬虫协议,合理控制爬取频率和数据使用,避免对网造成过大的负载压力,同时也要保护好用户的个人信息
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值